Compartir a través de


Este artículo proviene de un motor de traducción automática.

El programador políglota

Base de datos NoSQL Cassandra: Introducción

Ted Neward

 

Ted NewardLos antiguos griegos contó la historia de Casandra, la hija del rey Príamo y Hécuba de reina de Troya. Ella fue una de las más bellas mujeres de su generación. Cuando ofrece los dones de una profetisa por el dios griego Apolo, ella aceptó rápidamente, pero cuando ella más tarde despreciado sus avances amorosos, Apolo maldijo para siempre saber la verdad y nunca ser creído por cualquiera a quien ella hablaba. Gracias a su don de la profecía, Casandra previó la trampa presentada por el caballo de Troya, pero gracias a su maldición de incredulidad, nadie en Troya sería escuchar sus advertencias. Trajeron el caballo dentro de las murallas de la ciudad y sin quererlo invitó a los soldados griegos ocultos en él a la ciudad, que condujo a la caída de Troya. Cassandra fue tomada como un premio de guerra vuelve a Grecia por Agamenón, donde nuevamente previó el futuro: muerte de su (y su), pero fue nuevamente rechazada — y, por supuesto, tanto él como ella fueron asesinados.

Frikis de ciencia de computación modernos cuentan la historia de Cassandra un poco diferente, como Apache Cassandra, otra de las bases de datos de "NoSQL" — y una popular en que — en uso en una variedad de conocidas empresas basadas en Internet (YouTube, Netflix y otros) y presumiblemente uno cuyos informes se toman realmente a valor nominal. (Rumor tiene que Cassandra es un juego de palabras con otra famosa profetisa, el oráculo de Delfos).

