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

Jaká je dobrá struktura dokumentu MongoDB pro nejúčinnější dotazování sledujících/sledujících uživatelů?

Toto je klasický problém follower-followee a neexistuje na něj nikdo odpověď.. Podívejte se na tento odkaz:

mongo db design sledování a zdrojů, kam mám vložit?

Ve skutečnosti se tato situace velmi dobře hodí k relačnímu schématu, pokud by MongoDB a SQL server byly jedinou možností, kterou jste měli. Ale toto je zvláštní typ vztahového problému, ve kterém máte obousměrný vztah. To by možná lépe zvládla databáze grafů:

http://forum.kohanaframework.org/discussion/10130/followers-and-following-database-design-like-twitter/p1

Jde o to, že byste si mohli ponechat sledující nebo sledující v dokumentu uživatele, ale ne obojí, abyste se vyhnuli problémům s dvojitým smazáním. Takže pokud se musíte držet MongoDB, jedna cesta ven by mohla být... ​​(za předpokladu, že lidé nesledují/nesledují nikoho to často),

Ponechat v dokumentu pouze sledující, protože když si prohlížím svůj profil, zajímali by mě lidé, které sleduji.. (to je důvod, proč jsem je sledoval na prvním místě, jo?)..A pak proveďte dotaz jako:

db.Users.find({ user_id : { $in : followees })

To vám řekne, kdo všechno mě sleduje (řekněme, že moje id je 'user_id').

Další důvod, proč nenavrhuji opak, je ten.. jeden může sledovat maximálně 30-40 lidí, takže uživatelský dokument obsahující 30-40 sledujících by měl být v pořádku oproti uživatelskému dokumentu, který ukládá tisíce sledujících! S přístupem následovníka v dokumentu získáte zhruba stejně velké uživatelské dokumenty v celém textu. V přístupu následovníka v dokumentu budete mít některé velmi malé, ale také velmi objemné dokumenty. A v závislosti na množství údajů o sledujících, které vložíte (pokud existují, kromě follower_id), možná Chcete-li být opatrní ohledně omezení velikosti dokumentu.



  1. jak spravovat pole _id při použití POCO s ovladačem mongodb c#

  2. Protokolování pomocí winston-mongodb a express-winston

  3. MongoDB na serveru EC2 nebo AWS SimpleDB?

  4. Java/Mongodb ověřování