NoSQL com Cassandra e Python

62

Transcript of NoSQL com Cassandra e Python

Page 1: NoSQL com Cassandra e Python
Page 2: NoSQL com Cassandra e Python

NoSQL com Python

Gustavo Pinto@gustavopinto

Page 3: NoSQL com Cassandra e Python

gustavopinto

2004 - belém, grad, php2006 - amazontic, java, rails2008 - curitiba, msc, python2009 - aprioriti, xp, scrum2011 - recife, phd

Page 4: NoSQL com Cassandra e Python

novo século

novos problemas

Page 5: NoSQL com Cassandra e Python
Page 6: NoSQL com Cassandra e Python
Page 7: NoSQL com Cassandra e Python
Page 8: NoSQL com Cassandra e Python
Page 9: NoSQL com Cassandra e Python

O que você usaria?

Page 10: NoSQL com Cassandra e Python

O que você usaria?

Page 11: NoSQL com Cassandra e Python
Page 12: NoSQL com Cassandra e Python
Page 13: NoSQL com Cassandra e Python
Page 14: NoSQL com Cassandra e Python
Page 15: NoSQL com Cassandra e Python
Page 16: NoSQL com Cassandra e Python
Page 17: NoSQL com Cassandra e Python

NoSQL

Page 18: NoSQL com Cassandra e Python

Hash table+

Distributed

Page 19: NoSQL com Cassandra e Python
Page 20: NoSQL com Cassandra e Python

Vamos por partes..

Page 21: NoSQL com Cassandra e Python

Estrutura de dados

Page 22: NoSQL com Cassandra e Python

Desnormalização

JOIN

Page 23: NoSQL com Cassandra e Python
Page 24: NoSQL com Cassandra e Python

eventualmente consistente

Replication Factor = 3

Page 25: NoSQL com Cassandra e Python

tolerante a

falhas

Page 26: NoSQL com Cassandra e Python

BASE ACID

● Basically● Available● Soft State● Eventually

Consistent

● Atomic● Consistent● Isolated● Durable

Page 27: NoSQL com Cassandra e Python

ferramentas

Page 28: NoSQL com Cassandra e Python
Page 29: NoSQL com Cassandra e Python
Page 30: NoSQL com Cassandra e Python

Banco de dados distribuido, tolerante a falhas, escalável,

orientado a colunas

Page 31: NoSQL com Cassandra e Python

x

... em 50 GB de dados

Page 32: NoSQL com Cassandra e Python

Intalação

● download cassanda-xxx.tar.gz● cd cassandra/bin/● ./cassandra

Page 33: NoSQL com Cassandra e Python

Intalação

● download cassanda-xxx.tar.gz● cd cassandra/bin/● ./cassandra

Page 34: NoSQL com Cassandra e Python

Intalação

● download cassanda-xxx.tar.gz● cd cassandra/bin/● ./cassandra

● ./cassandra-cli -h localhost -p 9160

Page 35: NoSQL com Cassandra e Python

show keyspaces;

Page 36: NoSQL com Cassandra e Python

create keyspace pugpe;use pugpe;

Page 37: NoSQL com Cassandra e Python

create column family encontroxvi with comparator = UTF8Type;

Page 38: NoSQL com Cassandra e Python

set encontroxvi['08:30~09:00']['Titulo'] = 'Apresentacao';set encontroxvi['08:30~09:00']['Palestrante'] = 'Marcel';

Page 39: NoSQL com Cassandra e Python

set encontroxvi['08:30~09:00']['Titulo'] = 'Apresentacao';set encontroxvi['08:30~09:00']['Palestrante'] = 'Marcel';

Page 40: NoSQL com Cassandra e Python

set encontroxvi['08:30~09:00']['Titulo'] = 'Apresentacao';set encontroxvi['08:30~09:00']['Palestrante'] = 'Marcel';

Page 41: NoSQL com Cassandra e Python

set encontroxvi['08:30~09:00']['Titulo'] = 'Apresentacao';set encontroxvi['08:30~09:00']['Palestrante'] = 'Marcel';

Page 42: NoSQL com Cassandra e Python

set encontroxvi['08:30~09:00']['Titulo'] = 'Apresentacao';set encontroxvi['08:30~09:00']['Palestrante'] = 'Marcel';

set encontroxvi['09:00~09:40']['Titulo'] = 'noSQL';set encontroxvi['09:00~09:40']['Palestrante'] = 'Gustavo';set encontroxvi['09:00~09:40']['Slide'] = 'bit.ly/jhae1';

Page 43: NoSQL com Cassandra e Python

get encontroxvi['08:30~09:00'];

Page 44: NoSQL com Cassandra e Python

get encontroxvi['08:30~09:00'];

Page 45: NoSQL com Cassandra e Python

Thrift

Idiomatic low level API

Page 46: NoSQL com Cassandra e Python

Instalação

1. Download thrift-0.2.0-incubating.tar.gz2. Instale as dependências (apt-get install ..)3. ./configure (se tudo der certo)4. make (se tudo der certo..)5. make install

Page 47: NoSQL com Cassandra e Python

Instalação

1. Download thrift-0.2.0-incubating.tar.gz2. Instale as dependências (apt-get install ..)3. ./configure (se tudo der certo)4. make (se tudo der certo..)5. make install

Page 48: NoSQL com Cassandra e Python

