NoSQL Com Apache Cassandra ... O Que é Apache Cassandra (Cont.) •Apache Cassandra...

Click here to load reader

  • date post

    20-May-2020
  • Category

    Documents

  • view

    11
  • download

    0

Embed Size (px)

Transcript of NoSQL Com Apache Cassandra ... O Que é Apache Cassandra (Cont.) •Apache Cassandra...

  • ©2013 DataStax Confidential. Do not distribute without consent.

    Um Tutorial

    Ben Coverston @bcoverston DSE Architect, Datastax Inc.

    NoSQL Com Apache Cassandra

    1 Wednesday, September 18, 13

  • Quem Sou? • Ben Coverston • DSE Architect • DataStax Inc •Morei em SC por dois anos (em 1994-1996)

    Wednesday, September 18, 13

  • Objetivos Da Sessão • O que é Apache Cassandra? • Para que posso usá-lo? • Discussão dos casos de uso • Dar vocês experiência na utilização da Cassandra • Questões

    Wednesday, September 18, 13

  • O Que É Apache Cassandra? • E um banco de dados • Inicialmente criado pelo Facebook • Em 2008 foi doada para Apache • De 2008-2010 foi mantida de individuais • Até que DataStax foi estabelecido em Abril 2010

    Wednesday, September 18, 13

  • Wednesday, September 18, 13

  • O Que é Apache Cassandra (Cont.) • Apache Cassandra é uma mistura • Google Big Table

    • Amazon Dynamo

    • O modelo de dados vem de Big Table • A maneira de distribuição vem de Dynamo

    Wednesday, September 18, 13

  • • Massivamente Escalável • Alto Desempenho • Confiávil / Disponível

    Wednesday, September 18, 13

  • VLDB Benchmark

    Wednesday, September 18, 13

  • Endpoint Benchmark

    Wednesday, September 18, 13

  • Wednesday, September 18, 13

  • Wednesday, September 18, 13

  • Porque é Popular? • Um base de dados OLTP • Focalizado em cenários de tempo real

    • Disponibilidade é o mais importante • Aplicações orientadas ou consumidor.

    Wednesday, September 18, 13

  • O Que É ‘Real Time’? • Sem JOIN • Sem subqueries • Sem Agregação (GROUP BY) • ORDER BY é limitado

    Wednesday, September 18, 13

  • Quando Devo Utilizar Cassandra • Se Você Tem Qualquer De: • Armazenamento além de uma região só

    • Alto desempenho (High Performance) • Alta disponibilidade (High Availability)

    • Cassandra deve ser considerado

    Wednesday, September 18, 13

  • Em Outras Palavras • Precisa uma presença em mais que um Centro de Dados (os ambos

    ativos) • Quando Estás Escalando De 0 ate .. não Sei! • Precisa 100% disponibilidade, (tão perto de possível) • Quando a aquisição disso com outro soluções é inviável ($)

    . . . e também . . .

    Wednesday, September 18, 13

  • O Modelo De Dados tem que estar certo

    Wednesday, September 18, 13

  • Antes de modelar, temos que Instalar.

    Como Instalar Cassandra

    Wednesday, September 18, 13

  • Maneiras De Installar Cassandra • Instalador Embalado (packaged installer) (deb/rpm) • Tarball (Vamos fazer isso hoje) • Datastax Community (DSC) (há por Windows) • Datastax Enterprise (DSE) • Os arquivos necessários estão no USB

    Wednesday, September 18, 13

  • Vamos Installar • http://cassandra.apache.org

    Wednesday, September 18, 13

    http://cassandra.apache.org http://cassandra.apache.org

  • Vamos Installar

    Wednesday, September 18, 13

  • Vamos Installar $ java --version

    # Cassandra é uma aplicação baseada em Java Precisa Java para funcionar # Pelas coisas que faremos hoje, OpenJDK talvez funcionará, mas precisamos # alguma Java

    Wednesday, September 18, 13

  • Vamos Installar (OS X, Linux) $ tar -xvf apache-cassandra-1.2.8-bin.tar.gz

    ## modifica permissiões ou locais dos archivos

    $ mv apache-cassandra-1.2.8-bin ~./cassandra $ cd ~./cassandra $ vim config/cassandra/cassandra.yaml

    #change data directory # saved caches - saved_caches_directory: /user/lib/cassandra/saved_caches + saved_caches_directory: /home/user/(you)/cassandra/saved_caches

    #data_file_directories: - - /var/lib/cassandra/data + - /var/users/(you)/cassandra/data

    # commit log - commitlog_directory: /var/lib/cassandra/commitlog + commitlog_directory: /var/users/(you)/cassandra/commitlog

    Wednesday, September 18, 13

  • Vamos Installar (cont.) $ emacs conf/log4j-server.properties

    - log4j.appender.R.File=/var/log/cassandra/system.log + (your home)/cassandra/log/system.log

    # run cassandra, o -f significa ‘foreground’ $ bin/cassandra -f

    # Abre uma nova ‘console’ e executa cqlsh $ bin/cqlsh

    Wednesday, September 18, 13

  • Vamos Fazer • Quatro exemplos do mundo real • O causo atual, o modelo para fazer • Sao comum, talvez é seu causo de uso. • Vamos Fazer os soluções im CQL3

    Wednesday, September 18, 13

  • Cria Uma Tabulo • Juntos • E tenta um WHERE • tracing on

    Wednesday, September 18, 13

  • Simple Queries and Tracing CREATE TABLE test ( a int PRIMARY KEY, b text );

    INSERT INTO test (a, b) VALUES (1, 'example'); INSERT INTO test (a, b) VALUES (2, 'example'); INSERT INTO test (a, b) VALUES (3, 'example'); INSERT INTO test (a, b) VALUES (4, 'example'); INSERT INTO test (a, b) VALUES (5, 'example'); INSERT INTO test (a, b) VALUES (6, 'example'); INSERT INTO test (a, b) VALUES (7, 'example'); INSERT INTO test (a, b) VALUES (8, 'example'); INSERT INTO test (a, b) VALUES (9, 'example'); INSERT INTO test (a, b) VALUES (10, 'example');

    Wednesday, September 18, 13

  • Simple Queries set tracing on;

    SELECT * FROM test;

    # bom

    SELECT * FROM test WHERE a = 1;

    # mais uma vez, bom

    SELECT * FROM test WHERE b = 'Example';

    ## Cassandra? O que?

    Wednesday, September 18, 13

  • Secondary Indexes CREATE INDEX ON test (b);

    SELECT * FROM test WHERE b = 'Example';

    Wednesday, September 18, 13

  • Espera!

    CQL não faz ‘wide rows’!

    Wednesday, September 18, 13

  • Faz, sim • Faz na mesma maneira que Thrift • É certo! Prometo! • Leia Aqui:

    http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows

    ...ou, pode confiar em mim, e vou demonstrar

    Wednesday, September 18, 13

    http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows http://www.datastax.com/dev/blog/does-cql-support-dynamic-columns-wide-rows

  • Também conhecido em Português como ‘Shopping Cart’, Um bom motivo para ter disponibilidade é que os pessoas querem dar-lhe dinheiro.

    Modelo do Carrinho De Compras

    Wednesday, September 18, 13

  • ‘Shopping Cart’ Caso De Uso * Armazenar dados do Carrinho com segurança * Minimizar, ou eliminar falhas (downtime). Multi-dc * Escalar pela problema “Cyber Monday” problem

    * Cada moment com falhas é $$ * Compradores on-line querem velocidade

    The bad

    Wednesday, September 18, 13

  • O Modelo do ‘Shopping Cart’ • Cada consumidor pode ter max

    que um ‘Cart’. • De-normaliza por acesso rápido • Um ‘Cart‘ == Um Partition

    (storage row) • Cada coluna é um item

    Wednesday, September 18, 13

  • O Modelo do ‘Shopping Cart’

    CREATE TABLE user ( ! username varchar, ! firstname varchar, ! lastname varchar, ! shopping_carts set, ! PRIMARY KEY (username) );

    CREATE TABLE shopping_cart ( ! username varchar, ! cart_name text ! item_id int, ! item_name varchar, description varchar, ! price float, ! item_detail map ! PRIMARY KEY ((username,cart_name),item_id) );

    INSERT INTO shopping_cart (username,cart_name,item_id,item_name,description,price,item_detail) VALUES ('bcoverston','Gadgets I want',8675309,'Garmin 910XT','Multisport training watch',349.99, {'Related':'Timex sports watch', 'Volume Discount':'10'});

    INSERT INTO shopping_cart (username,cart_name,item_id,item_name,description,price,item_detail) VALUES ('pmcfadin','Gadgets I want',9748575,'Polaris Foot Pod','Bluetooth Smart foot pod',64.00 {'Related':'Timex foot pod', 'Volume Discount':'25'});

    Um partition (storage row) de dados

    Detalhas do item, flexível por qualquer coisa

    Partition chave da linha pela ‘cart’ de um usuário só

    Cria da chave pela linha (row key)

    Wednesday, September 18, 13

  • Vamos Criar Nosso Modelo $ bin/cqlsh

    cqlsh> CREATE KEYSPACE cart WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1};

    cqlsh> USE cart;

    cqlsh> CREATE TABLE user ( username varchar, firstname varchar, lastname varchar, shopping_carts set, PRIMARY KEY (username) );

    Wednesday, September 18, 13

  • Nosso Modelo (cont) cqlsh> CREATE TABLE shopping_cart ( username varchar, cart_name text item_id int, item_name varchar, description varchar, price float, item_detail map PRIMARY KEY ((username,cart_name),item_id) );

    Wednesday, September 18, 13

  • Inserir Dados cqlsh> INSERT INTO shopping_cart (username, cart_name, item_id, item_name, description, price, item_detail) VALUES ('pmcfadin', 'Gadgets I want', 8675309, 'Garmin 910XT', 'Multisport training watch', 349.99, {'Related':'Timex sports watch','Volume Discount':'10'});

    cqlsh> INSERT INTO shopping_cart (username,cart_name,item_id,item_name,description,pr