sql >> Database >  >> NoSQL >> MongoDB

Hoe om te gaan met relaties tijdens het gebruik van mongodb

BEWERKEN:

Ik heb zojuist een antwoord gevonden van Brendan McAdams, een man van 10gen, die duidelijk veel gezaghebbender is dan ik, en hij raadt aan om documenten in te sluiten.

oudere tekst:

De eerste is om handmatig een ObjectID op te nemen in elke opmerking van de gebruiker waartoe ze behoren.

comment: { text : "...", 
           date: "...", 
           user: ObjectId("4b866f08234ae01d21d89604"),
           votes: 7 }

De tweede en slimme manier is om DBRefs te gebruiken

we voegen extra I/O toe aan onze schijf, prestatieverlies, heb ik gelijk? (ik weet niet zeker hoe dit intern werkt) daarom moeten we linken vermijden indien mogelijk, toch?

Ja - er zou nog een vraag zijn, maar de bestuurder zal het voor u doen - u kunt dit zien als een soort syntaxissuiker. Heeft het invloed op de prestaties? Het hangt er ook van af :) Een van de redenen waarom Mongo zo ontzettend snel is, is dat het geheugen toegewezen bestanden en mongo doen hun best om alle werksets (plus indexen) direct in RAM te bewaren. En elke 60 seconden (standaard) synchroniseert het RAM-snapshot met schijfgebaseerd bestand.
Als ik zeg werkset , ik bedoel dingen waarmee je werkt:je kunt drie collecties hebben - foo , balk , baz , maar als je nu alleen met foo en bar werkt, zouden ze in ram moeten worden geladen, terwijl baz op de schijf blijft staan. Bovendien laten geheugen toegewezen bestanden het toe om slechts een deel van de collectie te laden. Dus als je iets als engadget of techcrunch aan het bouwen bent, is de kans groot dat de werkset de laatste paar dagen opmerkingen bevat en dat oude pagina's veel minder vaak nieuw leven worden ingeblazen (opmerkingen zouden op verzoek in het geheugen worden geplaatst), dus dat doet het niet' de prestaties niet significant beïnvloeden.

Dus vat het samen:zolang je de set in het geheugen blijft werken (je denkt misschien dat dit lees-/schrijfcaching is), is het ophalen van die dingen supersnel en zou nog een vraag geen probleem zijn. Als u werkt met gegevens die niet in het geheugen passen, zou er snelheid zijn degradatie , maar ik weet nu uw omstandigheden niet -- het zou acceptabel kunnen zijn, dus in beide gevallen heb ik de neiging om wel gebruiken te kiezen koppelen.




  1. Heroku vooraf gecompileerde activa mislukt

  2. Mongorestore naar een andere database

  3. Hoe maak ik een dynamische gelijk aan-query met behulp van Apache Camel en MongoDB?

  4. MongoDB - aanhalingstekens ontsnappen tijdens het invoegen van een record