Supposons que vous ayez un grand nombre d'utilisateurs (M) et un grand nombre de documents (N) et que vous souhaitiez que chaque utilisateur puisse marquer chaque document comme lu ou non lu (comme n'importe quel système de messagerie). Quelle est la meilleure façon de représenter cela dans MongoDB? Ou toute autre base de données de documents?MongoDB/NOSQL: meilleure approche pour gérer l'état de lecture/non-lu sur les messages
Il y a plusieurs questions sur StackOverflow poser cette question pour les bases de données relationnelles, mais je ne l'ai pas avec des recommandations pour les bases de données de documents:
What's the most efficient way to remember read/unread status across multiple items?
Implementing an efficient system of "unread comments" counters
En général, les réponses comportent une liste de table tout ce qu'un utilisateur a lu: (c'est-à-dire les tuples de l'ID utilisateur, ID du document) avec quelques optimisations possibles pour une date de coupure permettant à toute la lecture d'effacer la base de données et de recommencer '. Donc, experts MongoDB/NOSQL, quelles approches avez-vous vu dans la pratique à ce problème et comment ont-ils performé?
Merci, donc votre recommandation est essentiellement le même type de table 'tuple/join' que le cas relationnel, non? Une raison particulière pour laquelle vous stockez les messages et les préférences dans la même collection? –
La chose avec MongoDB est que généralement le plus plat vous permet de rendre votre objet meilleur. Bien qu'il puisse stocker des structures imbriquées, il n'est pas le meilleur pour interroger ou entrer dans ces structures plus tard pour les modifier. Donc, beaucoup de choses peuvent finir par ressembler à un relationnel, mais avec moins d'abstraction en raison de ne pas utiliser les tables. En outre, il n'y a vraiment aucune raison pour laquelle je les stocke dans la même collection autre que ne pas aimer avoir une collection bazillion. Si vous prévoyez d'avoir des millions de messages, il peut être judicieux d'utiliser des collections différentes afin de pouvoir configurer les index pour mieux s'adapter à chaque objet. – Klinky