from thrift import Thriftfrom thrift.transport import TTransportfrom thrift.transport import TSocketfrom thrift.transport import THttpClientfrom thrift.protocol import TBinaryProtocolfrom cassandra import Cassandrafrom cassandra.ttypes import *

import time

socket = TSocket.TSocket("localhost", 9160)transport = TTransport.TBufferedTransport(socket)protocol = TBinaryProtocol.TBinaryProtocol(transport)client = Cassandra.Client(protocol)

Page 49: NoSQL com Cassandra e Python

keyspace = "pugpe"column_path = ColumnPath(column_family="encontroxvi", column="palestrante")

key = "08:30~09:00"value = "Gustavo Pinto"timestamp = time.time()

try:transport.open() # ... client.insert(keyspace,key, column_path, value, timestamp,ConsistencyLevel.ZERO)

# ....

Page 50: NoSQL com Cassandra e Python

column_parent = ColumnParent(column_family="encontroxvi")

slice_range = SliceRange(start="", finish="") predicate = SlicePredicate(slice_range=slice_range)

result = client.get_slice(keyspace, key, column_parent, predicate, ConsistencyLevel.ONE)

# ...

Page 51: NoSQL com Cassandra e Python

pycassa

High level API

Page 52: NoSQL com Cassandra e Python

Instalação1. easy_install pycassa

Page 53: NoSQL com Cassandra e Python

import pycassa

pool = pycassa.ConnectionPool("pugpe")cf = pycassa.ColumnFamily(pool, "encontroxvi")

cf.insert('08:30~09:00', {'palestrante' : 'marcel', 'palestra' : 'abertura'})cf.insert('09:00~09:40', {'palestrante' : 'gustavopinto', 'palestra' : 'nosql', 'slide' : 'bit.ly/...'})

cf.get('08:30~09:00')cf.multiget(['08:30~09:00', '09:00~09:40'])cf.get_count('09:00~09:40')

cf.remove('09:00~09:40')

Page 54: NoSQL com Cassandra e Python

import pycassa

pool = pycassa.ConnectionPool("pugpe")cf = pycassa.ColumnFamily(pool, "encontroxvi")

cf.insert('08:30~09:00', {'palestrante' : 'marcel', 'palestra' : 'abertura'})cf.insert('09:00~09:40', {'palestrante' : 'gustavopinto', 'palestra' : 'nosql', 'slide' : 'bit.ly/...'})

cf.get('08:30~09:00')cf.multiget(['08:30~09:00', '09:00~09:40'])cf.get_count('09:00~09:40')

cf.remove('09:00~09:40')

Page 55: NoSQL com Cassandra e Python

import pycassa

pool = pycassa.ConnectionPool("pugpe")cf = pycassa.ColumnFamily(pool, "encontroxvi")

cf.insert('08:30~09:00', {'palestrante' : 'marcel', 'palestra' : 'abertura'})cf.insert('09:00~09:40', {'palestrante' : 'gustavopinto', 'palestra' : 'nosql', 'slide' : 'bit.ly/...'})

cf.get('08:30~09:00')cf.multiget(['08:30~09:00', '09:00~09:40'])cf.get_count('09:00~09:40')

cf.remove('09:00~09:40')

Page 56: NoSQL com Cassandra e Python

import pycassa

pool = pycassa.ConnectionPool("pugpe")cf = pycassa.ColumnFamily(pool, "encontroxvi")

cf.insert('08:30~09:00', {'palestrante' : 'marcel', 'palestra' : 'abertura'})cf.insert('09:00~09:40', {'palestrante' : 'gustavopinto', 'palestra' : 'nosql', 'slide' : 'bit.ly/...'})

cf.get('08:30~09:00')cf.multiget(['08:30~09:00', '09:00~09:40'])cf.get_count('09:00~09:40')

cf.remove('09:00~09:40')

Page 57: NoSQL com Cassandra e Python

import pycassa

pool = pycassa.ConnectionPool("pugpe")cf = pycassa.ColumnFamily(pool, "encontroxvi")

cf.insert('08:30~09:00', {'palestrante' : 'marcel', 'palestra' : 'abertura'})cf.insert('09:00~09:40', {'palestrante' : 'gustavopinto', 'palestra' : 'nosql', 'slide' : 'bit.ly/...'})

cf.get('08:30~09:00')cf.multiget(['08:30~09:00', '09:00~09:40'])cf.get_count('09:00~09:40')

cf.remove('09:00~09:40')

Page 58: NoSQL com Cassandra e Python

import pycassa

pool = pycassa.ConnectionPool("pugpe")cf = pycassa.ColumnFamily(pool, "encontroxvi")

cf.insert('08:30~09:00', {'palestrante' : 'marcel', 'palestra' : 'abertura'})cf.insert('09:00~09:40', {'palestrante' : 'gustavopinto', 'palestra' : 'nosql', 'slide' : 'bit.ly/...'})

cf.get('08:30~09:00')cf.multiget(['08:30~09:00', '09:00~09:40'])cf.get_count('09:00~09:40')

cf.remove('09:00~09:40')

Page 59: NoSQL com Cassandra e Python
Page 60: NoSQL com Cassandra e Python
Page 61: NoSQL com Cassandra e Python

Para saber mais

https://bitly.com/bundles/gustavopinto/2

Page 62: NoSQL com Cassandra e Python

Para saber mais