2011-12-03 5 views
1

Nous sommes encore dans les premières étapes de déterminer si nous allons avec RDBMS ou NoSQL. L'un des domaines d'intérêt est si nous allons avec NoSQL (probablement CouchDB bien que pourrait être MongoDB), séparer la base de données NoSQL sur différents serveurs serait mieux qu'une instance d'un serveur NoSQL?Dois-je séparer la base de données NoSQL sur des serveurs distincts?

Nous allons construire un système de gestion de fichiers où certains fichiers/vidéos seront regroupés sur différents serveurs. Les fichiers/vidéos liés aux comptes seront stockés sur le serveur de comptes, etc. Pour rechercher un fichier lié à un compte, nous rechercherons probablement la base de données sur le serveur de comptes.

Je peux voir à l'avenir que quelqu'un dira "pourquoi je ne peux pas rechercher sur tous les serveurs pour un type de fichier ou de vidéo"? Clairement ayant une base de données serait mieux ici.

Cependant, mis à part la latence dans les requêtes http pour interroger les serveurs, y a-t-il de meilleures façons de le faire ou les avantages et les inconvénients d'avoir une grande base de données?

JD

Répondre

2

L'idée de (la plupart) des produits NoSQL est qu'ils offrent une évolutivité horizontale. Cela signifie que votre seule instance logique peut se trouver sur des dizaines de serveurs. Dans MongoDB, par exemple, vous pouvez utiliser auto-sharding. Pour votre programme, ceci est complètement transparent: votre code est (presque) le même que celui que vous utiliseriez pour un seul serveur de base de données, mais les données résident, par exemple, sur 5 serveurs. Il existe de nombreux avantages: vous avez un emplacement central pour administrer votre base de données, vous pouvez interroger toutes les bases de données si nécessaire, vous n'avez pas besoin de manipuler w/plusieurs connexions db dans votre code, la db équilibre automatiquement ces les collections qui doivent être équilibrées, les opérations de mappage/réduction peuvent être exécutées en parallèle si la requête le permet, etc.

Les plus importants pour moi: les frais généraux d'administration sont minimes et vous n'avez pas à en mettre trop pensé dans ce maintenant, parce que vous pouvez ajouter l'auto-sharding plus tard.

Je n'essaierais pas de faire du sharding moi-même, parce qu'il réinvente la roue, et ce n'est pas facile non plus. C'était l'un des principaux moteurs de NoSQL en premier lieu.

+0

Merci @mnemosyn. J'essaie toujours de comprendre l'architecture de NoSQL. Ma compréhension initiale était que je venais de mettre une base de données sur chacun des serveurs et juste les interroger pour obtenir un résultat global de la recherche. Donc, à partir de votre réponse, autosharding plus tard peut résoudre ce problème. Avec auto-sharding, puis-je dire "Tous les documents de comptes" devrait être sur le serveur 2? –

+0

Vous avez mentionné "les opérations de mappage/réduction peuvent s'exécuter en parallèle si la requête le permet, etc.", pouvez-vous me donner plus d'informations sur ce que vous voulez dire? –

+1

"Puis-je dire" Tous les documents de comptes "devrait être sur le serveur 2?" -- Eh bien pas vraiment. La question est: pourquoi voudriez-vous faire cela, plutôt que de laisser le db décider où les données devraient se trouver? Parallélisation: Certaines requêtes (non seulement map/reduce) peuvent être parallélisées, par ex. count ({color: blue}) interroge tous les serveurs en même temps et ajoute les résultats, plutôt que de le faire séquentiellement. Voir le lien dans ma réponse pour plus de détails. – mnemosyn

Questions connexes