2013-05-07 3 views
8

Est-ce que Apache Cassandra prend en charge le sharding? Excusez-moi, cette question doit sembler anodine, mais je n'arrive pas à trouver la réponse. J'ai lu que Cassandra a été partiellement modélisé après la Grande Table de GAE qui éclate sur une échelle massive. Mais la plupart de la documentation que je trouve actuellement sur Cassandra semble impliquer que Cassandra ne partage pas les données horizontalement sur plusieurs machines, mais supporte plutôt beaucoup de machines dupliquées. Cela impliquerait que Cassandra est un bon lecteur de haute disponibilité, mais finirait par tomber en panne si le volume d'écriture devenait très très élevé.Est-ce que Cassandra prend en charge le sharding?

Répondre

13

Cassandra effectue une partition entre les nœuds (car si vous ne pouvez pas la diviser, vous ne pouvez pas la mettre à l'échelle). Toutes les données d'un cluster Cassandra sont réparties sur "l'anneau" et chaque nœud de l'anneau est responsable d'une ou de plusieurs plages de clés. Vous avez le contrôle sur le Partitioner (par exemple, Aléatoire, Ordonné) et combien de nœuds sur l'anneau une clé/colonne doit être répliquée en fonction de vos besoins.

Cela contient un assez bon aperçu. Basic architecture

Je vous recommande également de lire le livre blanc Dynamo. Bien que Cassandra soit différente de Dynamo de plusieurs façons, conceptuellement, ils proviennent des mêmes racines. Check it out: Dynamo White Paper

+0

Ok, question clé: Est-ce que Cassandra peut être interrogé en utilisant des opérateurs supérieurs et inférieurs à ceux d'Olog (n)? –

+0

Cela dépend de l'utilisation de Partitioner aléatoire ou commandé. Partitionner aléatoire distribuera uniformément à travers les noeuds, il est donc possible qu'une requête de portée doive frapper la plupart/tous les noeuds pour récupérer les données ... alors peut-être O (n). Avec le Partitionneur Commandé Cassandra peut déterminer exactement quels sont les nœuds à interroger et à renvoyer tout ce qui se trouve sur l'anneau, mais cela se fait au prix d'une distribution de données paire (c'est-à-dire hellopots). Il existe des moyens d'accomplir des requêtes de plage (par exemple, créez votre propre index où votre clé de ligne est une colonne). Cela justifie une autre question/discussion en soi. –

+0

Les données partitionnées sont-elles répliquées sur tous les noeuds (ceux configurés pour la réplication)? – user3587180

-3

oui, cassandra soutient sharding, mais à sa manière. Dans Mongodb, chaque nœud secondaire contient des données complètes du nœud principal, mais dans Cassandra, chaque nœud secondaire a la responsabilité de ne conserver que quelques partitions clés de données.

+7

Vous fusionnez MongoDB [* réplication *] (http://docs.mongodb.org/manual/replication/) (où les secondaires contiennent une copie complète des données pour la redondance) avec [* sharding *] (http://docs.mongodb.org/manual/sharding/) (partitionnement d'une base de données logique sur un cluster de machines). Généralement, si vous êtes sharding vous voudriez aussi avoir chaque shard soutenu par un jeu de réplicas, mais les deux concepts sont en fait orthogonaux. – Stennie

Questions connexes