Python com bancos de dados NoSQL




   Marinho Brandão, FLISOL 2010, Goiânia
Quem é o palestrante
Quem é o palestrante

   É pragmático
   Desenvolvedor há 14 anos
   Autônomo, consultor e desenvolvedor
   Co-fundado...
O que é NoSQL?
O que é NoSQL?

   Também chamados de MRMM e schemaless
   Documentos, key/value, objetos, XML
   Oferecem vantagens pa...
Alguns bancos NoSQL

   CouchDB            Google BigTable
   MongoDB            Amazon SimpleDB
   Redis           ...
CouchDB
CouchDB

   Parte da Apache Foundation
   Suporta conexões assíncronas e REST
   Escrito em Erlang
   Armazena documen...
Exemplo: create, update e FK
   Exemplo de código que cria um documento, atualiza e faz um
                        relacio...
Exemplo: Pseudo-Modelos
from couchdb.client import Server, PreconditionFailed
from couchdb.schema import Document, TextFie...
MongoDB




          s
MongoDB

   Escrito em C
   Possui uma camada na memória antes de
    persistir
   Boa performance
   Armazena BSON em...
Exemplo: removendo, criando, carregando
  Exemplo de remoção de namespace, criação e carregamento
      de documentos com ...
Redis
Redis

   Escrito em C
   Trabalha como uma camada de cache em
    memória, mas mantém persistência em disco
   Armazen...
Exemplo: registros persistentes ou que expiram
   Exemplo de funcionalidades básicas do Redis, incluindo
                 ...
Referências
   http://en.wikipedia.org/wiki/NoSQL
   http://couchdb.apache.org/
   http://www.mongodb.org/
   http://c...
Perguntas?




             Marinho Brandão

             marinho@gmail.com
      http://www.marinhobrandao.com
     http:...
Upcoming SlideShare
Loading in …5
×

Python e bancos NoSQL

2,546 views
2,432 views

Published on

