@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

Mais conteúdo relacionado

PPT
Qcon 2013 - Walmart Frontend Solution using Node.js
PDF
Alta Performance com Java
ODP
Performance em Java
PDF
PostgreSQL Ha
PDF
De 1 a 1.000.00 de usuários
PDF
Dicas para Turbinar o servidor de Aplicações JBoss 7
PDF
Vamos conversar sobre cache
PDF
Clusterização de Aplicações PHP
Qcon 2013 - Walmart Frontend Solution using Node.js
Alta Performance com Java
Performance em Java
PostgreSQL Ha
De 1 a 1.000.00 de usuários
Dicas para Turbinar o servidor de Aplicações JBoss 7
Vamos conversar sobre cache
Clusterização de Aplicações PHP

Mais procurados (20)

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

Destaque (6)

PDF
WPF123
PDF
Ecosistema spring a_plataforma_enterprise_jav
PPTX
La web
PPT
Aerodrome Surfaces English Spanish
PDF
Turbine sua carreira com redes sociais
PPT
Membina Blog dgn Blogger
WPF123
Ecosistema spring a_plataforma_enterprise_jav
La web
Aerodrome Surfaces English Spanish
Turbine sua carreira com redes sociais
Membina Blog dgn Blogger
Anúncio

Semelhante a NoSQL Livre (20)

PPT
CouchDB Presentation
PPT
Mongo Db - PHP Day Workshop
PDF
Mongo DB
PDF
Python e bancos NoSQL
PDF
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
PDF
Nosql4java
PDF
Fisl banco de dados no sql de código aberto
PDF
Introdução ao no sql e mongodb
PPTX
No sql Orientado a documento
ODP
NoSQL: onde, como e por quê? Cassandra e MongoDB
PPT
L'esprit de l'escalier
KEY
Django e MongoDB - Python Brasil 7
KEY
Utilizando NoSQL no desenvolvimento de soluções inteligentes
KEY
MongoDB - Apresentação
PDF
MAC5855 - NoSQL
PDF
Mongo db slides
PDF
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
PDF
MongoDB: introdução à sua próxima base de dados
KEY
MongoDB na Campus Party
PPT
Desenvolvendo soluções com banco de dados não relacional - MongoDB
CouchDB Presentation
Mongo Db - PHP Day Workshop
Mongo DB
Python e bancos NoSQL
2º Meritt CC - NoSQL - E o Futuro dos Bancos de Dados na Web
Nosql4java
Fisl banco de dados no sql de código aberto
Introdução ao no sql e mongodb
No sql Orientado a documento
NoSQL: onde, como e por quê? Cassandra e MongoDB
L'esprit de l'escalier
Django e MongoDB - Python Brasil 7
Utilizando NoSQL no desenvolvimento de soluções inteligentes
MongoDB - Apresentação
MAC5855 - NoSQL
Mongo db slides
TDC2015 - Apache Cassandra no Desenvolvimento de Sistemas de Alto Desempenho
MongoDB: introdução à sua próxima base de dados
MongoDB na Campus Party
Desenvolvendo soluções com banco de dados não relacional - MongoDB

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