Dans la première partie de cette série de didacticiels, j'ai présenté les bases de Cassandra et utilisé CQLSH pour communiquer avec le système de base de données via un shell. Dans cette seconde partie, je couvrirai brièvement les principaux types de données disponibles dans CQL. Ensuite, je couvrirai l'essentiel de gocql
, un package client Golang qui implémente le pilote Cassandra pour Golang. Je vais expliquer comment créer une connexion de session avec Cassandra avec quelques options de configuration, puis comment exécuter diverses requêtes à l'aide de la session..
Cassandra prend en charge les types de données de base disponibles dans presque tous les systèmes de base de données. En plus de cela, il fournit également des types de collection complexes pouvant stocker des combinaisons de données simples sous forme de liste, de jeu et de carte. En dehors de cela, CQL prend également en charge les types définis par l'utilisateur, ce qui permet aux développeurs de disposer de leurs propres types de données, faciles à lire et à comprendre..
vrai
ou faux
.INSÉRER
instructions autorisées dans une table avec une ou plusieurs colonnes de compteur; seulement METTRE À JOUR
peut être utilisé. Par exemple:> CREATE TABLE website_tracker (id int PRIMARY KEY, texte de l'URL, compteur visiteur_count); > UPDATE website_tracker SET visiteur_count = visiteur_compte + 1 WHERE id = 1; > SELECT * FROM website_tracker; id | url | compter ---- + ------ + ------ 1 | a.com | 1 (1 rangées)
aaaa-mm-jj
.01: 02: 03.123
et stocké 64 bits signé signé qui représente nanosecondes écoulées depuis minuit.2016-12-01 01: 02: 03.123
.> ALTER TABLE website_tracker ADD tagsSet set; > UPDATE website_tracker SET tagsSet = 'tag1' WHERE id = 1; > SELECT tagsSet FROM website_tracker WHERE id = 1; tagsSet ---------- 'tag1'> UPDATE website_tracker SET tagsSet = tagsSet + 'gat2' WHERE id = 1; > SELECT tagsSet FROM website_tracker WHERE id = 1; tagsSet ------------------ 'gat2', 'tag1'
Vous pouvez utiliser les opérations de réglage habituelles comme différence
enlever des éléments. Pour effacer ou remplacer le jeu complet, faites SET tags =
.
> ALTER TABLE website_tracker ADD tagsListe de liste; > UPDATE website_tracker SET tagsList = ['tag1'] WHERE id = 1; > SELECT tagsList FROM website_tracker WHERE id = 1; tagsList ---------- ['tag1']> UPDATE website_tracker SET tagsList = tagsList + ['gat2'] WHERE id = 1; > SELECT tagsList FROM website_tracker WHERE id = 1; tagsList ------------------ ['tag1', 'gat2']
Dans une liste, les valeurs peuvent être ajoutées au début, soustraites (comme dans les ensembles), insérées / remplacées / supprimées par la valeur d'index (Étiquettes SET [1] = '
), etc.
> ALTER TABLE website_tracker ADD tagsCarte de la carte; > UPDATE website_tracker SET tagsMap = 'tag1': 'Tag One' WHERE id = 1; > SELECT tagsMap FROM website_tracker WHERE id = 1; tagsMap ---------------------- 'tag1': 'Tag One'> UPDATE website_tracker SET tagsMap ['tag2'] = 'Balise deux' ID WHERE = 1; > SELECT tagsMap FROM website_tracker WHERE id = 1; tagsMap ------------------ 'tag1': 'Tag One', 'tag2': 'Tag Two'
Il est possible dans Cassandra de définir nos propres types. Cela donne beaucoup de flexibilité et facilite la maintenance globale des données. Disons que nous voulons stocker l'adresse d'enregistrement du site Web.
> Adresse CREATE TYPE (… texte de rue,… texte de ville,… texte de statut); > ALTER TABLE website_tracker ADD reg_address address;
Pour utiliser un type défini par l'utilisateur dans une collection imbriquée, nous devons le spécifier en tant que congelé
collection.
> ALTER TABLE website_tracker ADD reg_addresses map>;
Je suppose que vous connaissez un peu l’utilisation de Golang et la configuration et l’installation de paquetages..
Pour installer le gocql
package, exécutez la commande suivante à partir de shell:
$ allez chercher github.com/gocql/gocql
Maintenant, je vais créer un script Go qui expliquera les concepts nécessaires pour comprendre gocql
.
package main import ("github.com/gocql/gocql" "log" "time") func PerformOperations () // Indiquez ici l'instance de cluster cassandra. cluster: = gocql.NewCluster ("127.0.0.1") // L'authentificateur est requis si l'authentification par mot de passe est // activée pour votre installation Cassandra. Sinon, cela peut être supprimé. cluster.Authenticator = gocql.PasswordAuthenticator Nom d'utilisateur: "nom_un_utilisateur", Mot de passe: "mot_de_passe", // gocql requiert que l'espace-clé soit fourni avant la création de la session. // À l'avenir, il pourrait y avoir des dispositions pour le faire plus tard. cluster.Keyspace = "keyspace_name" // Ceci est le temps après lequel la création d'un appel de session expire. // Ceci peut être personnalisé selon les besoins. cluster.Timeout = 5 * time.Second cluster.ProtoVersion = 4 session, erreur: = cluster.CreateSession () si err! = nil log.Fatalf ("Impossible de se connecter au cluster de cassandra:% v", err) / / Vérifiez si la table existe déjà. Créer si la table n'existe pas keySpaceMeta, _: = session.KeyspaceMetadata ("keyspace_name") si _, existe: = keySpaceMeta.Tables ["person"]; existe! = true // Crée une table session.Query ("CREATE TABLE person (" + ") id texte, nom texte, texte téléphone," + "PRIMARY KEY (id))"). Exec () // DIY : Mettre à jour la table avec quelque chose s'il existe déjà. // Insérer l'enregistrement dans le tableau à l'aide des instructions préparées session.Query ("INSERT INTO person (id, name, phone) VALUES (?,?,?)", "Shalabh", "Shalabh Aggarwal", "1234567890"). Exec ( ) // Bricolage: mettre à jour un enregistrement existant // Sélectionner un enregistrement et exécuter un processus sur les données extraites chaîne de nom var chaîne de téléphone var si err: = session.Query ("SELECT nom, téléphone de la personne WHERE"). Scan (& nom, & téléphone) ; err! = nil si err! = gocql.ErrNotFound log.Fatalf ("La requête a échoué:% v", erreur) log.Printf ("Nom:% v", nom) log.Printf ("Téléphone:% v ", phone) // Récupère plusieurs lignes et exécute le processus sur elles iter: = session.Query (" SELECT nom, phone FROM personne "). Iter () pour iter.Scan (& nom, & téléphone) log.Printf (" Nom Iter:% v ", nom) log.Printf (" Iter Phone:% v ", téléphone) // Bricolage: suppression de l'enregistrement func main () PerformOperations ()
La plupart des concepts de travail sont expliqués dans le code ci-dessus. Quelques points à noter sont les différentes opérations utilisées avec session.Query ()
. Outre les trois opérations ci-dessous, il en existe de nombreuses autres que vous pouvez voir dans la documentation..
Exec ()
: Cela exécuterait simplement la requête sans renvoyer de lignes. Renvoie une erreur s'il y en a.Balayage()
: Ceci exécuterait la requête en copiant les valeurs des colonnes de la première ligne correspondant dans la requête aux variables transmises. Il éliminerait toutes les lignes en dehors de la première.Iter ()
: Ceci exécuterait la requête et renverrait un itérateur qui fonctionnerait alors simplement comme Balayage()
fonctionne pour chaque ligne récupérée.Pour exécuter le script, exécutez la commande ci-dessous dans un shell.
$ go run main.go 2017/02/03 12:53:40 Nom: Shalabh Aggarwal 2017/02/03 12:53:40 Téléphone: 1234567890 2017/02/03 12:53:40 Iter Nom: Shalabh Aggarwal 2017 / 02/03 12:53:40 Iter Phone: 1234567890
Dans cette deuxième partie de cette série de didacticiels, nous avons abordé divers types de données intégrés disponibles avec Cassandra. Nous avons également vu comment fonctionnent les types de collection et comment utiliser des types définis par l'utilisateur pour rendre un schéma global flexible. Nous avons également vu comment nous pouvons interagir avec Cassandra par programmation dans Golang en utilisant gocql. Ce paquet offre beaucoup plus de fonctionnalités qui peuvent être explorées par vous-même.