Partager via


Cet article a fait l'objet d'une traduction automatique.

Le programmeur au travail

Base de données NoSQL Cassandra : Pour commencer

Ted Neward

 

Ted NewardLes Grecs de l'Antiquité a raconté l'histoire de Cassandre, la fille du roi Priam et d'Hécube. Elle fut l'une des plus belles femmes de sa génération. Lorsqu'il est offert les cadeaux d'une prophétesse par le dieu grec Apollon, elle a rapidement accepté, mais quand elle a éconduit par la suite ses avances amoureuses, Apollo maudit pour toujours connaître la vérité et n'être jamais cru par tout à qui elle parlait encore. Grâce à son don de prophétie, Cassandra prévoyait le piège présenté par le cheval de Troie, mais grâce à sa malédiction d'incrédulité, de Troy, personne n'écoute ses avertissements. Ils introduit le cheval dans les murs de la ville et sans le vouloir a invité les soldats grecs cachés qui y sont dans la ville, qui a conduit à la chute de Troie. Cassandra a été repris comme un prix de la guerre en Grèce par Agamemnon, où elle prévoyait une fois de plus l'avenir : son (sa) mort, mais a été encore une fois pas cru — et, en effet, lui et elle ont été tués.

Geek de la science moderne ordinateur raconte l'histoire de Cassandra un peu différemment, comme Apache Cassandra, une autre les bases de données « NoSQL » — et un populaire — en usage dans une variété de sociétés bien connues de sur Internet (YouTube, Netflix et autres) et probablement un dont les rapports sont en fait pris à leur valeur nominale. (Rumor has it que Cassandra est un calembour sur un autre célèbre prophétesse, l'Oracle de Delphes.)

