SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
@julioviegas
Engenheiro de Software
Palestrante
  ~15 anos trabalhando com tecnologia

  Instrutor, arquiteto, mentor e engenheiro de software e
  eletronica

  Participa de comunidades de usuarios: RSJUG, XP-RS,
  CEJUG, Open4Education, NoSQLBr...

  Sun Certified Trainer, SCEA 1 e 5, SCDJWS 1.4 e 5,
  SCWCD 1.4, SCBCD 5, SCJP 5, SCJA 1

  Engenheiro de Software da Summa Technologies e
  Instrutor Globalcode
Agenda
 NoSQL?

 Redis

 MongoDB

 CouchDB

 Memcached

 Cassandra
NoSQL?
 !SQL

 !ACID

 Distribuido

 Cloud

 Performance

 Persistencia variada

 Consistencia

 Sem schema/tipo
NoSQL?
 Persistencia ou RAM

 Objeto

 Tabular

 Tupla

 Documento

 Imagem

 Chave/Valor

 Hierarquico/Estruturado
NoSQL?
 Geracao web

 RDBMS nao eh arquitetura padrao

 Centralizar?

 Consistencia?

 Fail-over?

 Backup/recovery?

 Uso como cache: mais disco, mais memoria
NoSQL?
 CAP

    Consistencia: nem sempre o dado visualizado eh o mais
    atual

    Disponibilidade: sempre no ar, rapido e otima resposta

    Particionamento: o sistema opera mesmo perdendo
    dados

 Disponibilidade versus consistencia

 Latencia versus consistencia

 Centralizacao versus particionamento
Redis
 Em memoria e persistencia

 Tipos de dados: Strings, Lists, Sets e SortedSets

 Atomico

 Clientes para varias linguagens

 Master/Slave

 Sharding manual

 Configuracao, gerenciamento e instalacao simples
Redis
 Instalacao: download, unpack, make

 Servidor: ./redis-server

 Cliente(teste): ./redis-cli set key value; ./redis-cli get key
MongoDB
 Muitas funcionalidades, grandes cases

 Orientado a documentos estilo JSON

 Indexacao de atributos

 Auto Sharding, Resharding, Replicacao, Alta
 Disponibilidade

 Muitas facilidades para consulta

 Atualizacoes de documentos ou dados pontuais internos

 Map Reduce
MongoDB
 Online shell e tutorial em http://www.mongodb.org/#
MongoDB
 Instalacao: binarios ou via compilacao de fontes

 Servidor: ./mongod

 Cliente(teste): ./mongo

 Salvando dados: db.foo.save( { a : 1 } )

 Lendo dados: db.foo.find()

 Consultas: db.foo.find( { $or : [ { a : 1 } , { b : 2 } ] } )
CouchDB
 JSON

 Javascript

 RESTful API

 Escrito em Erlang

 Indexavel

 Suporte a consultas

 Distribuido e replicavel
CouchDB
 Views

 Schema free

 Javascript Map/Reduce

 Versionamento

 BLOB
CouchDB
 Instalacao: unpack; ./configure; make; sudo make install

 Servidor: sudo -u couchdb ./couchdb

 Teste: http://localhost:5984/_utils

 Cliente: curl http://localhost:5984 # {"couchdb":"Welcome"}
CouchDB
     Requisicao HTTP RESTful PUT

PUT /example/some_doc_id HTTP/1.0
Content-Length: 29
Content-Type: application/json

{"greetings":"Hello, World!"}


     Resposta HTTP

HTTP/1.0 201 Created
Server: CouchDB/0.9.0 (Erlang OTP/R12B)
Etag: "1-518824332"
Date: Wed, 24 Jun 2009 13:33:11 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 51
Cache-Control: must-revalidate

{"ok":true,"id":"some_doc_id","rev":"1-518824332"}
CouchDB
   Requisicao HTTP RESTful GET(via browser)

http://localhost:5984/example/some_doc_id

   Resposta HTTP(via browser)