Slides da palestra sobre Python com bancos de dados NoSQL no FLISOL de Goiânia, 2010

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,546
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
48
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Python e bancos NoSQL

  1. 1. Python com bancos de dados NoSQL Marinho Brandão, FLISOL 2010, Goiânia
  2. 2. Quem é o palestrante
  3. 3. Quem é o palestrante  É pragmático  Desenvolvedor há 14 anos  Autônomo, consultor e desenvolvedor  Co-fundador da comunidade Django brasileira  Autor do Geraldo Reports  Programador Python do Ano em 2009  Estudando Automação Industrial
  4. 4. O que é NoSQL?
  5. 5. O que é NoSQL?  Também chamados de MRMM e schemaless  Documentos, key/value, objetos, XML  Oferecem vantagens para escalar horizontalmente  Não possuem modelo rígido  Evita todo tipo normalização  Evita transações ACID (atomicidade, consistência, isolamento e durabilidade)  Alguns suportam conexão assíncrona e REST  Muito utilizados como apoio a RDBMS  Melhor adaptados à nuvem
  6. 6. Alguns bancos NoSQL  CouchDB  Google BigTable  MongoDB  Amazon SimpleDB  Redis  Db4o  MemcacheDB  Caché  Tokyo Cabinet  Hbase  HyperTable  etc.  ZoDB
  7. 7. CouchDB
  8. 8. CouchDB  Parte da Apache Foundation  Suporta conexões assíncronas e REST  Escrito em Erlang  Armazena documentos JSON independentes  Um dos mais elegantes, mas ainda é lento  Suporta requisições HTTP e JavaScript  Replicação consistente  Adotado pelo Ubuntu 9.10
  9. 9. Exemplo: create, update e FK Exemplo de código que cria um documento, atualiza e faz um relacionamento # -*- coding: utf-8 -*- from couchdb.client import Server conexao = Server('http://localhost:5984') db = conexao['palestra'] marinho_id = db.create({'nome': u'Marinho', 'idade': 28}) marinho = db[marinho_id] leticia_id = db.create({'nome': 'Leticia', 'idade': 29, 'esposo': marinho_id}) leticia = db[leticia_id] marinho['esposa'] = leticia_id db[marinho_id] = marinho print db[leticia_id], db[marinho_id]
  10. 10. Exemplo: Pseudo-Modelos from couchdb.client import Server, PreconditionFailed from couchdb.schema import Document, TextField, IntegerField, ListField conexao = Server('http://localhost:5984') try: db = conexao.create('palestra') except PreconditionFailed: del conexao['palestra']; db = conexao.create('palestra') class Pessoa(Document): nome = TextField() idade = IntegerField() filhos = ListField(TextField) tarsila = Pessoa(nome='Tarsila', idade=4, id='1'); tarsila.store(db) linus = Pessoa(nome='Linus', idade=0, id='2'); linus.store(db) marinho = Pessoa(nome=u'Marinho', idade=28, filhos=[tarsila.id, linus.id]) marinho.store(db) leticia = Pessoa(nome=u'Leticia', idade=29, filhos=[tarsila, linus]) leticia.store(db) for obj_id in db: print db[obj_id]['nome']
  11. 11. MongoDB s
  12. 12. MongoDB  Escrito em C  Possui uma camada na memória antes de persistir  Boa performance  Armazena BSON em namespaces  Não suporta conexões assíncronas  Suporta REST  Bom suporte a sharding e replicação
  13. 13. Exemplo: removendo, criando, carregando Exemplo de remoção de namespace, criação e carregamento de documentos com referencia a outro documento. # -*- coding: utf-8 -*- from pymongo.connection import Connection conexao = Connection(host='localhost', port=27017) ns = conexao.palestra.pessoas ns.remove() mar_id = ns.save({'nome': u'Marinho', 'idade': 28}) mar = ns.find_one({'_id': mar_id}) let_id = ns.save({'nome': 'Leticia', 'idade': 29, 'esposo': mar_id}) let = ns.find_one({'_id': let_id}) for p in ns.find(): e = 'esposo' in p and ns.find_one({'_id': p['esposo']}) or None print 'Nome:', p['nome'], e and 'Esposo(a): ' + e['nome'] or ''
  14. 14. Redis
  15. 15. Redis  Escrito em C  Trabalha como uma camada de cache em memória, mas mantém persistência em disco  Armazena valores com tipagem estática  Performance excelente  Quase nenhum recurso para cálculos  Bom suporte a sharding e replicação
  16. 16. Exemplo: registros persistentes ou que expiram Exemplo de funcionalidades básicas do Redis, incluindo registros que expiram # -*- coding: utf-8 -*- import redis, time con = redis.Redis('localhost', db=1) mar_id = '00001'; let_id = '00002' print 'nAntes:', 'nt', con.get(mar_id), 'nt', con.get(let_id) con.set(mar_id, {'nome': u'Marinho', 'idade': 28}) con.set(let_id, {'nome': 'Leticia', 'idade': 29, 'esposo': mar_id}) con.expire(let_id, 5) # segundos para expirar print 'nGravou:', 'nt', con.get(mar_id), 'nt', con.get(let_id) time.sleep(7) print 'nExpirou:', 'nt', con.get(mar_id), 'nt', con.get(let_id) con.disconnect()
  17. 17. Referências  http://en.wikipedia.org/wiki/NoSQL  http://couchdb.apache.org/  http://www.mongodb.org/  http://code.google.com/p/redis/  http://groups.google.com/group/MRNN-Brasil  http://nosql.mypopescu.com/post/276069660/nosql-libraries  http://labs.mudynamics.com/wp-content/uploads/2009/04/icouch.html  http://bret.appspot.com/entry/how-friendfeed-uses-mysql  http://blog.boxedice.com/2009/07/25/choosing-a-non-relational-database-why-we- migrated-from-mysql-to-mongodb/  http://code.google.com/p/redis/wiki/IntroductionToRedisDataTypes  http://escalabilidade.com/2010/03/08/introducao-ao-nosql-parte-i/
  18. 18. Perguntas? Marinho Brandão marinho@gmail.com http://www.marinhobrandao.com http://www.aprendendodjango.com

×