Pour le développeur, Cassandra, le logiciel peut être tout aussi déroutant : Cassandra le cheval de Troie. Il a « un open source, base de données distribuée, décentralisée, élastiquement évolutif, hautement disponible, tolérant aux pannes, tuneably compatible, orientée sur la colonne qui fonde sa conception de la distribution sur Amazon Dynamo et son modèle de données sur Bigtable de Google » (source : « Cassandra : The Definitive Guide, « o ' Reilly Media, 2010, p. 14).

Je pense parfois que les mythes grecs plus logique que mon industrie.

Briser tout cela, nous voyons que :

  • Cassandra est construit pour stocker beaucoup et beaucoup et données (des centaines de téraoctets semblent être un exemple fréquemment cité) à travers une variété de machines disposées en un anneau, par opposition à la tendance au sein de la pensée de base de données relationnelle qui dit « acheter une plus grande boîte » (pour la mise à l'échelle horizontalement plutôt que verticalement).
  • Cassandra a un modèle de données qui dirait que le modèle de données le relationnel de base de données sur la surface, semble peu comme elle avec ses discussions des colonnes, des familles de la colonne et des valeurs nommées, mais comporte rien comme elle dans la pratique.

Plus pertinentes à cette discussion, Cassandra a été gagnent au sein de la communauté des développeurs comme un outil utile pour avoir la boîte à outils, donc cela semblait être une bonne idée de transformer notre regard colonnaire collective sur une base de données orientée sur la colonne. (Jeu de mots voulu.)

Vue d'ensemble conceptuelle

Cassandra n'est pas un magasin de données relationnelles, en dépit de son utilisation du terme « orientée colonne. » En fait, il n'est pas vraiment chercher rien du tout comme une base de données relationnelle. Au lieu de stocker un schéma, par exemple, que les différentes lignes de données dans le tableau de garanties sont tout autant, Cassandra stocke les « familles de colonne » dans « keyspaces. » Une clés sont vraiment juste une barrière d'isolement administratif, de la même manière que les instances de base de données relationnelle sont séparés les uns des autres sur le même serveur, mais une famille de la colonne est une bête complètement différente. Chaque famille de colonne est composée de « lignes » identifiés par une clé, mais dans une ligne, n'importe quel nombre de paires nom/valeur (colonnes) peut être présent, et chaque ligne peut contenir des éléments de données totalement différente des autres rangées au sein de la famille de la colonne.

En termes pratiques, supposons que nous utilisons Cassandra pour stocker une collection de personnes. Dans le keystore « Terre », nous aurons une famille colonne appelée « Peuple », qui à son tour a des lignes qui ressemblent à ceci :

RowKey: tedneward
  ColumnName:"FirstName", ColumnValue:"Ted"
  ColumnName:"LastName", ColumnValue:"Neward"
  ColumnName:"Age", ColumnValue:41
  ColumnName:"Title", ColumnValue:"Architect"
RowKey: rickgaribay
  ColumnName:"FirstName", ColumnValue:"Rick"
  ColumnName:"LastName", ColumnValue:"Garibay"
RowKey: theartistformerlyknownasprince
  ColumnName:"Identifier", ColumnValue: <image>
  ColumnName:"Title", ColumnValue:"Rock Star"

Comme vous pouvez le voir, chaque ligne contient des données similaires sur le plan conceptuel, mais pas toutes les lignes auront les mêmes données (bien que si l'écart s'accroît trop gros, it might get source de confusion pour les développeurs à utiliser). Stockage des animaux de compagnie en l'espèce, par exemple, serait susceptibles de créer beaucoup trop chaos. C'est pourquoi toute demande non trivial utilisera probablement des dizaines ou des centaines de familles de différentes colonnes.

Au fait, je mens (légèrement) à vous quand je dis qu'une ligne est composée de paires nom/valeur ; Il est en fait composé de triplets de nom/valeur et timestamp, mais la Cassandra docs rendent assez évident que la partie horodatage du triplet est uniquement pour la détection de conflit et ne doit être utilisé dans le cadre de votre logique d'application. La plupart des articles de Cassandra dire essentiellement nouveaux développeurs de Cassandra de l'ignorer.

Tout cela est plus logique une fois que vous le voir en action, so Let's get Cassandra en cours d'exécution.

Pour commencer

Avant que vous pouvez faire quelque chose avec Cassandra, vous avez l'avoir installé et c'est là le premier obstacle : Cassandra est, comme annoncé, un projet open source, et comme beaucoup ouvrent projets source, ce n'est pas écrit dans un langage Microsoft .net Framework. Au lieu de cela, Cassandra est écrit en Java et exige donc un relativement modern runtime Java doit être installé sur votre machine afin d'exécuter. Cassandra fonctionne avec Java 6 (et, en fait, la plupart des postes blog sur le sujet suggère il), mais devrait fonctionner tout aussi bien si pas une touche plus vite avec le plus récemment sorti Java 7.

(Si vous n'avez jamais installé Java sur votre machine avant, juste brancher « Télécharger Java Runtime Environment 6 (ou 7) » dans votre moteur de recherche de choix et déroulant le programme d'installation souhaitée pour soit 32 ou 64 bits Windows, selon votre cible OS. Sur la seule chose que vous devrez faire est définie une variable d'environnement appelée JAVA_HOME pour pointer vers le répertoire d'installation de Java Runtime Environment (JRE) — dans une installation par défaut, ce sera dans C:\Program Files\Java\jre6 — et mettre le JRE « bin » sous-répertoire du chemin si ce n'est pas déjà.)

Ensuite, baisser les binaires de Cassandra de la page d'accueil de Cassandra. Malheureusement pour nous les gens de Windows, il est seulement disponible comme un. tar.gz file, qui, hors de la zone, Windows n'est pas sûr de ce qu'il faut faire avec. Des dizaines d'outils sont disponibles pour la réactivation d'un. tar.gz fichier, y compris les utilitaires de ligne de commande « gunzip » et de « goudron » dans Cygwin, si vous voulez commencer à pratiquer certains Unix-Fu sur une zone de Windows. Vider le contenu du téléchargement Cassandra dans un répertoire approprié, tel que C:\Prg\apache-cassandra-1.1.0 (qui est la version la plus récente, comme j'écris ces lignes). Puis, comme c'est souvent avec des projets Java, vous devez créer une variable d'environnement qui pointe vers la racine du répertoire d'installation de Cassandra, donc créer une variable d'environnement CASSANDRA_HOME qui pointe vers C:\Prg\apache-cassandra-1.1.0 (dans mon cas).

Si vous êtes un peu atterrés par les conditions primitives, ici, n'oubliez pas que les projets Java comme de travailler sur de multiples plates-formes (ce qui signifie que nous devons utiliser des mécanismes qui sont communs à toutes les plates-formes, et Oui, les variables d'environnement sont partout, même sur Android). Le côté positif de cela est que si vous travaillez déjà avec Cassandra sur une plate-forme non Windows, vous pourrez faire les mêmes étapes d'installation : obtenir Java, obtenir des Cassandra, réactivation et de définir les variables d'environnement. Malheureusement, cela signifie que notre outillage n'est pas tout à fait aussi fantaisie et interface utilisateur graphique que nous pourrions être autrement utilisés pour.

S'adressent à nous, O prophétesse !

En parlant de qui, feu moyen Cassandra saut le plus dans le répertoire d'installation de Cassandra et kicking off le fichier de commandes dans le sous-répertoire « bin » de « cassandra.bat ». Lancer que comme « cassandra – f » (le «-f » provoque pour s'exécuter à l'avant-plan), et vous devriez voir quelque chose comme Figure 1.

Installing Cassandra with the Cassandra.bat File
Figure 1 Cassandra installation avec le fichier Cassandra.bat

Par défaut, Cassandra est configuré pour le vidage des données et de commettre des billes dans le répertoire « var » au large de la racine de votre système de fichiers, dont Java interprète comme C:\. C'est plus Unix-ism et est facilement configurée différemment dans le fichier de configuration « conf/cassandra.yaml ».

(Note de commodité : Une société appelée DataStax Inc. offre un programme d'installation d'all in one contenant le serveur de Cassandra et JRE, ainsi qu'un opération HTML-basé Centre produit, disponible en téléchargement gratuit. Si vous éprouvez des difficultés à obtenir il tous ensemble, vous pouvez essayer qui place.)

Un serveur exécutant de Cassandra attend les connexions entrantes sur le port 9160 et utilise le port 7199 pour son suivi de Java Management Extensions, qui est l'équivalent de Java pour Windows Management Instrumentation. Les deux ports, finalement, voudront être accessibles aux applications clientes et les utilitaires de surveillance Cassandra, respectivement.

Une fois que Cassandra est en cours sur votre boîte, nous pouvons vous connecter à l'instance en cours à l'aide de l'interface de ligne de commande de Cassandra, lancé en exécutant « cassandra-cli.bat, » nouveau à partir du répertoire « bin » Cassandra (voir Figure 2).

Connecting to a Running Cassandra Instance
La figure 2, se connecter à une Instance de Cassandra Running

Pour créer une clés, utilisez « clés TestKS créer » (qui doit être un nom unique), et pour créer une famille de colonne au sein de cette clés, premier type « utiliser <keyspace> », puis « créer la famille colonne <name> ». Aucune autre définition du schéma n'est nécessaire — la famille de la colonne est une collection de paires nom/valeur de puis dessus, n'oubliez pas.

Pour insérer des données dans la famille de colonne, utilisez la commande « set », qui exige que le nom de la famille de la colonne dans laquelle vous insérez (« TestCF »), la clé à utiliser pour cette ligne ("TestKey"), la colonne au sein de la famille de la colonne à utiliser comme nom pour cette valeur (« colonne ») et la valeur à stocker là (« valeur »). Cependant, parce que Cassandra stocke les données comme des valeurs binaires, vous devez dire Cassandra pour interpréter la clé de la ligne, nom de colonne et la valeur de colonne comme valeurs ASCII à l'aide de la fonction intégrée de « ascii ». Cela signifie que l'ensemble « ensemble » ressemble à ceci :

set TestCF[ascii('TestKey')][ascii('column')]=ascii('value');

Récupération de données est essentiellement le même exercice en utilisant la commande « get », comme ceci :

get TestCF[ascii("TestKey")];

Il retournera avec quelque chose comme ceci :

(column=636f6c756d6e, value=76616c7565, timestamp=1338798419726000)

Cela démontre que Cassandra, en effet, parler de charabia (du moins, à nous les humains, si vous regardez attentivement, les valeurs binaires sont les valeurs ASCII de la « colonne » et « valeur », respectivement).

La partie la plus difficile est faite.

Nous sommes hors du temps, et Cassandra a seulement été installé. Plus précisément, un amas de Cassandra seul nœud est en cours, et rien n'a été fait au programme contre elle encore. Heureusement, la partie la plus difficile de démarrer avec Cassandra a été achevée. Dans le prochain article, je vais commencer à l'aide de bibliothèques .net pour parler à Cassandra, l'obtenir pour stocker des données des applications .net, traction arrière et ensuite montrer comment configurer un cluster à trois nœuds et get it up et en cours d'exécution.

Pour l'instant, cependant, codage heureux !

Ted Neward est consultant en architecture chez Neudesic LLC. Auteur de plus de 100 articles, il a rédigé ou corédigé plus d'une dizaine d'ouvrages, y compris « Professional F# 2.0 » (Wrox, 2010). Il est un éminent expert Java F # MVP et parle à la fois Java et .net conférences partout dans le monde. Il consulte et mentors régulièrement — le joindre à ted@tedneward.com si vous êtes intéressés à lui faire venir travailler avec votre équipe. Blogs d'a à blogs.tedneward.com et peut être suivi sur Twitter à Twitter.com/tedneward.

Merci à l'expert technique suivant d'avoir relu cet article : Kelly Sommers