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

разбират MongoDB кеш система

Забележка :Това беше написано през 2013 г., когато MongoDB беше все още доста млад, той нямаше функциите, които има днес, докато този отговор все още важи за mmap, не е за другите технологии за съхранение, които MongoDB внедрява сега, като WiredTiger, или Percona.

Добро място да започнете да разберете точно какво е индекс:http://docs.mongodb.org/manual/core/indexes/

След като сте се запознали с това, ще разберете защо са толкова добри обаче, като прескочите напред към някои от по-сложните въпроси.

Как можем да сме сигурни, че данните, които търсим, ще дойдат от паметта или не?

Един от начините е да погледнете yields поле на всяка заявка explain() . Това ще ви каже колко пъти четецът се е отключил, защото данните не са били в RAM.

Друг по-задълбочен начин е да разгледате програми като mongostat и други подобни програми. Тези програми ще ви кажат какви грешки в страницата (когато данните трябва да бъдат преместени в RAM от диска) се случват на вашия mongod .

Разбирам, че MongoDB използва свободната памет за кеширане на данни за паметта, която е свободна в момента, но може ли някой да обясни допълнително глобалното поведение?

Това всъщност е неправилно. По-лесно е просто да се каже, че MongoDB прави това, но в действителност не го прави. Всъщност ОС и нейните собствени алгоритми за пейджинг, обикновено LRU, правят това за MongoDB. MongoDB кешира индексни планове за определен период от време, така че да не се налага непрекъснато да проверява и тества за индекси.

В какъв случай може да е по-добре да използваме променлива в нашия сървър на възли, който съхранява данни, отколкото да се доверим на кеш системата MongoDB?

Не съм сигурен как очаквате това да работи...Имам предвид, че двете правят доста различни неща и ако възнамерявате да четете данните си от MongoDB в приложението си при стартиране в този var, определено не бих го препоръчал.

Освен това алгоритмите на ОС за управление на паметта са изключително зрели и бързи, така че е добре.

Как в световен мащаб съветвате да използвате MongoDB за огромен трафик?

Хм, това е толкова голям въпрос. Наистина бих ви препоръчал Google малко по тази тема, но както се посочва в документацията, трябва да се уверите, че работният ви комплект се вписва в RAM за един.

Ето една добра отправна точка:Какво означава да поставите "работен комплект" в RAM за MongoDB?



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да премахнете елемент от двойно вложен масив в документ на MongoDB.

  2. Обобщаване на $lookup с C#

  3. Преобразуване на речник<string, object>-to-BsonDocument, пропускайки полето _t

  4. Надеждно се свържете отново с MongoDB

  5. Получаване на вложени данни от MongoDB в рамка с данни на Pandas