Quel est l'intérêt des familles de colonnes?

9

J'ai vu que les systèmes de base de données NoSQL comme RocksDB offrent une fonctionnalité appelée familles de colonnes . Je crois que je comprends à quoi le concept fait référence, mais quels sont les avantages (pratiques) réels de leur utilisation? Je suppose qu'ils peuvent améliorer les performances de recherche dans certains cas, ou la localisation de l'espace des valeurs-clés au moins? Cependant, cela ne semble pas affecter la sémantique réelle de l'accès aux bases de données, si je comprends bien. Est-ce correct? Y a-t-il quelque chose qui me manque?

Noldorin
la source

Réponses:

3

Je viens de découvrir des informations intéressantes dans la FAQ RocksDB . (RocksDB est un magasin KV.)

Voici quelques extraits pertinents.

Q: À quoi servent les familles de colonnes?

R: Les raisons les plus courantes d'utiliser des familles de colonnes: (1) utilisent différents paramètres de compactage, comparateurs, types de compression, opérateurs de fusion ou filtres de compactage dans différentes parties des données; (2) supprimer une famille de colonnes pour supprimer ses données; (3) une famille de colonnes pour stocker les métadonnées et une autre pour stocker les données.

Q: Quelle est la différence entre le stockage de données dans plusieurs familles de colonnes et dans plusieurs bases de données rocksdb?

R: Les principales différences seront la sauvegarde, les écritures atomiques et les performances des écritures. L'avantage d'utiliser plusieurs bases de données: la base de données est l'unité de sauvegarde ou de point de contrôle. Il est plus facile de copier une base de données vers un autre hôte qu'une famille de colonnes. Avantages de l'utilisation de plusieurs familles de colonnes: (1) les lots d'écriture sont atomiques sur plusieurs familles de colonnes sur une seule base de données. Vous ne pouvez pas y parvenir en utilisant plusieurs bases de données RocksDB. (2) Si vous effectuez des écritures de synchronisation sur WAL, trop de bases de données peuvent nuire aux performances.

Q: J'ai différents espaces clés. Dois-je les séparer par préfixes ou utiliser différentes familles de colonnes?

R: Si chaque espace clé est assez grand, c'est une bonne idée de les placer dans différentes familles de colonnes. S'il peut être petit, vous devez envisager de regrouper plusieurs espaces clés dans une seule famille de colonnes, pour éviter d'avoir à gérer trop de familles de colonnes.

Noldorin
la source
2

Je sais que vous ne cherchez pas un parallèle avec SQL, mais cet article explique simplement comment planifier le but et l'avantage pratique des familles de colonnes.

De la compréhension du modèle de données Cassandra d'un point de vue SQL sur RubyScale:

À quoi sert une famille de colonnes? Juste un préfixe de table? Une famille de colonnes a un certain nombre de paramètres qui vont avec qui modifient son comportement. Il existe des paramètres de cache pour les clés (les UUID dans cet exemple), des paramètres de cache pour les lignes entières (la table entière dans cet exemple) et, surtout, le tri. A Cassandra, il n'y a pas de compensation, seulement LIMIT et l'équivalent de BETWEEN . Dans cet exemple, les noms de colonne ne sont que des chaînes mais ils peuvent également être des entiers ou des horodatages et ils sont toujours stockés dans l'ordre de tri. Une famille de colonnes peut avoir des données triées par horodatage dans lesquelles vous interrogez des éléments par tranche de temps et une autre peut être des données de carnet d'adresses dans lesquelles vous interrogez des éléments par ordre alphabétique. Le seul tri que vous pouvez faire après coup est l'inversion d'une tranche particulière.

Nelz
la source
Intéressant. Comme vous le dites, cela ne répond pas entièrement à la question, mais cela donne un indice. Merci.
Noldorin