r. 

NUCQTJ na,  íjlÍiáJÇllífêíÍ

'W

JÉT_L'ÉSH. IT. IÍ. TÍ «emíjaizzgm

 

Henrique Liberato
henriqueliberatacombr
Rito @euro

- Motivação NoSQL

- Banco de dados colunares

e Cases:  Twitter

~ Esqueça a infra (por enquanto) e foco no D...
O'

  IWPJ?  [idm. ¡›(1›'› [Lidos

" Apn-se-uun un raswmvu
  Aplesenldgdr) Las-youth. :

Cassandra NoSQL a _ 

fmasanori@g...
UHTnsTHk§

Building
; ÉLJBVB
Appllcahons

with Cassandra

 
        
    
 
 

@Hbergluud

   

FU 701¡ (dSMHNÍYd

C' . u
...
Quem usa;  Cassandra

 

; r

,  L-  Adobe despegar-_com

. ._ 0

-z- BlackBerry.  'àlãNEp

o cu/ cist!  I
8.3 Q3233
w 7 :...
iClient Drivers

@ic PLANET  ' 
CASSANDRA PÍHNORN¡
"z  i " Kuiidera

client Drivers Eaisi' Czisszi n d ra

. Àstvziiizix

...
Banco de dados colunares

- Todos os valores de uma coluna são
"fisicamente" armazenados juntos.  O SGBD
colunar serializa...
ACID Vs BASE
éiIClD
 Atomicity
-A Consistency
=  Isolation
~ Durability

BASE
 Basically / íitvailable
 Soft state
« Eventual Consisten...
Teorema CAP

    
 

   

Consistencia Disponibilidade

Tolerância a falhas

S.  Gilbert N.  Lynch - http: //lpd. epfl. ch...
Processo de escrita

Memtable

Commit Log

Á¡-

ss Table SSTab| e 5573**
Processo de leitura

Memtable

a

áí
n¡ a

SS Table SS Table SS Tabie
7
8
4
)S)
. mam
217.
34a
¡W8¡w. 
m
o
L
))w
meu
mam
. wlvlü
m
s m
)
M mrw
n m4u
U www
4
5
_Í
9))
Lmm
SZZ
63a
3lvulvx

Gabri...
Beleza,  mas e na prática? 

Conzpressão os Materialização! 

É Reaistro É Nome É Telefone É Celular É Email É Fax

Ê Id:1...
Case Twiter
M ySQL to . NoSQL Data Modeling' Challenges in Supporting' Scalabilily

Apolicnxim

50mm

 

POGOSIGHQ
Dainese...
Applications

A Iicafon
pp l Administration Twiner Friends
Inlenace & Foilowers
TwmerStalus containers
Services
Service
Pe...
I Transaciionserxrice I

A
I
I
I

l
"f
JPA/ Hibernate

i i

Lucena
Database

 

id:  long

namfe¡ String createdAt:  Date id:  long
start' Date text:  String screen_name:  String
end:  Date
Applications

Iication
App Twitter Collection
a Search
Spring
Containers
Service MySOLTwitter CassandraTwitter
Slatusservi...
Transactionservice

   
     

lvlysOL Lucene Cassandra
labase

 

Event Name 1

@ida

Event Name N

I MySQL I |  Lucene I

Tweet Id 1
JSON

Tweet Id 1
JSON

&àé

@Qi

1943-12

1...
Esqueça a infra (por enquanto) e foco no DEV! 
Datastax Community Edition (open source)

DHTH5THX§

httpz/ /planetcassandr...
xy_ '
|  .- à, 
l _gi
_t “gv

~ r:  ,m . i s i _ ; a s: 
  W a,  
 v' N .  m.  E!  nricel¡ : E
t¡

     
 

   

l
- '  A ...
A -TLjJ ifâjtyíjíçxã    -di.
Inicialmente projeto proprietário do Facebook,  mas teve
seu código aberto em 2oo8.

Projetado por: 
Malik Prashant (Faceb...
;  f:  ç a,  amaaricoml

 

Zz
Bigtable,  2006 DV"am°› 2007
'tl 1;!  I l l: 
Open Source,  2008
_ 

Apache¡ 2009 Cassandra...
Codiñcando no Cassandra

A tradicional conexão JDBC: 

- Utiliza CQL Cassandra Query Language,  que converte
Thrift para c...
Cassandra CLI
Utility

   

 

l lCoTineeteÍ torlezst Clusteratjlocallíst :916BÍ
'llcqlsh 4.1.1 l Cassandra 2.8.6 l CQL : ...
Classe Connection Factory

package jdbc; 
import java. sql. ';
public class CassandraConnectionFactory f
public Connection...
Exemplo de insert

package jdbc; 
+ import java. sq1.PreparedStatement; D

public class TestesJDBC f

public void testeIns...
Exemplo de select

@Test
public void testeSelectO throus SQLException,  ClassNotFoundExceptionf

CassandraconnectionFactor...
Resultado do select exibido
ru)consok3