Para el desarrollador, Cassandra el software puede ser sólo tan confuso como Cassandra el troyano. Dispone "de un código abierto, base de datos distribuida, descentralizada, elásticamente escalable, altamente disponible, tolerante, tuneably consistente, orientada en la columna de que basa su diseño de distribución Dynamo de Amazon y su modelo de datos en Bigtable de Google" (fuente: "Cassandra: La guía definitiva,"o ' Reilly Media, 2010, p. 14).

A veces pienso que los mitos griegos tienen más sentido que mi industria.

Rompiendo todo eso, vemos que:

  • Cassandra es construido para almacenar montones y montones y montones de datos (cientos de terabytes parecen ser un ejemplo comúnmente citado) a través de una variedad de máquinas dispuestas en un anillo, en contraposición a la tendencia en el pensamiento de base de datos relacional que dice "comprar una caja más grande" (para escalar horizontalmente, en lugar de verticalmente).
  • Cassandra tiene un modelo de datos similar al modelo de datos de la base de datos relacional en la superficie, suena como con sus debates de columnas, familias de columna y valores con nombre, pero actúa nada como en la práctica.

Más relevante para esta discusión, Cassandra ha ido adquiriendo impulso dentro de la comunidad de desarrolladores como una herramienta vale la pena tener en la caja de herramientas, por lo que parecía una buena idea volver a nuestra mirada colectiva columnar sobre una base de datos orientada a la columna. (Pun destinado).

Información general y conceptual

Cassandra no es un almacén de datos relacionales, a pesar de su uso del término ""columna orientado. De hecho, realmente no parecen nada en absoluto como una base de datos relacional. En lugar de almacenar un esquema, por ejemplo, que las garantías las distintas filas de datos en la tabla son todos iguales, Cassandra almacena "familias de columna" en "keyspaces." Una clave es realmente sólo una barrera de aislamiento administrativo, de la misma manera que las instancias de base de datos relacional están separadas uno del otro en el mismo servidor, pero una familia de columna es una bestia completamente diferente. Cada familia de columna se compone de "filas" identificadas por una clave, pero dentro de una fila, cualquier número de pares de nombre/valor (columnas) puede estar presente, y cada fila puede contener elementos de datos completamente diferente de las otras filas dentro de la familia de la columna.

En términos prácticos, supongamos que estamos usando a Cassandra para almacenar una colección de personas. Dentro del almacén de claves "Tierra", tendremos una familia de columna llamada "People", que a su vez tiene filas que este aspecto:

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"

Como puede ver, cada fila contiene datos conceptualmente similares, pero no todas las filas tendrán los mismos datos (aunque si la varianza crece demasiado grande, podría resultar confuso para los desarrolladores). Almacenar mascotas aquí, por ejemplo, es probable que crearía mucho caos. Es por ello, cualquier aplicación no trivial probablemente utilizará decenas o centenares de familias de otra columna.

Por cierto, estoy mintiendo (levemente) a usted cuando digo que una fila se compone de pares nombre/valor; en realidad se compone de nombre/valor/timestamp trillizos, pero el Casandra docs dejar bastante claro que la parte de timestamp del triplete es sólo para la detección de conflictos y nunca debe ser usado como parte de la lógica de la aplicación. Más artículos de Cassandra esencialmente decirle a nuevos desarrolladores de Cassandra a ignorarlo.

Todo esto tiene más sentido una vez que lo vea en acción, así que vamos a obtener Cassandra funcionando.

Introducción

Antes de que se puede hacer nada con Casandra, tienes que tener instalado y ahí radica el primer obstáculo: Cassandra es, como se anuncia, un proyecto de código abierto, y como muchos proyectos de fuente abierto, no está escrito en un lenguaje de Microsoft .net Framework. En cambio, Cassandra está escrito en Java y como tal requiere un relativamente moderno Java runtime para instalarse en el equipo para ejecutar. Cassandra corre bien con Java 6 (y, de hecho, la mayoría de las entradas de blog sobre el tema lo sugiere), pero debería funcionar igual de bien si no un toque más rápido con más recientemente liberado Java 7.

(Si nunca has instalado Java en su máquina antes, simplemente conecte "Descargar Java Runtime Environment 6 (o 7)" en su motor de búsqueda de la elección y tire hacia abajo el instalador deseado para ya sea 32 o 64 bits Windows, dependiendo de su destino OS. Sobre la única otra cosa que deberás hacer es establecer una variable de entorno denominada JAVA_HOME para indicar el directorio de instalación de Java Runtime Environment (JRE) — en una instalación predeterminada, esto estará en c:\Archivos de Files\Java\jre6 — y poner "bin" subdirectorio en la ruta si no está ya del JRE.)

A continuación, tire hacia abajo de los binarios de Cassandra desde la homepage de Cassandra. Lamentablemente para nosotros, gente de Windows, sólo está disponible como un. tar.gz, archivo que, fuera de la caja, Windows no está seguro de qué hacer con. Decenas de herramientas están disponibles para unarchive un. archivo de tar.gz, incluyendo las utilidades de línea de comandos "gunzip" y "tar" en Cygwin, si desea comenzar a practicar algunos Unix-Fu en un cuadro de Windows. Vierta el contenido de la descarga de Cassandra en un directorio conveniente, como C:\Prg\apache-cassandra-1.1.0 (que es la última versión, al momento de escribir esto). Entonces, como es habitual con proyectos de Java, que necesita crear una variable de entorno que apunta a la raíz del directorio de instalación de Casandra, por lo que crear una variable de entorno CASSANDRA_HOME que apunta a C:\Prg\apache-cassandra-1.1.0 (en mi caso).

Si eres un poco horrorizado por las condiciones primitivas aquí, recuerde que los proyectos de Java como trabajar en múltiples plataformas (lo que significa que tenemos que utilizar los mecanismos que son comunes a todas las plataformas, y sí, variables de entorno están por todas partes, incluso en Android). El lado positivo de esto es que si alguna vez trabaje con Cassandra en una plataforma Windows no, usted va a realizar los mismos pasos de instalación: obtener Java, obtener a Cassandra, unarchive y establecer variables de entorno. Desafortunadamente, esto significa que nuestras herramientas no es bastante como fantasía y basada en GUI ya que de lo contrario nos podríamos utilizar para.

Hable con nosotros, Oh profetisa!

Hablando de qué, disparo por medio de Cassandra salto en largo en el directorio de instalación de Cassandra y coleando el archivo por lotes "cassandra.bat" se encuentra en el subdirectorio "bin". Que lanzar como "Casandra i" (la "-f" hace que se ejecute en primer plano), y usted debería ver algo como figura 1.

Installing Cassandra with the Cassandra.bat File
Figura a 1 Cassandra instalación con el archivo Cassandra.bat

De forma predeterminada, Cassandra está configurado para volcar datos y cometer los registros en el directorio "var" fuera de la raíz de su sistema de ficheros, Java interpreta como C:\. Esto es más de ism de Unix y fácilmente se configura de forma diferente en el archivo de configuración "conf/cassandra.yaml".

(Nota de conveniencia: Una empresa llamada DataStax Inc. ofrece a un instalador fotográfica multifunción que contiene el servidor de Cassandra y JRE, así como un producto de centro de operación basada en HTML, disponible como una descarga gratuita. Si tienes dificultades para conseguir todo, podría intentar en su lugar.)

Un servidor en ejecución Cassandra está esperando conexiones entrantes en el puerto 9160 y utiliza el puerto 7199 para su monitoreo de Java Management Extensions, que es el equivalente de Java para Windows Management Instrumentation. Finalmente, ambos puertos querrá tener acceso a las aplicaciones cliente y utilidades de supervisión de Cassandra, respectivamente.

Una vez Cassandra está activo y ejecutándose en su caja, podemos conectar a la instancia en ejecución mediante la interfaz de línea de comandos de Cassandra, lanzada ejecutando "cassandra-cli.bat," nuevamente desde el directorio "bin" de Cassandra (véase figura 2).

Connecting to a Running Cassandra Instance
Figura 2 conexión a una instancia de Cassandra Running

Para crear una clave, utilice "crear clave TestKS" (que debe ser un nombre único), y para crear una familia de columna dentro de esa clave, primer tipo "use <keyspace>", luego "crear la familia de la columna <name>". No hay otra definición de esquema es necesario — la familia de columna es una colección de pares nombre/valor de ahí en adelante, recuerda.

Para insertar datos en la familia de columna, utilice el comando "set", que requiere el nombre de la familia de columna en la que insertar ("TestCF"), la clave para esta fila ("TestKey"), la columna dentro de la familia de columna a utilizar como nombre para este valor ("columna") y el valor para almacenar allí ("valor"). Sin embargo, puesto que Cassandra almacena datos como valores binarios, tienes que decirle Cassandra para interpretar la clave de fila, el nombre de columna y el valor de la columna como valores ASCII utilizando la función incorporada de "ascii". Esto significa que todo el "set" tiene el siguiente aspecto:

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

Recuperar los datos es básicamente el mismo ejercicio con el comando "get", como este:

get TestCF[ascii("TestKey")];

Esto devolverá con algo como esto:

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

Esto demuestra que Cassandra, hablar de hecho, un galimatías (al menos, a nosotros los seres humanos — si usted mira con cuidado, los valores binarios son respectivamente los valores ASCII de la "columna" y "valor").

La parte más difícil se hace

Estamos fuera de tiempo, y Cassandra sólo ha sido instalado. Específicamente, un clúster de Cassandra solo nodo está funcionando, y se ha hecho nada para programa contra todavía. Afortunadamente, se ha completado la parte más difícil de empezar con Casandra. En la próxima entrega, voy a empezar usando bibliotecas de .net para hablar con Cassandra, cachas para almacenar algunos datos de las aplicaciones .net, tire hacia atrás y luego muestra cómo configurar un clúster de tres nodos y ponerlo y funcionando.

Por ahora, sin embargo, feliz codificación!

Ted Neward es un consultor arquitectónico con Neudesic LLC. Ha escrito más de 100 artículos y autor o coautor de una docena de libros, incluyendo "Profesional F # 2.0" (Wrox, 2010). Es un F # MVP y destacado experto de Java y habla en Java y .net conferencias alrededor del mundo. Él consulta y mentores regularmente — llegar a él en ted@tedneward.com si estás interesado en tenerlo a venir a trabajar con su equipo. Blogs de él en blogs.tedneward.com y se puede seguir en Twitter en Twitter.com/tedneward.

Gracias al siguiente experto técnico por su ayuda en la revisión de este artículo: Kelly Sommers