{"_id":"some_doc_id","_rev":"1-518824332","greetings":"Hello,
World!"}
Memcached
 Em memoria apenas

 Chave/valor

 Suporte a timeout

 Reciclavel usando LRU

 Toda a logica de hashing, sharding e particionamento no
 cliente

 Protocolo binario ou texto. Em texto vc pode usar
 comandos via telnet.
Memcached
 Valores de ateh 1Mb

 stats

 atomico

 sem: autenticacao, failover, replicacao
Memcached
   Instalacao: unpack; ./configure; make; sudo make install

   Necessita de libevent

   Servidor: ./memcached -d -m 4096 -p 11212

   Cliente:

function get_foo(foo_id)
  foo = memcached_get("foo:" . foo_id)
  return foo if defined foo

  foo = fetch_foo_from_database(foo_id)
  memcached_set("foo:" . foo_id, foo)
  return foo
end
Cassandra
 Criado pelo Facebook, e usado em parte dele

 Baseado no Amazon Dynamo

 Usuarios: Digg, Reddit, Cisco Webex, Rackspace, Twitter

 Chave+valor

 Tipos dinamicos versionados com timestamp

 Atomicidade por chave

 Configuracao simples
Cassandra
 MySQL: muito IO imprevisivel!

 Solucoes baseadas em arquivos precisam de lock!

 Armazenamento descentralizado

 Tolerante a falhas

 Elastico: adicione mais servidores a quente

 Escala horizontalmente
Cassandra
 Disponibilidade e tolerancia a perda de particoes sobre
 consistencia(CAP)

 Consistencia configuravel

 Tradeoff: Consistencia versus Latencia

 Particionamento e replicacao baseado no Dynamo
 (Amazon) e modelo de dados estruturado(ColumnFamily)
 baseado no Bigtable(Google)
Cassandra
 Administracao minima

 Sem ponto unico de falha

 Particionador configuravel

 Replicacao configuravel: quantidade, rack e site “aware”

 Gossip, messaging, bootstrap, compaction

 Memtable

 Monitoracao e ferramentas de administracao

 Commit log
Cassandra
 Escritas: quorum(maioria) ou assincronas(1), sem leituras,
 posicionamento, rapida(0.12ms vs 300ms do MySQL),
 atomica, sempre garantida

 Leitura: memtable e +RAM, mais lenta que a escrita(15ms
 vs 350ms do MySQL), escala a bilhoes de linhas

 Consistencia: 1, quorum, all. Cuidado com a latencia!
Cassandra
 Keyspace: grupo de chaves ou banco/schema

 Column: chave e valor ou tabela de uma coluna e linha
Cassandra
 SuperColumn: mapa ou tabela de n colunas e uma linha
 apenas
Cassandra
 ColumnFamily: lista de mapas ou tabela
Cassandra
 SuperColumnFamily: grupos de SuperColumn usando
 chave
Cassandra
 Configuravel em storage-conf.xml

 Ordenacao eh feita na insercao, usando o nome da coluna

 ColumnFamily CompareWith

 SuperColumn CompareSubcolumnsWith

 Tipos: BytesType, UTF8Type, LexicalUUIDType,
 TimeUUIDType, AsciiType, LongType
Cassandra
 $CASSANDRA_HOME/conf/storage-conf.xml

 ClusterName

 AutoBootstrap

 Keyspace

    ColumnFamily

    ReplicaPlacementStrategy & EndPointSnitch: Unaware,
    Rack ou Datacenter

    ReplicationFactor
Cassandra
 Autenticador

 Particionador: Random por padrao ou ordenado

 InitialToken: armazena chaves com token similar

 CommitLogDirectory

 DataFileDirectory

 Seed

 ListenAddress/StoragePort

 ThriftAddress/ThriftPort
Cassandra
 Apache Thrift

 ConsistencyLevel: ZERO, ANY, ONE, QUORUM, ALL

 ColumnOrSuperColumn

 Column

 SuperColumn

 ColumnPath

 ColumnParent
Cassandra
 SlicePredicate

 SliceRange

 KeyRange

 KeySlice


 Mutation

 Deletion
Cassandra
 DEMO
???
Obrigado! :)

        @julioviegas