O1 l Joaozinho |  jo@ozinho.  com
02 |  Zequinha |  zequinhálmaiLcom
O3 I Mariazin...
Codificando no Cassandra

Persistindo comJPA: 

- Utilizando o Kundera (https: //github. com/ impetus-
opensource/ Kundera...
Criação da classe e anotações

package jpa; 

@import javax. persistence. Column; [

@Entity
@Tab1e(name = 

n

userslug',...
Classe de acesso aos dados

package jpa; 
+ import java. util. List; ;
public class CassandraDAO[

cura: : as c. :l.5:›. í...
Exemplo de persistência e remoção

public class Testes f

public static void rain(String[] args) f
Userslug userJug =  new...
Arquivo de configuração

 

-. - (persistencia nlns-"httpM/ java.  sun.  con/ mL/ ns/ persístence' m1ns: xsi-'http: //Muv....
Hi: : splfàií. agleiii-
l

IJ ; aaíS (D , ratab : as  Seiíírice)

httpsz/ /mvwinstaclustrcom/ 

   

httpz/ /ivwwtesoracom/
líonchisãoi

lírabahioslñiuinis

Ijüñudas?
O b IÍi§: â., lfl. l3 i

~ https: //github. com/ hliberato/ 
jugVale7-NoSQL-Cassandra

 http: //lnkd. in/ iApYMK
 httpz/ /...
Próximos SlideShares
Carregando em…5
×

NoSQL na prática! Cassandra em Java

797 visualizações

Publicada em

Apresentação da palestra sobre codificar em Java aplicações utilizando o banco de dados distribuídos Apache Cassandra, ministrada no 7º Encontro de usuários Java do Vale do Paraíba, o JUG-Vale.

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
797
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
20
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

NoSQL na prática! Cassandra em Java

  1. 1. r. NUCQTJ na, íjlÍiáJÇllífêíÍ 'W JÉT_L'ÉSH. IT. IÍ. TÍ «emíjaizzgm Henrique Liberato henriqueliberatacombr
  2. 2. Rito @euro - Motivação NoSQL - Banco de dados colunares e Cases: Twitter ~ Esqueça a infra (por enquanto) e foco no DEV! - Client Drivers - Codiñcando: CQLJDBC eJPA. e Clusters e Hospedagem - Contato (repositório dos códigos apresentados)
  3. 3. O' IWPJ? [idm. ¡›(1›'› [Lidos " Apn-se-uun un raswmvu Aplesenldgdr) Las-youth. : Cassandra NoSQL a _ fmasanori@gmai| .com 17 de março de 2012 slidesharenetlfmasanori IWPHU ! nu-Ilan n* ! Smhra nUI Pam quam¡ m- Python [kw/ Hay - rum. . NvvSuL NusuL m (ñ N ; /45 Cassandra NoSQL JUG Vale 2012 2 099 p. ; Fernando Mnanon Fzmessu ›n FJJFL em l' md! 'r dv ÍVHÍ FMM m w msnm Úíwnl o gn Apache Cassandra e um banco de dadas dlsülhuidü tolerante a falhas escalavel e orientado a o o O colunas http: //pt. slidesharenet/ fmasanori/ cassandra-nosql-jug-vale-2012
  4. 4. UHTnsTHk§ Building ; ÉLJBVB Appllcahons with Cassandra @Hbergluud FU 701¡ (dSMHNÍYd C' . u Cassandra Day Denver 2014: Building Java " A- v jr” 'ÍÍÍX'"L°"”"”'5 C Applications with Apache Cassandra ¡tn! puma: Cassandra , ,,, <,_, ;~ ; m4 n. u «assumiu Follow a msm: : ÚTweel u 2M : http: //pt. slideshare. net/ planeteassandra/ Cassandra-day-denvcr-2o14-building-java- applications-with-apache-eassandra
  5. 5. Quem usa; Cassandra ; r , L- Adobe despegar-_com . ._ 0 -z- BlackBerry. 'àlãNEp o cu/ cist! I 8.3 Q3233 w 7 : :yRvd Ha( OEÉÉE' A A « Oh; "Jaú Emma. Pi' ERICSSON "hul" ? ÊEE “OPERA l CÍSCÔ ÉÊÉÉ: : “ souNAocLouo GÍÍHUb LBV" formspring
  6. 6. iClient Drivers @ic PLANET ' CASSANDRA PÍHNORN¡ "z i " Kuiidera client Drivers Eaisi' Czisszi n d ra . Àstvziiizix Pelops Fcedly CLlSSLHlLlYu CLlSSLIl]Lll'CllL“ Hector Storm-Cusszindru Achilles
  7. 7. Banco de dados colunares - Todos os valores de uma coluna são "fisicamente" armazenados juntos. O SGBD colunar serializa todos os valores em um conjunto de colunas. - Não perde tempo com full scan. - Rápido em operações de escrita e leitura.
  8. 8. ACID Vs BASE
  9. 9. éiIClD Atomicity -A Consistency = Isolation ~ Durability BASE Basically / íitvailable Soft state « Eventual Consistency*
  10. 10. Teorema CAP Consistencia Disponibilidade Tolerância a falhas S. Gilbert N. Lynch - http: //lpd. epfl. ch/ sgilbert/ pubs/ BrewersConjecture-SigAcLpdf
  11. 11. Processo de escrita Memtable Commit Log Á¡- ss Table SSTab| e 5573**
  12. 12. Processo de leitura Memtable a áí n¡ a SS Table SS Table SS Tabie
  13. 13. 7 8 4 )S) . mam 217. 34a ¡W8¡w. m o L ))w meu mam . wlvlü m s m ) M mrw n m4u U www 4 5 _Í 9)) Lmm SZZ 63a 3lvulvx Gabriella Arthur Alice i r a r l r r r r l l a z a o n ! n ! Fax ld3: 8412-5487 m m mm me @K mw hü . um. MM S i . ... ... ... ... ... .. -. a um n rum u a. . l man 0 &87 C 89 . .L3 MM 5M C47 n89 01.1. .645 dgô T33 12 . MM ea u" eqwr mmwmm oeanü NHGÂA kkkaw MMMM
  14. 14. Beleza, mas e na prática? Conzpressão os Materialização! É Reaistro É Nome É Telefone É Celular É Email É Fax Ê Id:1 l Henrique ã 3941-845 â 8841-2687 â hrq@hrq. com â (vazio) Id:2 Gabriella 3651-9754 (vazio) (vazio) (vazio) ¡ I ldt3 Ê Arthur Í (vazio) Ê 9741-2087 É (vazio) l 8412-5487 E ldz4 Alice (vazio) (vazio) its@lice. com (vazio) : 0101101lO100101011010101010101111101010100010101010110101010101011lO01101010100 z Nome Telefone Celular *Email 5 Fax à ldlzHenrlque E Id1:3941-845 a Id1:8841-2687 a ld1:hrq@hrq. com a ld3:8412-S487 i i Id2:Gabriella ã Id2:36S1-97S4 ê Id3:9741-2087 ê ld4zits@lice. com ° ã | d3:Arthur E Id4:Alice E E E 10101110101010110101001010110010100l l I 1010011001100011001100111100110l100110011
  15. 15. Case Twiter M ySQL to . NoSQL Data Modeling' Challenges in Supporting' Scalabilily Apolicnxim 50mm POGOSIGHQ Dainese: : Event Name 1 Tweet Id 1 -n- Tweel Id N E"" JSON m JSON name: S ' : Dal : Dale u. Even¡ Name N Tweel ld 1 -0- Twael ld N JSON 'I' JSON disponível em: <http: //epic. cs. coloradoedu/ wp-content/ uploads/ &Nfexoli schranLpdf>
  16. 16. Applications A Iicafon pp l Administration Twiner Friends Inlenace & Foilowers TwmerStalus containers Services Service Persistenoe Database
  17. 17. I Transaciionserxrice I A I I I l "f JPA/ Hibernate i i Lucena
  18. 18. Database id: long namfe¡ String createdAt: Date id: long start' Date text: String screen_name: String end: Date
  19. 19. Applications Iication App Twitter Collection a Search Spring Containers Service MySOLTwitter CassandraTwitter Slatusservice StatusService pm-gstence JPNHibemate Database Cassandra
  20. 20. Transactionservice lvlysOL Lucene Cassandra
  21. 21. labase Event Name 1 @ida Event Name N I MySQL I | Lucene I Tweet Id 1 JSON Tweet Id 1 JSON &àé @Qi 1943-12 156565 Tweet Id N JSON Tweet Id N JSON
  22. 22. Esqueça a infra (por enquanto) e foco no DEV! Datastax Community Edition (open source) DHTH5THX§ httpz/ /planetcassandraorg/ Cassandra/
  23. 23. xy_ ' | .- à, l _gi _t “gv ~ r: ,m . i s i _ ; a s: W a, v' N . m. E! nricel¡ : E t¡ l - ' A . mlllllnnm. E x t_ lan¡ , à , › nen. .. . . *É* l
  24. 24. A -TLjJ ifâjtyíjíçxã -di.
  25. 25. Inicialmente projeto proprietário do Facebook, mas teve seu código aberto em 2oo8. Projetado por: Malik Prashant (Facebook) e Avinash Lakshman (Amazon/ Dynamo). Em 201o foi aceito na incubadora de projetos da Apache e recebeu colaboração de empresas como Rackspace, Digg, Twitter e Netflix. Tem como objetivo uma alta escalabilidade, consistência eventual e alta disponibilidade. Utiliza-se do protocolo de comunicação Apache Thrift.
  26. 26. ; f: ç a, amaaricoml Zz Bigtable, 2006 DV"am°› 2007 'tl 1;! I l l: Open Source, 2008 _ Apache¡ 2009 Cassandra, 2010
  27. 27. Codiñcando no Cassandra A tradicional conexão JDBC: - Utiliza CQL Cassandra Query Language, que converte Thrift para comandos parecidos com o habitual SQL (https: //code. google. com/ a/apache-eXtras. org/ p/ cassandra-jdbc/ ). - Semelhante aos outrosJDBCs existentes. - Adicionar o . jar no classpath do projeto.
  28. 28. Cassandra CLI Utility l lCoTineeteÍ torlezst Clusteratjlocallíst :916BÍ 'llcqlsh 4.1.1 l Cassandra 2.8.6 l CQL : pec 3.1.1 l Thrift protocol 19.39.91 _ lui. .. uclv cm. mai. . Icqlsh) CRERTE KEÊSPRCE _jugkeyspace . . . UlTH REPLICHTION= (' class' : 'SímpleStrategy' , 'replicat íonjactor' :1); r cqisnz W_ *nn1nl. H _use _jugkeyspace; l r qLàlliqtlsñCyàyübü/ -cqlshiJtrgkeyspace > . nn1«h-4unLauon= na criisin3ttãkegsiaace> cruzam InBLE tlsersJug < . . . user-_key int. . . . . name Uau-char. l . .. email Uarcltar. i . . . ) PRIHHRY KEY (usei-Jay) *h ; M °. cq1sn: JugKeyspace)
  29. 29. Classe Connection Factory package jdbc; import java. sql. '; public class CassandraConnectionFactory f public Connection con = null; public Connection getConnection() throws C1assNotFoundException, SQLExceptionf / / oarém 0 DRIVER DE CONEXÃO Class. fbrName("org. apache. cassandra. cql. jdbc. CassandraDriver“); con = DriverManager . getConnectíon("jdbc: cassandra: //localhost:9160/jugkeyspace"); / /RETORNA A CONEXÃO return con;
  30. 30. Exemplo de insert package jdbc; + import java. sq1.PreparedStatement; D public class TestesJDBC f public void testeInsert() throws C1assNotFoundException, SQLExceptíonf CassandraConnectionFactory ccf = new CassandraconnectionFactory(); String sql = "insert into u5er5Jug (user_key, nane, ewai1)" + " values (? ,?, ?)"; Preparedstaterent strt ccf. getConnection(). prepareStatement(sql); l pn--Iry- -_-r -. - my. ; . m r-'V-l M: : _ _l. _._- _ . r . '4 stwt. setString(1, "01"); stwt. setString(2, "Joaozinho"); strt. setString(3, "jc@ozinho. ccw"); ífíãíCLllé. stwt. execute(); strt. c1ose();
  31. 31. Exemplo de select @Test public void testeSelectO throus SQLException, ClassNotFoundExceptionf CassandraconnectionFactory ccf = new CassandraconnectionFactory(); / /QUERY CQL QUE SERÁ EXECUTADA String query = "select * from usersJug"; Statement stmt = ccf. getConnection(). createStatenent(); Resultset rs = stmt. executeQuery(query); / / ITERAÇÃO SOBRE TODOS OS ITENS OBTIDOS uhile (rs. next())f Systen. out. print1n( rs. getInt(”user_key”)+“ | "+ rs. getString("nane")+“ | "+ rs. getString(“emai1")); Systen. out. println(Systen. Líne$eparator()); i stmt. c1ose();
  32. 32. Resultado do select exibido ru)consok3 O1 l Joaozinho | jo@ozinho. com 02 | Zequinha | zequinhálmaiLcom O3 I Mariazinha I mari@zinha. com
  33. 33. Codificando no Cassandra Persistindo comJPA: - Utilizando o Kundera (https: //github. com/ impetus- opensource/ Kundera). - Adicionar o . jar no classpath do projeto ou via Maven. - Integração com o CQL. - Outras APIS de persistência: Hector API, Easy-Cassandra (feito por um BRl).
  34. 34. Criação da classe e anotações package jpa; @import javax. persistence. Column; [ @Entity @Tab1e(name = n userslug', schema = “jugkeyspace”) public class Userslug f t' @Id private int user_key; - @Column(nane-“nane') private String name; -A @Column(nane= "enai1") private String email; -4 public int getUser_key() f return user_key; i public public public public public void setUser_key(int user_key) fthis. user_key = user_key; ] String getName() (return nane; ) void setNane(String name) fthis. name = String getEnai1() (return enailg) void setEnail(String email) fthis. eaail = emai1;) name; )
  35. 35. Classe de acesso aos dados package jpa; + import java. util. List; ; public class CassandraDAO[ cura: : as c. :l.5:›. í'3;: EntityManagerFactory erf = Persistence. createfntity#hnagerFactory("jugkeyspace"); EntityManager er = erf. createEntityHanager(); ? Test public void persistir(0bject entidade)( em. persist(entídade); em. clear(); l public void rerover(Object entidade)( em. rerove(entidade); em. clear(); l public <T› T encontrarPorID(Class<T› entityclass, Object id)( T resultado = en. find(entítyClass, id); return resultado; i : Supp"e5:_arning: ("unchecked") public List<Object› listar()f Query q = er. createQuery("select ' frcw users3ug"); return q. getResultList();
  36. 36. Exemplo de persistência e remoção public class Testes f public static void rain(String[] args) f Userslug userJug = new UsersJug(); userlug. setNare("Joaozinho"); . . I . A Y . . user J ug . setEirail( "Jcíllbzinho . ccrr' )3 ÊÍerTÍnltESÍTeSÍÊSQIJÉV: EP lcatwn' ar1az1n a rarikzin a. cor CassandraDAO cdao = new CassandraDAO(); J°a°z1nh° J°@°Z1nh°'c°" cdao. persistir(u5erJug); _ _ _ imprimiru-sta( cdao _ listar( ) n <terminated> Testes [Java Application] Mariazinha rari@zinha. cor cdao. remover(u5er]ug); imprimirLista(cdao. listar()); l public static void irprimirLista(List<UsersJug> users)f for (UsersJug user : users) f System. out. print1n(user. getName()+" "+user. getEmail() +System. LineSeparator());
  37. 37. Arquivo de configuração -. - (persistencia nlns-"httpM/ java. sun. con/ mL/ ns/ persístence' m1ns: xsi-'http: //Muv. n13. org/2001/XMLScheIia-instarrce' xsi: schenaLocation- 'http: // java. sun. con/ xiiiL/ ns/ persistence http : //java. sun. con/ mL/ ns/ persistence/ persistence_2__0. xsd' vers ion- "2. 0' › v* <persistence-unit nane= 'cassandm_pu'› <provider›con. inpetus . kundera . KunderaPersistenced provider › -. - (properties) <property nue-'kundermnodes' v¡lue-r'l. ocal. host'/ › (property nane-'kunderrhport' value-'9160'/ › <property nane-'kunderm keyspace' value- 'test'/ › (property nanefhundera. diaLect' value= "cassandra'/ › <property nanefkundera. cLient. Lookup. cLass' value= 'con. inpetus. client. cassandrmpetops. PeLopsCLientFactor-y' / › (property nane-"kunderm cachemrovider. cLass' value-'corm inpetus. kundera. cache. ehcache. EhCacheProviderV › (property nane= "hunderm cache. config. resource' value= 'Vehcache-test. xnl. "/ › (property nane-'kunderaufdhauttmprepare' value= 'create' / › (property nanefkundera. cLíent. Lookup. class' value- "com. imetus. kundera. cLíent. Cassandra. dsdriver. DSCLÍentFaCtary' / › </ properties) </ persistence-unit› (lpersistence)
  38. 38. Hi: : splfàií. agleiii- l IJ ; aaíS (D , ratab : as Seiíírice) httpsz/ /mvwinstaclustrcom/ httpz/ /ivwwtesoracom/
  39. 39. líonchisãoi lírabahioslñiuinis Ijüñudas?
  40. 40. O b IÍi§: â., lfl. l3 i ~ https: //github. com/ hliberato/ jugVale7-NoSQL-Cassandra http: //lnkd. in/ iApYMK httpz/ /virwwibcom/ safraãio http: //henriqueliberato. com. br/ henriquebmx@gmail. com

×