the real time webNoSQL para soluções inteligentes                   Christiano Anderson                   diretor de desen...
Sobre o palestrante● Trabalha com software livre desde 1995;● Sócio fundador da Nodeware;● Ex-desenvolvedor do Projeto GNU...
Sobre a Nodeware● Empresa nova, mas com corpo técnico atuante  desde o início da internet comercial no Brasil;● Foco em so...
NoSQL???? WTF?● Termo criado por Carlo Strozzi  e Eric Evans, como referência a um  tipo de armazenamento de dados;● O uso...
NoSQL?        "Non-relational next generation     operational datastores anda databases"                  Dwight Merriman ...
NoSQL?    “NoSQL is a movement promoting a loosely  defined class of non-relational data stores that break with a long his...
Por que usar NoSQL?● É uma questão de escolhas e novos paradigmas     (na verdade, nem tão novos assim);● É uma questão de...
Para que usar NoSQL?● Para trabalhar com quantidade enorme de  dados que...                        sim, enorme é          ...
Tipos de Bancos Não RelacionaisTwitter: @dump
Orientação a documentos● Os dados são estruturados de forma encadeada,  podendo ser coleções, tags, metadados,  hierarquia...
Bancos orientados a documento                           Entre outros....Twitter: @dump
GrafosTwitter: @dump
Grafos● Estrutura de nós, bordas e propriedades para  representar e associar hierarquia de dados;● Todo elemento possui um...
Exemplos de bancos orientados a GrafosTwitter: @dump
Chave/ValorTwitter: @dump
Chave/Valor (K/V)● Quase todos os bancos não relacionais possuem  um pouco de conceito chave/valor;● Conceito é utilizado ...
Exemplos de bancos Chave/Valor                         MemcacheDB                       Amazon SimpleDBTwitter: @dump
São muitas opções, qual deles é melhor?Twitter: @dump
Qual das ferramenta abaixo é a melhor?Twitter: @dump
RespostaDepende do que você vai fazer. As vezes pode sernecessário usar mais de uma ferramenta!Twitter: @dump
Motivos para considerar o uso de NoSQL●    Se possui enorme quantidade de dados;●    Se precisa de performance na escrita;...
E por onde eu começo?● O primeiro passo é avaliar uma solução e suas  necessidades e dependências;● O MongoDB pode ser um ...
Do que você deve fugir● Nunca, mas nunca pense em modelagem  relacional enquanto estiver trabalhando com  NoSQL, você pode...
Falando de MongoDB, considere se...● Você está usando muito cache em sua aplicação;● Muitos arquivos estáticos estão sendo...
O MongoDB substitui o banco relacional?● Pode substituir, mas como já foi explicado, é     uma questão de escolha;● Uma ap...
Novidades do MongoDB● A próxima versão (2.3.4) terá suporte a busca     textual;● Suporte a stemming, negação, aproximação...
Full Text Search: Stopwords"Eu sou seu pai, Luke"Palavras que importam na busca: "pai, Luke"eu, sou, seu = stopwordsTwitte...
Full Text Search: StemmingO Stemming identifica e considera a raiz de umapalavra na busca para torna-la mais precisa;     ...
Full Text Search - Mais exemplos e como fazerBons exemplos de como fazer busca textual noMongoDB, por enquanto, disponível...
Plataformas de desenvolvimento● O MongoDB e outros bancos NoSQL suportam  praticamente todas as linguagens de  programação...
Modelo de documentoA base de um documento MongoDB consiste em:                 {nome:Christiano,                 sobrenome...
Comparando com SQL                       SQL                            MongoDB           INSERT INTO USERS VALUES(1,1)   ...
Comparando com SQL 2                      SQL                                    MongoDB         SELECT * FROM users WHERE...
Replica sets● Facilidade em espelhar o banco em vários  servidores;● Possibilita crescer o ambiente de forma  orgânica;● R...
Sharding● Sharding é um conceito usado para "fatiar"  dados entre vários servidores, exemplo:     ○ Servidor 1 possui usuá...
Desenvolvendo com MongoDB● Como já foi explicado, o MongoDB possui  suporte para quase todas as linguagens de  programação...
Pymongo● Módulo responsável pela conexão ao MongoDB;● Pode ser instalado facilmente:     ○ pip install pymongo● Possui uma...
Estabelecendo uma conexão>>> from pymongo import Connection>>> con = Connection("localhost")>>> db = con[blog]Twitter: @dump
Inserindo um documento>>> post = {title:Meu primeiro post,            author:Christiano Anderson,            contents:Aqui...
Inserindo vários documentos>>> other_posts = [{title:Second Post, author: ChristianoAnderson,tags:[test], content: Hey, my...
Realizando pesquisas>>> my_post = db.posts.find_one({}){ucontent: uThis is my first post at MongoDB, utitle: uMyfirst post...
Listando todos os documentos>>> all_posts = db.posts.find({})>>> for p in all_posts:    ... print p[title]    My first pos...
Filtros como parâmetros>>> p = db.posts.find_one({tags:naboo}){ucontent: uHey princess Leya, utitle: uThird Post, u_id:Obj...
Operadores● Também é possível utilizar operadores como  filtro de busca, exemplo:     ○    $ne     ○    $lte, $gte     ○  ...
Map/Reduce● O MongoDB suporta nativamente Map Reduce;● Utiliza JavaScript como linguagem;● Serve para buscar, processar e ...
Exemplo de map reduce no MongoDBfunction() {   this.tags.forEach(function(z)) {        emit(z, 1);   });}function(key, val...
Falando um pouco de RiakTwitter: @dump
Introdução● Implementado pela Basho, seguindo os papers     do Amazon DynamoDB;● Escrito em Erlang;● Altamente escalável;●...
Buckets● Riak utiliza conceito de "buckets" para     armazenar dados;● Podem ser comparados a pastas ou tabelas;Twitter: @...
Exemplo Python e Riakimport riakclient = riak.RiakClient()bucket = client.bucket(pessoas)p = bucket.new(anderson, data = {...
Riak - Consulta ao bancoimport riakclient = riak.RiakClient()bucket = client.bucket(pessoas)u = bucket.get(anderson)print ...
Outros bancosEu gostaria de falar de outros bancos, mas o tempoacabou! :-(Twitter: @dump
Boas fontes de informação● http://nosql.mypopescu.com/● http://nosql-database.org/● http://christiano.me● @dump @al3xandru...
Perguntas?Twitter: @dump
Obrigado!!!!  Se não deu tempo de responder sua dúvida durante a  palestra, me pare no corredor ou entre em contato:      ...
Upcoming SlideShare
Loading in...5
×

Palestra nosql

766

Published on

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
766
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
17
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Palestra nosql

  1. 1. the real time webNoSQL para soluções inteligentes Christiano Anderson diretor de desenvolvimento anderson@nodeware.com.br Twitter: @dump / @nodeware Blog: http://christiano.me
  2. 2. Sobre o palestrante● Trabalha com software livre desde 1995;● Sócio fundador da Nodeware;● Ex-desenvolvedor do Projeto GNU;● Trabalha com Python desde 2000;● Evangelista NoSQL, Django e Node.JS● Colabora com equipe de tradução do MongoDB;● Fundador do MUG-SPTwitter: @dump
  3. 3. Sobre a Nodeware● Empresa nova, mas com corpo técnico atuante desde o início da internet comercial no Brasil;● Foco em soluções emergentes, nuvem, NoSQL, Node.JS, georreferenciamento e CMS;● Parceira 10gen, Amazon AWS;● Conheça mais em http://www.nodeware.com.brTwitter: @dump
  4. 4. NoSQL???? WTF?● Termo criado por Carlo Strozzi e Eric Evans, como referência a um tipo de armazenamento de dados;● O uso recomendado é Not Only SQL e nunca deve ser usado como Não- SQL ou Never SQL;● O movimento NoSQL é distinto do modelo relacional, o termo NonREL também é bastante apropriado nessa definição;Twitter: @dump
  5. 5. NoSQL? "Non-relational next generation operational datastores anda databases" Dwight Merriman CEO - 10genTwitter: @dump
  6. 6. NoSQL? “NoSQL is a movement promoting a loosely defined class of non-relational data stores that break with a long history of relational databases. These data stores may not require fixed table schemas, usually avoid join operations andtypically scale horizontally. Academics and papers typically refer to these databases as structured storage.” WikipediaTwitter: @dump
  7. 7. Por que usar NoSQL?● É uma questão de escolhas e novos paradigmas (na verdade, nem tão novos assim);● É uma questão de funcionalidades;● É uma questão de performance e escalabilidade;● Não tem nada relacionado ao ódio ao modelo SQL;Twitter: @dump
  8. 8. Para que usar NoSQL?● Para trabalhar com quantidade enorme de dados que... sim, enorme é muito relativo ○ ... crescem exponencialmente; ○ ... agregam muitos outros valores dinamicamente; ○ ... não necessitam de modelagem de dados; ○ ... não possuem dependência a bancos relacionais, mas podem trabalhar em conjunto com um;Twitter: @dump
  9. 9. Tipos de Bancos Não RelacionaisTwitter: @dump
  10. 10. Orientação a documentos● Os dados são estruturados de forma encadeada, podendo ser coleções, tags, metadados, hierarquias de informações, etc;● Bom para aplicações de conteúdo, gerenciar logs, análise estatísticas, etc;● Exemplo de documento: {nome:Christiano,evento:Campus Party}Twitter: @dump
  11. 11. Bancos orientados a documento Entre outros....Twitter: @dump
  12. 12. GrafosTwitter: @dump
  13. 13. Grafos● Estrutura de nós, bordas e propriedades para representar e associar hierarquia de dados;● Todo elemento possui um apontamento direto para outro elemento adjacente;● Excelente para mídias sociais, determinar relacionamento entre dados, BI, etc;Twitter: @dump
  14. 14. Exemplos de bancos orientados a GrafosTwitter: @dump
  15. 15. Chave/ValorTwitter: @dump
  16. 16. Chave/Valor (K/V)● Quase todos os bancos não relacionais possuem um pouco de conceito chave/valor;● Conceito é utilizado para armazenar dados que não necessitam de uma modelagem prévia;● Os dados podem também estar em colunas;● A persistência dos dados pode estar em disco ou memória RAM;● A Escalabilidade de bancos orientados a K/V costuma ser bem simples e eficiente;Twitter: @dump
  17. 17. Exemplos de bancos Chave/Valor MemcacheDB Amazon SimpleDBTwitter: @dump
  18. 18. São muitas opções, qual deles é melhor?Twitter: @dump
  19. 19. Qual das ferramenta abaixo é a melhor?Twitter: @dump
  20. 20. RespostaDepende do que você vai fazer. As vezes pode sernecessário usar mais de uma ferramenta!Twitter: @dump
  21. 21. Motivos para considerar o uso de NoSQL● Se possui enorme quantidade de dados;● Se precisa de performance na escrita;● Se precisa escalar com facilidade;● Se não precisa trabalhar com modelo SQL;● Se a modelagem pode ser flexível;● Para migrar dados facilmente;● Se deseja facilidade de administrar;● Pode ser usado na nuvem;● Se deseja não ter um ponto único de falha;● Se busca agilidade no desenvolvimento...Twitter: @dump
  22. 22. E por onde eu começo?● O primeiro passo é avaliar uma solução e suas necessidades e dependências;● O MongoDB pode ser um ótimo começo, sua curva de aprendizado é baixa e o banco é muito flexível;● Conheça todas as features do MongoDB antes de fazer o plano de projeto;● Escolha uma boa linguagem de programação. Python, Java, Node.JS, Ruby e PHP são ótimas escolhas para qualquer projeto.Twitter: @dump
  23. 23. Do que você deve fugir● Nunca, mas nunca pense em modelagem relacional enquanto estiver trabalhando com NoSQL, você poderá engessar sua aplicação!● O código não pode ficar amarrado a uma modelagem, deve ser o mais flexível possível;● Basicamente fugindo dessas duas ciladas, a chance de sucesso é grande.Twitter: @dump
  24. 24. Falando de MongoDB, considere se...● Você está usando muito cache em sua aplicação;● Muitos arquivos estáticos estão sendo armazenados na sua aplicação;● Se necessita de processamento em tempo real;● Se você gosta de desenvolvimento ágil (SCRUM);● Se tem dificuldade para modelar sua aplicação no modelo convencional relacional;● Se faz muita leitura/gravação de dados;Twitter: @dump
  25. 25. O MongoDB substitui o banco relacional?● Pode substituir, mas como já foi explicado, é uma questão de escolha;● Uma aplicação pode usar MongoDB em conjunto com um banco relacional sem nenhum problema. Tudo vai depender da sua aplicação;Twitter: @dump
  26. 26. Novidades do MongoDB● A próxima versão (2.3.4) terá suporte a busca textual;● Suporte a stemming, negação, aproximação, busca por frases, suporte a prefixos e sufixos;● É uma novidade muito esperada e reforça o MongoDB como uma solução completa de NoSQL;Twitter: @dump
  27. 27. Full Text Search: Stopwords"Eu sou seu pai, Luke"Palavras que importam na busca: "pai, Luke"eu, sou, seu = stopwordsTwitter: @dump
  28. 28. Full Text Search: StemmingO Stemming identifica e considera a raiz de umapalavra na busca para torna-la mais precisa; "fazendo, feito, fazer, faz"Twitter: @dump
  29. 29. Full Text Search - Mais exemplos e como fazerBons exemplos de como fazer busca textual noMongoDB, por enquanto, disponível apenas naversão em desenvolvimento: bit.ly/12cABWsTwitter: @dump
  30. 30. Plataformas de desenvolvimento● O MongoDB e outros bancos NoSQL suportam praticamente todas as linguagens de programação;● Oficialmente, o MongoDB suporta linguagens como: ○ C, C++, Erlang, Haskell, Java, JavaScript, Python, PHP, Perl, .NET, Ruby, Scala, Go Language, Node.JS, LISP, Lua, SmallTalk...● Mais em http://www.mongodb. org/display/DOCS/DriversTwitter: @dump
  31. 31. Modelo de documentoA base de um documento MongoDB consiste em: {nome:Christiano, sobrenome:Anderson, email:anderson@nodeware.com.br, nota: 10} Sim, é praticamente um json!Twitter: @dump
  32. 32. Comparando com SQL SQL MongoDB INSERT INTO USERS VALUES(1,1) db.users.insert({a:1, b:1}) SELECT a,b FROM users db.users.find({}, {a: 1, b: 1}) SELECT * FROM users db.users.find() SELECT * FROM users WHERE age=33 db.users.find({age: 33}) SELECT * FROm users WHERE name = db.users.find({name:”pedro”}) “pedro”Twitter: @dump
  33. 33. Comparando com SQL 2 SQL MongoDB SELECT * FROM users WHERE age=33 db.users.find({‘age’:33}).sort ORDER BY name ({name:1}) SELECT * FROM users WHERE age < 33 db.users.find({‘age’:{$lt:33}})}) CREATE INDEX myindexname ON user db.users.ensureIndex({name:1}) (name) SELECT * FROM users WHERE a = 1 AND db.users.find({a:1, b:’q’}) b = ‘q’ SELECT * FROM users LIMIT 10 SKIP 20 db.users.find().limit(10).skip(20)Twitter: @dump
  34. 34. Replica sets● Facilidade em espelhar o banco em vários servidores;● Possibilita crescer o ambiente de forma orgânica;● Replica sets consiste em dois ou mais nós que replicam dados entre si, semelhante ao MySQL cluster (conceito de master, slaves);Twitter: @dump
  35. 35. Sharding● Sharding é um conceito usado para "fatiar" dados entre vários servidores, exemplo: ○ Servidor 1 possui usuários da letra A até a letra F; ○ Servidor 2 possui usuários da letra G até a letra L; ○ Servidor 3 possui usuáriso da letra M até a letra Z;● É possível adicionar novos nodes facilmente sem parar o sistema;● Possível escalar centenas de servidores nesse layout;● Não possui ponto único de falha e faz failover automático;Twitter: @dump
  36. 36. Desenvolvendo com MongoDB● Como já foi explicado, o MongoDB possui suporte para quase todas as linguagens de programação;● Desenvolver utilizando um modelo NoSQL é um novo paradigma e atribui mais poder ao programador;● Os exemplos a seguir serão demonstrados em Python;Twitter: @dump
  37. 37. Pymongo● Módulo responsável pela conexão ao MongoDB;● Pode ser instalado facilmente: ○ pip install pymongo● Possui uma ótima documentação e é muito estável.Twitter: @dump
  38. 38. Estabelecendo uma conexão>>> from pymongo import Connection>>> con = Connection("localhost")>>> db = con[blog]Twitter: @dump
  39. 39. Inserindo um documento>>> post = {title:Meu primeiro post, author:Christiano Anderson, contents:Aqui vem o corpo do post, tags:[mongodb,blog,examples]}>>> posts = db[posts]>>> posts.insert(post)ObjectId(4cb662f508bf532b1b000000)Twitter: @dump
  40. 40. Inserindo vários documentos>>> other_posts = [{title:Second Post, author: ChristianoAnderson,tags:[test], content: Hey, my second Post},{title:Third Post, author:Luke Skywalker,tags:[naboo],content:Hey princess Leya}]>>> posts.insert(other_posts) [ObjectId(4cb6651b08bf532b97000000), ObjectId(4cb6651b08bf532b97000001)]Twitter: @dump
  41. 41. Realizando pesquisas>>> my_post = db.posts.find_one({}){ucontent: uThis is my first post at MongoDB, utitle: uMyfirst post, u_id: ObjectId(4cb662f508bf532b1b000000), utags:[umongodb, ublog, uexample], uauthor: uChristianoAnderson}>>> my_post = db.posts.find_one({ author: ChristianoAnderson})Twitter: @dump
  42. 42. Listando todos os documentos>>> all_posts = db.posts.find({})>>> for p in all_posts: ... print p[title] My first post Second Post Third PostTwitter: @dump
  43. 43. Filtros como parâmetros>>> p = db.posts.find_one({tags:naboo}){ucontent: uHey princess Leya, utitle: uThird Post, u_id:ObjectId(4cb6651b08bf532b97000001), utags: [unaboo],uauthor: uLuke Skywalker}Twitter: @dump
  44. 44. Operadores● Também é possível utilizar operadores como filtro de busca, exemplo: ○ $ne ○ $lte, $gte ○ $and ○ $in, $nin ○ $size ○ $or, $nor, etc● Lista completa em http://www.mongodb. org/display/DOCS/Advanced+QueriesTwitter: @dump
  45. 45. Map/Reduce● O MongoDB suporta nativamente Map Reduce;● Utiliza JavaScript como linguagem;● Serve para buscar, processar e extrair resultados em um conjunto grande de dados;Twitter: @dump
  46. 46. Exemplo de map reduce no MongoDBfunction() { this.tags.forEach(function(z)) { emit(z, 1); });}function(key, value) { var total = 0; for(var i = 0; i < values.length; i++) { total += values[i]; } return total;}Twitter: @dump
  47. 47. Falando um pouco de RiakTwitter: @dump
  48. 48. Introdução● Implementado pela Basho, seguindo os papers do Amazon DynamoDB;● Escrito em Erlang;● Altamente escalável;● Modelo baseado em Chave/Valor (K/V);● É possível plugar busca textual no estilo Sorl/Lucene;Twitter: @dump
  49. 49. Buckets● Riak utiliza conceito de "buckets" para armazenar dados;● Podem ser comparados a pastas ou tabelas;Twitter: @dump
  50. 50. Exemplo Python e Riakimport riakclient = riak.RiakClient()bucket = client.bucket(pessoas)p = bucket.new(anderson, data = { nome: Christiano Anderson, empresa: Nodeware, email: ‘anderson@nodeware.com.br’, })p.store()Twitter: @dump
  51. 51. Riak - Consulta ao bancoimport riakclient = riak.RiakClient()bucket = client.bucket(pessoas)u = bucket.get(anderson)print u.get_data(){uidade: 33, uempresa: uNodeware 3, unome: uChristiano Anderson}Twitter: @dump
  52. 52. Outros bancosEu gostaria de falar de outros bancos, mas o tempoacabou! :-(Twitter: @dump
  53. 53. Boas fontes de informação● http://nosql.mypopescu.com/● http://nosql-database.org/● http://christiano.me● @dump @al3xandruTwitter: @dump
  54. 54. Perguntas?Twitter: @dump
  55. 55. Obrigado!!!! Se não deu tempo de responder sua dúvida durante a palestra, me pare no corredor ou entre em contato: Christiano Anderson anderson@nodeware.com.br http://christiano.me @dumpTwitter: @dump
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×