Compartilhar via


Este artigo foi traduzido por máquina.

O programador

Banco de dados NoSQL Cassandra: Introdução

Ted Neward

 

Ted NewardOs gregos antigos contaram a história de Cassandra, filha do rei Príamo e da rainha Hécuba de Tróia. Ela foi uma das mulheres mais bonitas de sua geração. Quando ofereceram os presentes de uma profetisa de Deus grego Apolo, ela rapidamente aceitou, mas quando ela rejeitou mais tarde suas investidas amorosas, Apollo amaldiçoado para sempre saber a verdade e nunca ser acreditado por qualquer a quem falava. Graças ao seu dom de profecia, Cassandra previa a armadilha apresentada pelo cavalo de Tróia, mas graças a sua maldição de descrença, ninguém em Troy de ouvir suas advertências. Trouxeram o cavalo dentro das muralhas da cidade e involuntariamente convidou os soldados gregos escondidos para a cidade, o que levou à queda de Troy. Cassandra foi levado como prêmio de guerra de volta à Grécia por Agamemnon, onde ela novamente previu o futuro: morte dele (e dela), mas novamente foi descrido — e, com certeza, ele e ela foram mortos.

Geeks de computador moderno Ciência contam a história de Cassandra, um pouco diferente, como o Apache Cassandra, outro dos bancos de dados "NoSQL" — e uma popular, que — em uso em uma variedade de empresas bem conhecidas na Internet (YouTube, Netflix e outros) e, presumivelmente, cujos relatórios são realmente tomado pelo valor de face. (Boato tem que Cassandra é um trocadilho com outra famosa profetisa, oráculo de Delfos).