Engenheiro de Software

Más contenido relacionado

La actualidad más candente

UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SPAndré Déo
 
De A a Zabbix Devry Metrocamp
De A a Zabbix Devry MetrocampDe A a Zabbix Devry Metrocamp
De A a Zabbix Devry MetrocampAndré Déo
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveiselliando dias
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoelliando dias
 
Ad server cassandra
Ad server cassandraAd server cassandra
Ad server cassandradist_bp
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endMario Guedes
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLOrlando Vitali
 
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBRAvaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBRJulio Viegas
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Felipe Klerk Signorini
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancadoAmazon Web Services LATAM
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Daniel Lopes
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Henrique Gogó
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHPFelipe Ribeiro
 
Entregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMEntregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMRodrigo Zaccara
 
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBCZabbix BR
 
Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisManuel Lemos
 
Cloud computing & Spring Framework
Cloud computing & Spring FrameworkCloud computing & Spring Framework
Cloud computing & Spring FrameworkJulio Viegas
 

La actualidad más candente (20)

UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SPUserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
UserParameter vs Zabbix Sender - 1º ZABBIX MEETUP DO INTERIOR-SP
 
De A a Zabbix Devry Metrocamp
De A a Zabbix Devry MetrocampDe A a Zabbix Devry Metrocamp
De A a Zabbix Devry Metrocamp
 
Desenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveisDesenvolvendo aplicações Web escaláveis
Desenvolvendo aplicações Web escaláveis
 
PostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardoPostgreSQL Tuning: O elefante mais rápido que um leopardo
PostgreSQL Tuning: O elefante mais rápido que um leopardo
 
Ad server cassandra
Ad server cassandraAd server cassandra
Ad server cassandra
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQLEstudo comparativo entr bancos RDBMS, NoSQL e NewSQL
Estudo comparativo entr bancos RDBMS, NoSQL e NewSQL
 
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBRAvaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
Avaliando o Apache Cassandra como cache distribuido no SPC Brasil - NoSQLBR
 
Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016Deploy automático em projeto PHP - PHPSPIMA 2016
Deploy automático em projeto PHP - PHPSPIMA 2016
 
Aws sao paulo summit 2015 elasti cache avancado
Aws sao paulo summit 2015   elasti cache avancadoAws sao paulo summit 2015   elasti cache avancado
Aws sao paulo summit 2015 elasti cache avancado
 
Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)Minicurso Ruby e Rails (RailsMG UNA)
Minicurso Ruby e Rails (RailsMG UNA)
 
Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011Conhecendo o CouchDB - TDC2011
Conhecendo o CouchDB - TDC2011
 
Web seminario varnish
Web seminario varnishWeb seminario varnish
Web seminario varnish
 
Otimizacao de websites em PHP
Otimizacao de websites em PHPOtimizacao de websites em PHP
Otimizacao de websites em PHP
 
FISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de DatacentersFISL11 2010 - Automação de Datacenters
FISL11 2010 - Automação de Datacenters
 
Entregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVMEntregando conteúdo em ambientes extremos na JVM
Entregando conteúdo em ambientes extremos na JVM
 
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
1º Meetup Zabbix Meetup do Recife: Francys Nivea - LLD ODBC
 
Desenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveisDesenvolvendo aplicativos web escaláveis
Desenvolvendo aplicativos web escaláveis
 
Slides nginx
Slides nginxSlides nginx
Slides nginx
 
Cloud computing & Spring Framework
Cloud computing & Spring FrameworkCloud computing & Spring Framework
Cloud computing & Spring Framework
 

Destacado

WPF123
WPF123WPF123
WPF123David
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
La web
La webLa web
La webdiego
 
Aerodrome Surfaces English Spanish
Aerodrome Surfaces English SpanishAerodrome Surfaces English Spanish
Aerodrome Surfaces English Spanishherwig_callebaut
 
