2014-07-23 7 views
5

Je suis un peu nouveau pour les bases de données noSQL (je suis assez bon avec les bases de données relationnelles cependant), et je me demande quel est le moyen le plus efficace de gérer les messages seraient. Chaque "message" aura un seul expéditeur et un seul destinataire. Le nombre de messages reçus/envoyés variera considérablement entre les utilisateurs. Ce système devrait bien évoluer à plus de 1k + utilisateurs.MongoDB/Mongoose Schema pour les messages threadés (efficacement)

J'ai lu sur le ventilateur en écriture/lecture, mais je ne suis pas sûr à quel point cela fonctionnerait pour les messages threadés.

Comme je suis nouveau sur MongoDB/NoSQL en général, je ne suis pas vraiment habitué à structurer efficacement les données de cette façon. Je suppose qu'il va y avoir des objets imbriqués dans n'importe quelle manière efficace de gérer cela ... mais je ne peux pas me contenter d'un design qui semble à la fois efficace et pratique pour les conversations threadées entre 2 utilisateurs.

Je pensais à stocker des données avec un tableau des 2 utilisateurs, combiné avec un tableau d'objets 'message'. Mais il y a aussi le problème de l'ordre des noms d'utilisateur des 2 utilisateurs. (ex: [UserA, UserB] et [UserB, UserA] sont tous les deux possibles et seraient problématiques, ce qui a semblé être une mauvaise idée). Je pensais faire tout le ventilateur en lecture/écriture, mais cela ne semble pas efficace pour les messages threadés (puisque si saisir des messages par le destinataire est pratique, saisir les messages par expéditeur ne sera pas et vice versa) . Je penche en faveur de l'acceptation des messages par le destinataire (puisque la boîte de réception charge plusieurs messages, et l'envoi n'en implique qu'un [mais avec un temps de recherche plus long]). Mais j'aimerais vraiment saisir une conversation filaire en une fois, ainsi que la liste des utilisateurs avec lesquels un utilisateur a des discussions avec fil (pour la liste des discussions).

Si quelqu'un pouvait me donner un schéma efficace pour les conversations avec fil, je serais très reconnaissant. J'ai fait des recherches sur ce sujet et essayé de régler un design pendant des heures, et je suis épuisé. Je continue de trouver des failles dans mes conceptions et de les mettre au rebut et je voudrais vraiment juste une entrée de quelqu'un plus expérimenté avec bases de données NoSQL/MongoDB afin que je puisse éviter de faire un énorme défaut de conception et/ou une logique d'écriture meilleure conception de base de données.

Merci d'avance pour toute aide.

Répondre

9

Sur ce sujet particulier que vous avez de la chance, il y a un grand poste de discuter des différentes approches du schéma ici (il est une légère torsion sur ce que vous êtes à la recherche, mais pas très différent):

http://blog.mongodb.org/post/65612078649/schema-design-for-social-inboxes-in-mongodb

Ensuite, cette question a également été abordée en détail à MongoDB du monde 2014 en trois parties par Darren bois et Asya Kamsky:

Part 1 Outline et Video

Part 2 Outline et Video

Part 3 Outline et Video

également à MongoDB mondiale, les gars de Dropbox ont parlé des leçons apprises lors de la construction de leur boîte aux lettres:

http://www.mongodb.com/presentations/mongodb-mailbox

Et puis, à arrondir au large , il y a une architecture de référence complète avec le code appelé Socialite sur Github écrit par Darren Wood:

https://github.com/10gen-labs/socialite

+0

Merci pour tous les liens utiles. Je suis tombé sur le premier et le dernier pendant mes recherches. Je suppose que ma vraie question est, par souci d'efficacité, où devrais-je séparer le schéma de base de données et la logique pour cela. Devrais-je le stocker d'une manière qui me permette de l'attraper à partir de la base de données déjà triée d'une manière thread-conversation ... ou devrais-je simplement avoir un schéma de message et le trier avec la logique côté serveur? –

Questions connexes