Para o desenvolvedor, Cassandra o software pode ser apenas tão confuso como Cassandra o cavalo de Tróia. Tem "an open source, banco de dados distribuído, descentralizado, elasticamente escalável, altamente disponível, Tolerante a falha, tuneably consistente, orientada por colunas que baseia sua concepção de distribuição Dynamo da Amazon e seu modelo de dados no Google Bigtable" (fonte: "Cassandra: O guia definitivo,"o ' Reilly Media, 2010, p. 14).

Às vezes acho que os mitos gregos fazem mais sentido do que o meu setor.

Quebrando tudo isso, vemos que:

  • Cassandra é criado para armazenar os lotes e lotes e lotes de dados (centenas de terabytes parecem ser um exemplo comumente citado) através de uma variedade de máquinas, dispostos em um anel, em oposição a tendência no pensamento de banco de dados relacional que diz "comprar uma caixa maior" (para a escala horizontal, em vez de verticalmente).
  • Cassandra tem um modelo de dados que se parece com o modelo de dados do banco de dados relacional na superfície, soa como ele com suas discussões de colunas, famílias de coluna e valores nomeados, mas age nada como isso na prática.

Mais relevante a esta discussão, Cassandra vem ganhando impulso na Comunidade desenvolvedor como uma ferramenta que vale a pena ter na caixa de ferramentas, assim parecia uma boa idéia para transformar nosso olhar colunar coletivo sobre um banco de dados orientado por coluna. (Trocadilhos.)

Visão geral conceitual

Cassandra não é um armazenamento de dados relacional, apesar de seu uso do termo "orientado de coluna." Na verdade, ele realmente não parece nada em tudo, como um banco de dados relacional. Em vez de armazenar uma esquema, por exemplo, que as garantias as várias linhas de dados na tabela são todos iguais, Cassandra armazena "famílias de coluna" no "keyspaces." Um keyspace é realmente apenas uma barreira de isolamento administrativo, da mesma forma que instâncias de banco de dados relacional são separadas uns dos outros no mesmo servidor, mas uma família de coluna é um animal completamente diferente. Cada família de colunas é composta por "linhas", identificadas por uma chave, mas dentro de uma linha, qualquer número de pares de nome/valor (colunas) pode estar presente, e cada linha pode conter elementos de dados completamente diferente das outras linhas dentro da família de coluna.

Em termos práticos, vamos supor que estamos usando Cassandra para armazenar um conjunto de pessoas. No armazenamento de chaves "Terra", teremos uma família de coluna chamada "People", que por sua vez, tem linhas que esta aparência:

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 você pode ver, cada linha contém dados conceitualmente similares, mas não todas as linhas terão os mesmos dados (embora se a variância cresce muito grande, ele pode ficar confuso para os desenvolvedores a usar). Armazenamento de animais de estimação aqui, por exemplo, provavelmente criaria muito caos. Eis porque qualquer aplicativo não trivial provavelmente usará dezenas ou centenas de famílias de coluna diferente.

Aliás, eu estou mentindo (ligeiramente) para você quando digo que a linha é composta de pares nome/valor; Ele é na verdade composto de nome/valor/timestamp trigêmeos, mas Cassandra docs tornam bastante claro que a parte de timestamp do trio é apenas para a detecção de conflitos e nunca deve ser usada como parte de sua lógica de aplicativo. A maioria dos artigos de Cassandra essencialmente dizer novos desenvolvedores de Cassandra ignorá-lo.

Tudo isso faz mais sentido, uma vez que você vê-lo em ação, então vamos correndo de Cassandra.

Introdução

Antes de fazer qualquer coisa com Cassandra, você tem que tê-lo instalado e é aí que reside o primeiro obstáculo: Cassandra é, como anunciado, um projeto open source, e como muitos projetos open source, não está escrito em uma linguagem do Microsoft .net Framework. Em vez disso, Cassandra é escrito em Java e como tal requer um tempo de execução Java relativamente moderno para ser instalado em sua máquina para executar. Cassandra corre bem com Java 6 (e, na verdade, a maioria dos posts do blog sobre o assunto sugere que ele), mas deve executar, assim como, se não um toque mais rápido com o mais recente lançado Java 7.

(Se você nunca instalou o Java na sua máquina antes, basta ligar o "Download Java Runtime Environment 6 (ou 7)" em seu mecanismo de pesquisa de escolha e puxar para baixo o instalador desejado para qualquer 32 - ou 64-bits do Windows, dependendo do seu sistema operacional de destino. Sobre a única outra coisa que você precisa fazer é definir uma variável de ambiente chamada JAVA_HOME para apontar para o diretório de instalação do Java Runtime Environment (JRE) — em uma instalação padrão, isso vai ser em c: Program Files Java jre6 — e colocar o JRE "bin" subpasta no caminho, se já não é.)

Em seguida, puxe para baixo os Cassandra binários a partir da homepage de Cassandra. Infelizmente para nós, gente de Windows, ele apenas está disponível como um. tar. gz arquivo, que, fora da caixa, janelas não é certo o que fazer com. Dezenas de ferramentas estão disponíveis para Desarquivar um. tar. gz arquivo, incluindo os utilitários "gunzip" e "tar" de linha de comando no Cygwin, se você deseja começar a praticar alguns Unix-Fu em uma caixa de Windows. Despeje o conteúdo do download Cassandra em um diretório conveniente, como C:\Prg\apache-cassandra-1.1.0 (que é a versão mais recente, enquanto escrevo isso). Então, como é comum com projetos Java, você precisa criar uma variável de ambiente que aponta para a raiz do diretório de instalação do carneiro, então, criar uma variável de ambiente CASSANDRA_HOME que aponta para C:\Prg\apache-cassandra-1.1.0 (no meu caso).

Se você está um pouco horrorizado com as condições primitivas aqui, lembre-se de que projetos Java gostam de trabalhar em várias plataformas (o que significa que temos que usar os mecanismos que são comuns a todas as plataformas, e sim, variáveis de ambiente estão por toda parte, mesmo no Android). O lado positivo disto é que se você já trabalhou com Cassandra em uma plataforma não Windows, você estará fazendo os mesmos passos de instalação: obter Java, obter Cassandra, Desarquivar e definir variáveis de ambiente. Infelizmente, isso significa que nosso ferramental não é completamente tão extravagante e baseada em GUI, que caso contrário poderia ser usado para.

Fale conosco, Ó Profeta!

Falando de qual, queima até meios de Cassandra salto a mais para o diretório de instalação de Cassandra e chutando fora do arquivo de lote "cassandra.bat", encontrado no subdiretório "bin". Que lançar como "cassandra – f" (o "-f" faz com que ele seja executado em primeiro plano), e você deve ver algo como Figura 1.

Installing Cassandra with the Cassandra.bat File
Figura 1 Cassandra instalar com o arquivo Cassandra.bat

Por padrão, Cassandra é configurado para dados de despejo e cometer os logs para o diretório "var" fora da raiz do seu sistema de arquivos, que Java interpreta como c:. Este é mais Unix-ism e é facilmente configurado de forma diferente no arquivo de configuração "conf/cassandra.yaml".

(Nota de conveniência: Uma empresa chamada DataStax Inc. oferece um instalador-um que contém o servidor de Cassandra e JRE, bem como um produto de centro de operação baseada em HTML, disponível como um download gratuito. Se você está tendo dificuldades para levantá-lo tudo pronto, você pode tentar que em vez disso.)

Um servidor em execução de Cassandra está esperando na porta 9160 e usa a porta 7199 para seu monitoramento Java Management Extensions, que é o equivalente aproximado de Java para Windows Management Instrumentation. As duas portas, eventualmente, desejará ser acessível ao cliente aplicativos e utilitários de monitoramento de Cassandra, respectivamente.

Uma vez que Cassandra está funcionando na sua caixa, podemos nos conectar para a instância em execução usando a interface de linha de comando de Cassandra, lançada executando "cassandra-cli.bat," novamente a partir do diretório "bin" de Cassandra (ver Figura 2).

Connecting to a Running Cassandra Instance
Figura 2 conectando a uma instância de Cassandra de execução

Para criar um espaço de chaves, use "keyspace TestKS criar" (que deve ser um nome exclusivo), e "para criar uma família de colunas dentro desse espaço, primeiro tipo use <keyspace>", "criar uma família de colunas <name>." Nenhuma outra definição do esquema é necessária — a família de coluna é uma coleção de pares nome/valor de então em diante, lembre-se.

Para inserir dados para a família de colunas, use o comando "set", que exige que o nome da família de coluna na qual você insere ("TestCF"), a chave para esta linha ("TestKey"), a coluna dentro da família de coluna para usar como o nome para este valor ("coluna") e o valor para armazenar lá ("valor"). No entanto, porque Cassandra armazena dados como valores binários, você deve dizer Cassandra para interpretar a chave de linha, o nome da coluna e o valor da coluna como valores ASCII usando a função interna do "ascii". Isso significa que todo o "conjunto" fica assim:

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

Recuperação de dados é basicamente o mesmo exercício usando o comando "get", como este:

get TestCF[ascii("TestKey")];

Isso irá retornar algo parecido com isto:

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

Isso demonstra que a Cassandra, na verdade, falar jargão (pelo menos, para nós seres humanos — se você olhar com cuidado, os valores binários são os valores ASCII de "coluna" e "valor", respectivamente).

A parte mais difícil está feita

Estamos fora do tempo, e Cassandra só foi instalado. Especificamente, um nó único Cassandra cluster é instalado e funcionando, e nada foi feito para programa contra ele ainda. Felizmente, a parte mais difícil de começar com Cassandra foi concluída. No próximo artigo, vou começar usando bibliotecas .net falar com Cassandra, obtê-lo para armazenar alguns dados de aplicativos .net, puxar ele de volta e, em seguida, mostrar como configurar um cluster de três nós e buscá-la e executar.

Por agora, porém, feliz codificação!

Ted Neward é um consultor de arquitetura na Neudesic LLC. Ele já escreveu mais de 100 artigos e é autor ou coautor de dezenas de livros, incluindo “Professional F# 2.0” (Wrox, 2010). Ele é um F # MVP e especialista Java e Java e .net conferências ao redor do mundo. Ele consulta e mentores regularmente — contatá-lo em ted@tedneward.com se você está interessado em ter-lhe vir trabalhar com sua equipe. Blogs de He em blogs.tedneward.com e pode ser seguido no Twitter em Twitter.com/tedneward.

Agradecemos ao seguinte especialista técnico pela revisão deste artigo: Kelly Sommers