Turbine sua carreira com redes sociais
Turbine sua carreira com redes sociaisTurbine sua carreira com redes sociais
Turbine sua carreira com redes sociaisJulio Viegas
 
Membina Blog dgn Blogger
Membina Blog dgn BloggerMembina Blog dgn Blogger
Membina Blog dgn BloggerNurul Afiza
 

Destacado (6)

WPF123
WPF123WPF123
WPF123
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
La web
La webLa web
La web
 
Aerodrome Surfaces English Spanish
Aerodrome Surfaces English SpanishAerodrome Surfaces English Spanish
Aerodrome Surfaces English Spanish
 
Turbine sua carreira com redes sociais
Turbine sua carreira com redes sociaisTurbine sua carreira com redes sociais
Turbine sua carreira com redes sociais
 
Membina Blog dgn Blogger
Membina Blog dgn BloggerMembina Blog dgn Blogger
Membina Blog dgn Blogger
 

Similar a NoSQL Livre

Bancos de dados No-SQL e afins
Bancos de dados No-SQL e afinsBancos de dados No-SQL e afins
Bancos de dados No-SQL e afinsdcarneir
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPAricelio Souza
 
Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWSBancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWSAmazon Web Services LATAM
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - IntroduçãoMarco Pinheiro
 
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na WebMeritt - Cada Aluno é Único
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows AzureVitor Tomaz
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireportfpsgyn
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalierGleicon Moraes
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensAlessandro Binhara
 
Alinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQLAlinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQLpichiliani
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com GrailsWanderson Oliveira
 
Migrando seu workload de Big Data para o Amazon EMR
Migrando seu workload de Big Data para o Amazon EMRMigrando seu workload de Big Data para o Amazon EMR
Migrando seu workload de Big Data para o Amazon EMRAmazon Web Services LATAM
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineFrederico Maia Arantes
 
Open ldap linuxcon_working
Open ldap linuxcon_workingOpen ldap linuxcon_working
Open ldap linuxcon_workingLeandro Mendes
 
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)Caio Candido
 

Similar a NoSQL Livre (20)

Bancos de dados No-SQL e afins
Bancos de dados No-SQL e afinsBancos de dados No-SQL e afins
Bancos de dados No-SQL e afins
 
NoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAPNoSQL, Base VS ACID e Teorema CAP
NoSQL, Base VS ACID e Teorema CAP
 
No sql std
No sql stdNo sql std
No sql std
 
Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWSBancos de Dados Relacionais e NoSQL na Nuvem da AWS
Bancos de Dados Relacionais e NoSQL na Nuvem da AWS
 
PHPMyadmin - Introdução
PHPMyadmin - IntroduçãoPHPMyadmin - Introdução
PHPMyadmin - Introdução
 
BIG DATA na UFSM
BIG DATA na UFSMBIG DATA na UFSM
BIG DATA na UFSM
 
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
 
