Python e bancos NoSQL

  • 2,268 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,268
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
48
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Python com bancos de dados NoSQL Marinho Brandão, FLISOL 2010, Goiânia
  • 2. Quem é o palestrante
  • 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. O que é NoSQL?
  • 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. Alguns bancos NoSQL  CouchDB  Google BigTable  MongoDB  Amazon SimpleDB  Redis  Db4o  MemcacheDB  Caché  Tokyo Cabinet  Hbase  HyperTable  etc.  ZoDB
  • 7. CouchDB
  • 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. 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. 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. MongoDB s
  • 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. 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. Redis
  • 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. 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. 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. Perguntas? Marinho Brandão marinho@gmail.com http://www.marinhobrandao.com http://www.aprendendodjango.com