Забележка :Това беше написано през 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?