[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure[24HOP] SQL Server em maquinas virtuais do Windows Azure
[24HOP] SQL Server em maquinas virtuais do Windows Azure
 
Apresentação palestra ireport
Apresentação palestra ireportApresentação palestra ireport
Apresentação palestra ireport
 
L'esprit de l'escalier
L'esprit de l'escalierL'esprit de l'escalier
L'esprit de l'escalier
 
Tecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvensTecnologias para mineração de dados nas nuvens
Tecnologias para mineração de dados nas nuvens
 
Alinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQLAlinguagem SQL no mundo NOSQL
Alinguagem SQL no mundo NOSQL
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Produtividade em Java com Grails
Produtividade em Java com GrailsProdutividade em Java com Grails
Produtividade em Java com Grails
 
MySQL - the database
MySQL - the databaseMySQL - the database
MySQL - the database
 
Migrando seu workload de Big Data para o Amazon EMR
Migrando seu workload de Big Data para o Amazon EMRMigrando seu workload de Big Data para o Amazon EMR
Migrando seu workload de Big Data para o Amazon EMR
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App Engine
 
Open ldap linuxcon_working
Open ldap linuxcon_workingOpen ldap linuxcon_working
Open ldap linuxcon_working
 
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
DevOps containers x86 - Baremetal, Virtual e Cloud (pt_br)
 
MAC5855 - NoSQL
MAC5855 - NoSQLMAC5855 - NoSQL
MAC5855 - NoSQL
 

NoSQL Livre

  • 2. Palestrante ~15 anos trabalhando com tecnologia Instrutor, arquiteto, mentor e engenheiro de software e eletronica Participa de comunidades de usuarios: RSJUG, XP-RS, CEJUG, Open4Education, NoSQLBr... Sun Certified Trainer, SCEA 1 e 5, SCDJWS 1.4 e 5, SCWCD 1.4, SCBCD 5, SCJP 5, SCJA 1 Engenheiro de Software da Summa Technologies e Instrutor Globalcode
  • 3. Agenda NoSQL? Redis MongoDB CouchDB Memcached Cassandra
  • 4. NoSQL? !SQL !ACID Distribuido Cloud Performance Persistencia variada Consistencia Sem schema/tipo
  • 5. NoSQL? Persistencia ou RAM Objeto Tabular Tupla Documento Imagem Chave/Valor Hierarquico/Estruturado
  • 6. NoSQL? Geracao web RDBMS nao eh arquitetura padrao Centralizar? Consistencia? Fail-over? Backup/recovery? Uso como cache: mais disco, mais memoria
  • 7. NoSQL? CAP Consistencia: nem sempre o dado visualizado eh o mais atual Disponibilidade: sempre no ar, rapido e otima resposta Particionamento: o sistema opera mesmo perdendo dados Disponibilidade versus consistencia Latencia versus consistencia Centralizacao versus particionamento
  • 8. Redis Em memoria e persistencia Tipos de dados: Strings, Lists, Sets e SortedSets Atomico Clientes para varias linguagens Master/Slave Sharding manual Configuracao, gerenciamento e instalacao simples
  • 9. Redis Instalacao: download, unpack, make Servidor: ./redis-server Cliente(teste): ./redis-cli set key value; ./redis-cli get key
  • 10. MongoDB Muitas funcionalidades, grandes cases Orientado a documentos estilo JSON Indexacao de atributos Auto Sharding, Resharding, Replicacao, Alta Disponibilidade Muitas facilidades para consulta Atualizacoes de documentos ou dados pontuais internos Map Reduce
  • 11. MongoDB Online shell e tutorial em http://www.mongodb.org/#
  • 12. MongoDB Instalacao: binarios ou via compilacao de fontes Servidor: ./mongod Cliente(teste): ./mongo Salvando dados: db.foo.save( { a : 1 } ) Lendo dados: db.foo.find() Consultas: db.foo.find( { $or : [ { a : 1 } , { b : 2 } ] } )
  • 13. CouchDB JSON Javascript RESTful API Escrito em Erlang Indexavel Suporte a consultas Distribuido e replicavel
  • 14. CouchDB Views Schema free Javascript Map/Reduce Versionamento BLOB
  • 15. CouchDB Instalacao: unpack; ./configure; make; sudo make install Servidor: sudo -u couchdb ./couchdb Teste: http://localhost:5984/_utils Cliente: curl http://localhost:5984 # {"couchdb":"Welcome"}
  • 16. CouchDB Requisicao HTTP RESTful PUT PUT /example/some_doc_id HTTP/1.0 Content-Length: 29 Content-Type: application/json {"greetings":"Hello, World!"} Resposta HTTP HTTP/1.0 201 Created Server: CouchDB/0.9.0 (Erlang OTP/R12B) Etag: "1-518824332" Date: Wed, 24 Jun 2009 13:33:11 GMT Content-Type: text/plain;charset=utf-8 Content-Length: 51 Cache-Control: must-revalidate {"ok":true,"id":"some_doc_id","rev":"1-518824332"}
  • 17. CouchDB Requisicao HTTP RESTful GET(via browser) http://localhost:5984/example/some_doc_id Resposta HTTP(via browser) {"_id":"some_doc_id","_rev":"1-518824332","greetings":"Hello, World!"}
  • 18. Memcached Em memoria apenas Chave/valor Suporte a timeout Reciclavel usando LRU Toda a logica de hashing, sharding e particionamento no cliente Protocolo binario ou texto. Em texto vc pode usar comandos via telnet.
  • 19. Memcached Valores de ateh 1Mb stats atomico sem: autenticacao, failover, replicacao
  • 20. Memcached Instalacao: unpack; ./configure; make; sudo make install Necessita de libevent Servidor: ./memcached -d -m 4096 -p 11212 Cliente: function get_foo(foo_id) foo = memcached_get("foo:" . foo_id) return foo if defined foo foo = fetch_foo_from_database(foo_id) memcached_set("foo:" . foo_id, foo) return foo end
  • 21. Cassandra Criado pelo Facebook, e usado em parte dele Baseado no Amazon Dynamo Usuarios: Digg, Reddit, Cisco Webex, Rackspace, Twitter Chave+valor Tipos dinamicos versionados com timestamp Atomicidade por chave Configuracao simples
  • 22. Cassandra MySQL: muito IO imprevisivel! Solucoes baseadas em arquivos precisam de lock! Armazenamento descentralizado Tolerante a falhas Elastico: adicione mais servidores a quente Escala horizontalmente
  • 23. Cassandra Disponibilidade e tolerancia a perda de particoes sobre consistencia(CAP) Consistencia configuravel Tradeoff: Consistencia versus Latencia Particionamento e replicacao baseado no Dynamo (Amazon) e modelo de dados estruturado(ColumnFamily) baseado no Bigtable(Google)
  • 24. Cassandra Administracao minima Sem ponto unico de falha Particionador configuravel Replicacao configuravel: quantidade, rack e site “aware” Gossip, messaging, bootstrap, compaction Memtable Monitoracao e ferramentas de administracao Commit log
  • 25. Cassandra Escritas: quorum(maioria) ou assincronas(1), sem leituras, posicionamento, rapida(0.12ms vs 300ms do MySQL), atomica, sempre garantida Leitura: memtable e +RAM, mais lenta que a escrita(15ms vs 350ms do MySQL), escala a bilhoes de linhas Consistencia: 1, quorum, all. Cuidado com a latencia!
  • 26. Cassandra Keyspace: grupo de chaves ou banco/schema Column: chave e valor ou tabela de uma coluna e linha
  • 27. Cassandra SuperColumn: mapa ou tabela de n colunas e uma linha apenas
  • 28. Cassandra ColumnFamily: lista de mapas ou tabela
  • 29. Cassandra SuperColumnFamily: grupos de SuperColumn usando chave
  • 30. Cassandra Configuravel em storage-conf.xml Ordenacao eh feita na insercao, usando o nome da coluna ColumnFamily CompareWith SuperColumn CompareSubcolumnsWith Tipos: BytesType, UTF8Type, LexicalUUIDType, TimeUUIDType, AsciiType, LongType
  • 31. Cassandra $CASSANDRA_HOME/conf/storage-conf.xml ClusterName AutoBootstrap Keyspace ColumnFamily ReplicaPlacementStrategy & EndPointSnitch: Unaware, Rack ou Datacenter ReplicationFactor
  • 32. Cassandra Autenticador Particionador: Random por padrao ou ordenado InitialToken: armazena chaves com token similar CommitLogDirectory DataFileDirectory Seed ListenAddress/StoragePort ThriftAddress/ThriftPort
  • 33. Cassandra Apache Thrift ConsistencyLevel: ZERO, ANY, ONE, QUORUM, ALL ColumnOrSuperColumn Column SuperColumn ColumnPath ColumnParent
  • 34. Cassandra SlicePredicate SliceRange KeyRange KeySlice Mutation Deletion
  • 36. ??? Obrigado! :) @julioviegas Engenheiro de Software