sql >> Database >  >> NoSQL >> MongoDB

mongo db ontwerp van volgende en feeds, waar moet ik insluiten?

Over het algemeen is het om verschillende redenen een slecht idee om volg-/volgrelaties in gebruikersdocumenten in te sluiten:

(1) er is een maximale documentgrootte van 16 MB, en het is aannemelijk dat een populaire gebruiker van een goed geabonneerde site honderdduizenden volgers krijgt, wat de maximale documentgrootte zal benaderen,

(2) volgersrelaties veranderen vaak, en het geval waarin een gebruiker veel volgers krijgt, vertaalt zich dus in herhaalde documentgroei als je volgers insluit. Frequente documentgroei zal de MongoDB-prestaties aanzienlijk belemmeren en moet daarom worden vermeden (af en toe documentgroei, vooral wanneer documenten de neiging hebben om een ​​stabiele uiteindelijke grootte te bereiken, is minder een prestatieverlies).

Dus ja, het is het beste om de volgende/gevolgd-door-relatie op te splitsen in een afzonderlijke verzameling records die elk twee velden hebben, bijvoorbeeld { _id :, oid :}, met indexen op _id (voor de "wie volg ik? " query) en oid (voor de "wie volgt mij?" query). Elke individuele statuswijziging wordt gemodelleerd door het toevoegen of verwijderen van een enkel document, maar als u ook zaken als het aantal volgers weergeeft, moet u waarschijnlijk afzonderlijke tellers bijhouden die u bijwerkt na het invoegen/verwijderen van randen.

(Dit veronderstelt natuurlijk dat uw zakelijke vereisten u enige flexibiliteit bieden met betrekking tot de consistentiedetails:in het algemeen, als uw weergavecode een gebruiker vertelt dat hij 304 volgers heeft en deze vervolgens gaat opsommen, zal alleen de meest kieskeurige gebruiker controleren of de opgesomde volgers oplopend tot 304. Als zakelijke vereisten absolute consistentie vereisen, hebt u ofwel een database nodig die transacties voor u isoleert, of u moet zelf de telling doen als onderdeel van het weergeven van alle gebruikersidentiteiten.)




  1. MongoDB Java-stuurprogramma:autoConnectRetry

  2. Mongoose schema optionele velden

  3. erfenis in documentendatabase?

  4. Hoe de laatste N-records in Mongodb te krijgen?