sql >> Database >  >> NoSQL >> MongoDB

het MongoDB-cachesysteem begrijpen

Opmerking :Dit werd in 2013 geschreven toen MongoDB nog vrij jong was, het had niet de functies die het vandaag heeft, terwijl dit antwoord nog steeds geldt voor mmap, niet voor de andere opslagtechnologieën die MongoDB nu implementeert, zoals WiredTiger, of Percona.

Een goede plek om te beginnen precies te begrijpen wat is een index:http://docs.mongodb.org/manual/core/indexes/

Nadat je dat hebt opgepoetst, zul je begrijpen waarom ze zo goed zijn, maar je gaat verder met enkele van de meer ingewikkelde vragen.

Hoe kunnen we er zeker van zijn dat de gegevens die we opvragen uit het geheugen komen of niet?

Een manier is om te kijken naar de yields veld op elke zoekopdracht explain() . Dit zal u vertellen hoe vaak de lezer zijn vergrendeling heeft opgeheven omdat de gegevens zich niet in het RAM bevonden.

Een andere, meer diepgaande manier is om naar programma's zoals mongostat en andere dergelijke programma's te kijken. Deze programma's zullen u vertellen welke paginafouten (wanneer gegevens van schijf naar het RAM moeten worden gewisseld) optreden op uw mongod .

Ik begrijp dat MongoDB het vrije geheugen gebruikt om gegevens over het geheugen dat momenteel vrij is in de cache op te slaan, maar kan iemand het globale gedrag verder uitleggen?

Dit is eigenlijk onjuist. Het is gemakkelijker om gewoon te zeggen dat MongoDB dit doet, maar in werkelijkheid doet het dat niet. Het is in feite het besturingssysteem en zijn eigen paging-algoritmen, meestal de LRU, die dit voor MongoDB doen. MongoDB voert cache-indexplannen uit voor een bepaalde periode, zodat het niet constant hoeft te blijven controleren en testen op indexen.

In welk geval kan het beter zijn om een ​​variabele in onze node-server te gebruiken die gegevens opslaat dan het MongoDB-cachesysteem te vertrouwen?

Ik weet niet zeker hoe je verwacht dat dat werkt... Ik bedoel, de twee doen heel verschillende dingen en als je van plan bent om je gegevens van MongoDB in je applicatie in te lezen bij het opstarten in die var, dan zou ik het zeker niet aanraden.

Bovendien zijn OS-algoritmen voor geheugenbeheer extreem volwassen en snel, dus het is oké.

Hoe adviseer je wereldwijd om MongoDB te gebruiken voor veel verkeer?

Hmm, dit is zo'n grote vraag. Ik zou je echt een beetje Google aanraden in dit onderwerp, maar zoals in de documentatie staat, moet je ervoor zorgen dat je werkset in RAM past.

Hier is een goed startpunt:wat betekent het om een ​​"werkset" in RAM voor MongoDB in te passen?



  1. Jest en Redis (probleem met unit-tests met databasecache)

  2. Hoe een array uit de mongoDB-verzameling te halen?

  3. Indexeren op een veld dat zich in een array van subdocumenten bevindt

  4. Waarden krijgen met jedis-pijplijn