Question

CouchDB ou Couchbase approprié comme la persistance solution basée NoSQL pour stocker les utilisateurs et l'historique des chats statistiques? Depuis l'histoire le chat aurait probablement besoin d'écritures plutôt que lit ce qui devrait être la structure du document pour une histoire unique utilisateur avec quelques statistiques - entité unique qui représente l'utilisateur avec des documents intégrés ou séparés pour les données historiques (beaucoup de petits docs) et des statistiques (petit nombre de docs)?

Était-ce utile?

La solution

Oui, CouchDB ou Couchbase convient.

Depuis l'histoire le chat nécessite beaucoup écrit, je pense à quelque chose qui rend l'écriture facile: il suffit de déposer un document et laissez CouchDB vous inquiétez pas agréger. Dans un POST rapide, vous pouvez décrire le message de chat, qui l'a envoyé, horodatage, un salon de discussion, etc.

CouchDB vue collation fera l'entité unique représentant un utilisateur avec leurs données historiques. Par exemple, si vous voulez savoir, votre fonction carte volume des messages de l'utilisateur émet une clé comme ceci:

emit([doc.username, doc.year, doc.month, doc.day, doc.hour, doc.minute], 1);

Et la diminution de la fonction additionne toutes les valeurs. Maintenant, vous pouvez interroger le volume annuel d'un utilisateur,

group_level=3&startkey=["somebody",2011,null]&endkey=["somebody",2011,{}]

ou (en augmentant le niveau du groupe) volume mensuel, le volume quotidien, le volume horaire, etc.

Considérations

Cette technique a des coûts et des avantages. Le compromis de base est, les mises à jour doivent être facile , les rapports doivent être raisonnable . Dans votre exemple de 10.000 mises à jour par jour, je reçois la pensée nerveux au sujet de rejets de 409 Conflict, ou maintenir le code résolution des conflits, ou de faire le client d'une grâce récupérer erreur lorsque plusieurs messages sont empilent!

La technique proposée aide. Chaque mise à jour est isolé des autres, mises à jour peuvent se produire hors de l'ordre, la récupération d'erreur est pas trop mal. Il suffit de réessayer plusieurs fois en arrière-plan. (Note, je suis personnellement un avocat que mises à jour doivent être faciles -peut-être je suis partial.)

Le coût est l'espace disque « débilitante », et la récupération de données est (relativement) plus de travail. CouchDB est lent et le gaspillage comme les camions sont lents et inutiles. En réalité, les camions sont communs dans des endroits riches et rares dans les régions pauvres parce qu'ils sont mieux à long terme deal. Sur le plan émotionnel, nous voyons des camions bois bois et au sujet vomi fumée noire, mais de façon rationnelle, nous savons qu'ils sont plus efficaces.

La plupart des statistiques peuvent être carte directe / Imagettes. Cependant, vous pouvez également conserver des documents « de synthèse » avec des résultats agrégés ou indépendants, ou tout ce que vous avez besoin. Mises à jour fréquentes ne sont pas un problème (à cette échelle: 86.400 mises à jour par jour est encore à seulement 1 / sec). Mais vous voudrez peut-être un client dédié « updater » pour ces documents. Avec une seule mise à jour de travail client les documents spéciaux, vous ne serez pas 409 Conflicts puisque personne ne se bat d'autre à mettre à jour le même document.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top