MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Разделената колекция MongoDB не се ребалансира

В MongoDB, когато отидете на шардирана система и не видите никакво балансиране, това може да е едно от няколко неща.

  1. Възможно е да нямате достатъчно данни, за да активирате балансиране. Това определено не беше вашата ситуация, но някои хора може да не осъзнаят, че при размер на парчето по подразбиране от 64 MB може да отнеме известно време за вмъкване на данни, преди да има достатъчно за разделяне и балансиране на част от тях към други парчета.

  2. Балансиращият може да не е работил - тъй като другите ви колекции се балансират, това е малко вероятно във вашия случай, освен ако тази колекция не е била шардинг последна, след като балансиращият е бил спрян по някаква причина.

  3. Частите във вашата колекция не могат да бъдат преместени. Това може да се случи, когато ключът на сегмента не е достатъчно гранулиран, за да раздели данните на достатъчно малки части. Както се оказа, това е вашият случай, защото ключът ви за сегмент се оказа недостатъчно детайлен за тази голяма колекция - имате 105 парчета (което вероятно съответства на броя на уникалните стойности на job_id) и над 30 GB данни. Когато парчетата са твърде големи и балансьорът не може да ги премести, той ги маркира като „jumbo“ (така че няма да върти колелата си, опитвайки се да ги премести).

Как да се възстановим от лош избор на shard ключ? Обикновено е много болезнено да промените shard ключа - тъй като shard ключът е неизменен, трябва да направите еквивалент на пълна миграция на данни, за да ги поставите в колекция с друг shard ключ. Във вашия случай обаче цялата колекция все още е на един шард, така че би трябвало да е сравнително лесно да „откъснете“ колекцията и да я повторите с нов ключ за сегмент. Тъй като броят на job_ids е сравнително малък, бих препоръчал да използвате обикновен индекс за шардиране на job_id,customer_code, тъй като вероятно правите заявки за това и предполагам, че винаги се задава по време на създаване на документ.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Работа със специални знаци в колекция Mongo

  2. Как да внедрите дискова хеш карта с помощта на MongoDB-Java

  3. MongoDB $toDate

  4. Елемент за достъп в масив mongo в java

  5. MongoDB:Фатална грешка:Клас „MongoClient“ не е намерен