Débuter avec Cassandra Utiliser les API CQL et CQLSH

Apache Cassandra est l’un des systèmes de base de données distribués open source les plus populaires sur le marché. Il a été conçu dans le but de gérer de grandes quantités de données stockées dans de nombreux serveurs répartis sur plusieurs zones géographiques, tout en offrant une évolutivité et une disponibilité élevées, sans point de défaillance unique. Les systèmes Cassandra peuvent couvrir plusieurs centres de données, ce qui permet une faible latence pour tous les clients connectés..

Il s’agit d’un tutoriel en trois parties dans lequel je vais commencer par les bases de Cassandra, en utilisant CQLSH pour créer des tables et des enregistrements. Ensuite, j'expliquerai les différents types de données pris en charge par Cassandra, puis nous utiliserons une bibliothèque cliente Go pour gérer les opérations Cassandra par programme.. 

Dans cette première partie, je vais expliquer comment le modèle de données Cassandra est présenté de manière succincte et effectuer des opérations de base à l'aide de CQLSH..

Pour cette série de tutoriels, je suppose que les lecteurs pourraient installer Cassandra eux-mêmes sur leurs machines respectives en fonction du système d'exploitation..

Le modèle de données Cassandra

Le modèle de données Cassandra suit l'approche de la famille de colonnes, qui peut facilement être comprise comme étant analogue à une structure de table relationnelle mais de manière NoSQL. La description ci-dessous devrait le rendre plus clair:

Espace de clé

Un espace de clés peut être considéré comme le conteneur le plus externe pour les données dans Cassandra. Toutes les données de Cassandra doivent vivre dans un espace de clés. Cela peut être vu comme une base de données dans le SGBDR qui est une collection de tables. Dans le cas de Cassandra, un espace de clés est un ensemble de familles de colonnes..

Colonne Famille

Une famille de colonnes peut être vue comme une collection de lignes et chaque ligne est une collection de colonnes. Cela ressemble à une table dans un SGBDR, mais présente quelques différences. Les familles de colonnes sont définies, mais il n'est pas nécessaire que toutes les lignes aient toutes les colonnes, et les colonnes peuvent être ajoutées ou supprimées d'une ligne selon les besoins..

Colonne

La colonne est l'unité de base des données dans Cassandra. Il comporte trois valeurs: nom de clé ou de colonne, valeur de colonne et horodatage..

Super Colonne

Une super-colonne est un type spécial de colonne qui stocke une carte d'autres sous-colonnes. Il facilite le stockage de données complexes et accélère également l'extraction des données, car chaque famille de colonnes de Cassandra est stockée dans un fichier unique sur le système de fichiers..

Utilisation de Cassandra Console

CQLSH est le shell standard pour interagir avec Cassandra via CQL (Cassandra Query Language). CQL est très similaire au SQL (qui est principalement utilisé pour les SGBDR) et permet donc aux développeurs novices de Cassandra de travailler rapidement avec ce dernier. CQLSH est livré avec chaque paquet Cassandra et devrait déjà être installé sur votre ordinateur lorsque vous avez installé Cassandra..

Créer un espace de clé

Comme nous l'avons vu dans le modèle de données décrit ci-dessus, une espace clavier est le conteneur le plus externe et doit être créé avant toute autre chose. Pour le créer, lancez:

$ cqlsh localhost -e "CREER UN ESPACEMENT CLÉ SI N'EXISTE PAS k1 WITH replication = 'class': 'SimpleStrategy', 'replication_factor': '1' AND durable_writes = true;"

Dans la commande ci-dessus, j'ai supposé que votre Cassandra existe le localhost sans aucune authentification de l'utilisateur. J'ai créé un espace clavier appelé k1 avec réplication et durable_writes politique définie.

Si vous avez défini l'authentification d'utilisateur, vous pouvez exécuter:

$ cqlsh -u  -p  localhost -e "CREATE KEYSPACE SI PAS EXISTE k1 WITH replication = 'class': 'SimpleStrategy', 'replication_factor': '1' AND durable_writes = true;"

Dans la commande ci-dessus, remplacez et avec vos identifiants d'authentification.

Exécuter une commande comme celle-ci peut être un peu fastidieux. Une autre méthode consiste à lancer l'invite CQLSH, puis à exécuter des requêtes directement à l'intérieur de celle-ci..

$ cqlsh -u  -p  localhost Connecté pour tester le cluster à 127.0.0.1:9042. [cqlsh 5.0.1 | Cassandra 3.9 | Spéc. CQL 3.4.2 | Protocole natif v4] Utilisez HELP pour obtenir de l'aide. cassandra @ cqlsh> CREATE KEYSPACE SI PAS EXISTE k1 WITH replication = 'class': 'SimpleStrategy', 'replication_factor': '1' AND durable_writes = true;

À l'avenir, j'utiliserai la méthode ci-dessus pour exécuter des requêtes. Avant d'exécuter toute autre requête, nous devons dire à CQLSH quel espace de clé doit être utilisé.

cassandra @ cqlsh> USE k1; cassandra @ cqlsh: k1>

