sql >> Databáze >  >> NoSQL >> MongoDB

pochopit systém mezipaměti MongoDB

Poznámka :Toto bylo napsáno v roce 2013, kdy byl MongoDB ještě docela mladý, neměl funkce jako dnes, zatímco tato odpověď stále platí pro mmap, neplatí pro ostatní technologie úložiště, které nyní MongoDB implementuje, jako je WiredTiger, nebo Percona.

Dobré místo, kde začít, abyste přesně pochopili, co je index:http://docs.mongodb.org/manual/core/indexes/

Poté, co si to oprášíte, pochopíte, proč jsou tak dobré, ale přeskočíte k některým složitějším otázkám.

Jak si můžeme být jisti, že data, na která se ptáme, pocházejí z paměti nebo ne?

Jedním ze způsobů je podívat se na yields pole v libovolném dotazu explain() . To vám řekne, kolikrát se čtečka zablokovala, protože data nebyla v RAM.

Další podrobnější způsob je podívat se na programy jako mongostat a další podobné programy. Tyto programy vám řeknou, jaké chyby stránky (když je třeba naskenovat data z disku do paměti RAM) na vašem mongod .

Chápu, že MongoDB používá volnou paměť k ukládání dat o paměti, která je momentálně volná, ale mohl by někdo vysvětlit globální chování?

To je ve skutečnosti nesprávné. Je jednodušší říct, že MongoDB to dělá, ale ve skutečnosti to tak není. Je to ve skutečnosti operační systém a jeho vlastní stránkovací algoritmy, obvykle LRU, co to pro MongoDB dělá. MongoDB však provádí plány indexů mezipaměti na určitou dobu, takže nemusí neustále kontrolovat a testovat indexy.

V jakém případě by mohlo být lepší použít proměnnou na našem uzlovém serveru, která ukládá data, než důvěřovat systému mezipaměti MongoDB?

Nejste si jisti, jak očekáváte, že to bude fungovat...myslím tím, že oba dělají docela odlišné věci a pokud máte v úmyslu načíst data z MongoDB do vaší aplikace při spuštění do této var, pak bych to rozhodně nedoporučoval.

Kromě toho jsou algoritmy OS pro správu paměti extrémně vyspělé a rychlé, takže je to v pořádku.

Jak globálně doporučujete používat MongoDB pro velký provoz?

Hmm, to je tak velká otázka. Opravdu bych vám v tomto tématu doporučil trochu Google, ale jak uvádí dokumentace, musíte zajistit, aby se vaše pracovní sada vešla do paměti RAM.

Zde je dobrý výchozí bod:Co to znamená umístit „pracovní sadu“ do paměti RAM pro MongoDB?



  1. jarní relace redis 'Není definována žádná bean s názvem 'springSessionRepositoryFilter'

  2. Přetrvává Redis data?

  3. Implementujte referenční sady v Redis

  4. Nastavení připojení singleton s node.js a mongo