Disons que j'insère trois lignes dans cassandra dans l'ordre ci-dessous une par une
ID, prénom, nom, nom du site Web
1: fname1, lname1, site1
2: fname2, lname2, site2
3: fname3, lname3, site3
Le magasin de colonnes stocke les colonnes ensemble, comme ceci:
1: fnom1,2: fnom2,3: fnom3
1: lname1,2: lname2,3: lname3
1: site1,2: site2,3: site3
Cela signifie-t-il que lorsque j'insère la première ligne, c'est-à-dire 1: fname1, lname1, site1
, chaque colonne sera dans un bloc de disque séparé pour les trois colonnes afin que
pendant la colonne firstname doit être lu dans une requête. toutes les données de colonne associées sont sur un seul bloc?
Cela ne ralentira-t-il pas l'écriture car Cassandra doit stocker les données dans 3 blocs au lieu d'un pour s'assurer que les données des colonnes sont liées ensemble?
3 Réponses :
Cassandra n'est pas un magasin de colonnes classique. Il stocke toutes les données insérées / mises à jour ensemble, organisées d'abord par clé de partition, puis à l'intérieur de la partition en regroupant les colonnes / clés primaires. Les données peuvent être dans différents SSTables lorsque vous les mettez à jour à différents moments, mais le processus de compactage essaiera éventuellement de les fusionner.
Si vous êtes intéressé, vous pouvez utiliser sstabledump
contre des fichiers de données et voir comment les données sont stockées. Il existe également un très bon article de blog de The Last Pickle sur le moteur de stockage dans Cassandra 3.0 (il est différent des versions précédentes).
Cassandra n'est pas un magasin de colonnes classique
Ne stocke-t-il pas les données par colonne comme indiqué par Bart à quora.com/... un>? Alors quelle est la différence entre la cassandra et la base de données documentaire? Pourquoi s'appelle-t-il DB basé sur des colonnes?
J'ai obtenu ma réponse de stackoverflow.com/questions/13010225/... . Merci
la confusion vient généralement de Cassandra appelée magasin à colonnes larges, comme Big Table, HBase, etc. ( db-engines.com/en/article/Wide+Column+Stores ) - mais c'était surtout avant l'heure de la CQL
Cassandra n'est pas une base de données orientée colonnes , c'est un magasin partition-row , cela signifie que les données de votre exemple seront stockées comme ceci:
"YourTable" : { row1 : { "ID":1, "firstname":"fname1", "lastname":"lname1", "websitename":"site1", "timestamp":1582988571}, row2 : { "ID":2, "firstname":"fname2", "lastname":"lname2", "websitename":"site2", "timestamp":1582989563} row3 : { "ID":3, "firstname":"fname3", "lastname":"lname3", "websitename":"site3", "timestamp":1582989572} ... }
Les données sont regroupées et recherchées en fonction de la clé primaire (qui est la clé de partition et peut inclure une ou plusieurs clés de clustering).
Quelques points à considérer: p>
Cassandra est essentiellement une base de données de famille de colonnes ou une base de données partitionnée par lignes avec des informations de colonne non basées sur des colonnes / colonnes / bases de données orientées colonnes. Lors de l'insertion / extraction, nous devons mentionner les informations de la colonne de partition (aka clé de ligne, aka clé primaire). Nous pouvons ajouter n'importe quelle colonne à tout moment.
Les magasins de la famille de colonnes, comme Cassandra, sont parfaits si vous avez des écritures à haut débit et que vous voulez être en mesure de mettre à l'échelle linéairement horizontalement.
Le terme «famille de colonnes» provient du moteur de stockage d'origine qui était un magasin de clés / valeurs, où la valeur était une «famille» de tuples de colonne / valeur. Il n'y avait pas de limite stricte sur le nombre de colonnes que chaque clé pouvait avoir.
stackoverflow.com/questions/13010225/...