le réplication_factor pour un espace de clé peut être modifié en fonction de la quantité de réplication nécessaire selon la réplication classe.

cassandra @ cqlsh: k1> ALTER KEYSPACE "k1" WITH REPLICATION = 'class': 'SimpleStrategy', 'replication_factor': 3;

Créer et modifier une table

Un tableau équivaut à une famille de colonnes dans Cassandra. Cassandra prend en charge de nombreux types de données différents pour le stockage des données, que je traiterai en détail dans la prochaine partie de cette série de didacticiels. Pour créer une table, lancez simplement le CREER LA TABLE commander.

cassandra @ cqlsh: k1> CREATE TABLE personne (identifiant, nom, texte, nom de famille, PRIMARY KEY (id));

Pour vérifier à quoi ressemble la structure de la table une fois créée:

cassandra @ cqlsh: k1> DESCRIBE personne; CREATE TABLE k1.person (id id KEY PRIMARY, nom text, nom name) WITH bloom_filter_fp_chance = 0.01 AND caching = 'keys': 'ALL', 'rows_per_partition': 'NONE' AND comment = "AND compaction = ' class ':' org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy ',' max_threshold ':' 32 ',' min_threshold ':' 4 ' ET compression = ' chunk_length_in_kb ':' 64 ',' classe ':' org.apache.coordre ';

Maintenant, disons que nous voulons modifier la table pour stocker le courrier électronique de la personne ainsi.

cassandra @ cqlsh: k1> ALTER TABLE personne AJOUTER le texte du courrier électronique; cassandra @ cqlsh: k1> DESCRIBE personne; CREATE TABLE k1.person (id id KEY PRIMARY, texte email, nom nom, texte nom) avec bloom_filter_fp_chance = 0.01 AND caching = 'keys': 'ALL', 'rows_per_partition': 'NONE' AND comment = "AND compaction = 'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4' ET compression = 'chunk_length_in_kb': '64', 'class ':' org.apache.cassandra.io.compress.ZZCCompressor ' AND crc_check_chan = AND AND dclocal_read_repair_chance = 0.1 AND default_to_livrr = '99PERCENTILE';

Insérer et mettre à jour des données

L'insertion de données dans une table Cassandra à l'aide de CQL est assez simple.

cassandra @ cqlsh: k1> SELECT * FROM personne; id | email | nom | nom ---- + ------- + ------ + --------- (0 rangs) cassandra @ cqlsh: k1> INSERT INTO personne (id, nom, nom de famille, email) VALEURS ('001', 'Shalabh', 'Aggarwal', '[email protected]'); cassandra @ cqlsh: k1> SELECT * FROM personne; id | email | nom | nom ----- + ----------------------------- + --------- + --- ------- 001 | [email protected] | Shalabh | Aggarwal

Dans cette table, nous avons tous les champs pour un seul type de données. Les choses deviennent un peu complexes lorsque nous utilisons différents types de données ou types de données composites. Ce sera une discussion dans la prochaine partie de cette série.

Disons que nous voulons mettre à jour la valeur dans la colonne email à autre chose.

cassandra @ cqlsh: k1> UPDATE personne SET email = "[email protected]" WHERE; cassandra @ cqlsh: k1> SELECT * FROM personne; id | email | nom | nom ----- + -------------------------- + --------- + ------ ---- 001 | [email protected] | Shalabh | Aggarwal

Interrogation des données

Les données d'une table peuvent être interrogées simplement en utilisant SÉLECTIONNER des déclarations.

Insérons quelques enregistrements supplémentaires et interroge-les.

cassandra @ cqlsh: k1> INSERT INTO personne (identifiant, nom, prénom, email) VALEURS ('002', 'John', 'Doe', '[email protected]'); cassandra @ cqlsh: k1> INSERT INTO personne (identifiant, nom, prénom, email) VALEURS ('003', 'Harry', 'Potter', '[email protected]'); cassandra @ cqlsh: k1> SELECT * de personne; id | email | nom | nom ----- + -------------------------- + --------- + ------ ---- 002 | [email protected] | John | Doe 001 | [email protected] | Shalabh | Aggarwal 003 | [email protected] | Harry | Potter (3 rangées) cassandra @ cqlsh: k1> SÉLECTIONNER le nom de la personne WHERE; name --------- Shalabh (1 rangées) cassandra @ cqlsh: k1> SELECT nom de la personne WHERE id IN ('001', '002'); nom --------- Shalabh John (2 rangées)

Des opérateurs de requête plus complexes tels que les opérateurs d'inégalité peuvent également être utilisés, ou plusieurs les conditions peuvent être concaténées en utilisant ET/OU, etc.

Conclusion

Cassandra est l’un des systèmes de base de données NoSQL les plus populaires et constitue la meilleure construction à utiliser dans les environnements distribués. Faire face à Cassandra est assez facile pour les débutants ayant quelques connaissances en SGBDR et SQL. 

CQL est très similaire au SQL dans une certaine mesure et CQLSH facilite les tests et le débogage beaucoup plus facilement. Dans la prochaine partie de cette série, je couvrirai les différents types de données fournis par Cassandra et la manière de les traiter..