SlideShare uma empresa Scribd logo
1 de 18
Baixar para ler offline
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-fundador da comunidade Django brasileira
   Autor do Geraldo Reports
   Programador Python do Ano em 2009
   Estudando Automação Industrial
O que é NoSQL?
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
Alguns bancos NoSQL

   CouchDB            Google BigTable
   MongoDB            Amazon SimpleDB
   Redis              Db4o
   MemcacheDB         Caché
   Tokyo Cabinet      Hbase
   HyperTable         etc.
   ZoDB
CouchDB
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
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]
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']
MongoDB




          s
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
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 ''
Redis
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
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()
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/
Perguntas?




             Marinho Brandão

             marinho@gmail.com
      http://www.marinhobrandao.com
     http://www.aprendendodjango.com

Mais conteúdo relacionado

Mais procurados

Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQlCezar Souza
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantesEduardo Mendes
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdoJorge Luís Gregório
 
PDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTOPDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTOPerla Coutinho Barbosa
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHPLeonardo Soares
 
Qualidade e performance de sistemas 2.0
Qualidade e performance de sistemas 2.0Qualidade e performance de sistemas 2.0
Qualidade e performance de sistemas 2.0Ivo Nascimento
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasRodrigo Branas
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineOtávio Calaça Xavier
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmGuilherme Blanco
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - BrazilStephen Chin
 
Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)guestcc491
 
Mongo DB
Mongo DBMongo DB
Mongo DBdist_bp
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCLuiz Ricardo Silva
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasRodrigo Branas
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotationeduardo dias
 

Mais procurados (20)

Minicurso PostgreSQl
Minicurso PostgreSQlMinicurso PostgreSQl
Minicurso PostgreSQl
 
PHP e MySQL para iniciantes
PHP e MySQL para iniciantesPHP e MySQL para iniciantes
PHP e MySQL para iniciantes
 
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
Dsi   015 - poo e php - conexão com bancos de dados usando pdoDsi   015 - poo e php - conexão com bancos de dados usando pdo
Dsi 015 - poo e php - conexão com bancos de dados usando pdo
 
Palestra cbq
Palestra cbqPalestra cbq
Palestra cbq
 
PDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTOPDO: TRABALHANDO COM BANCO DO JEITO CERTO
PDO: TRABALHANDO COM BANCO DO JEITO CERTO
 
Banco de dadados MySQL com PHP
Banco de dadados MySQL com PHPBanco de dadados MySQL com PHP
Banco de dadados MySQL com PHP
 
Maonamassa Pga
Maonamassa PgaMaonamassa Pga
Maonamassa Pga
 
Prog web 05-php-mysql
Prog web 05-php-mysqlProg web 05-php-mysql
Prog web 05-php-mysql
 
Qualidade e performance de sistemas 2.0
Qualidade e performance de sistemas 2.0Qualidade e performance de sistemas 2.0
Qualidade e performance de sistemas 2.0
 
Node.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo BranasNode.js - #5 - Process - Rodrigo Branas
Node.js - #5 - Process - Rodrigo Branas
 
Abstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP DoctrineAbstração do banco de dados com PHP Doctrine
Abstração do banco de dados com PHP Doctrine
 
Desenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine OrmDesenvolvimento Agil Com Doctrine Orm
Desenvolvimento Agil Com Doctrine Orm
 
Python 04
Python 04Python 04
Python 04
 
55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil55 New Things in Java 7 - Brazil
55 New Things in Java 7 - Brazil
 
Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)Apostila Curso Php My Sql(Portugues)
Apostila Curso Php My Sql(Portugues)
 
Mongo DB
Mongo DBMongo DB
Mongo DB
 
Acesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBCAcesso a Banco de Dados em Java usando JDBC
Acesso a Banco de Dados em Java usando JDBC
 
Node.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo BranasNode.js - #3 - Global Objects - Rodrigo Branas
Node.js - #3 - Global Objects - Rodrigo Branas
 
hibernate annotation
hibernate annotationhibernate annotation
hibernate annotation
 
PHP Básico - Parte 4
PHP Básico - Parte 4PHP Básico - Parte 4
PHP Básico - Parte 4
 

Destaque

Broadcast and Cable 2011 - Desenvolvimento de aplicativos para TV's Conetadas
Broadcast and Cable 2011 - Desenvolvimento de aplicativos para TV's ConetadasBroadcast and Cable 2011 - Desenvolvimento de aplicativos para TV's Conetadas
Broadcast and Cable 2011 - Desenvolvimento de aplicativos para TV's ConetadasMaxwell Dayvson Da Silva
 
Building a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesBuilding a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesMaxwell Dayvson Da Silva
 
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQLFISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQLMaxwell Dayvson Da Silva
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!Juliano Atanazio
 
Automatizando tarefas com Python
Automatizando tarefas com PythonAutomatizando tarefas com Python
Automatizando tarefas com Pythonpugpe
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e TkCarlos Campani
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionaisalexculpado
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolsoJean Lopes
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em PythonLuciano Ramalho
 
Progressive Web Apps: o melhor da Web appficada
Progressive Web Apps: o melhor da Web appficadaProgressive Web Apps: o melhor da Web appficada
Progressive Web Apps: o melhor da Web appficadaCaelum
 

Destaque (12)

Com vocês, Django!
Com vocês, Django!Com vocês, Django!
Com vocês, Django!
 
Broadcast and Cable 2011 - Desenvolvimento de aplicativos para TV's Conetadas
Broadcast and Cable 2011 - Desenvolvimento de aplicativos para TV's ConetadasBroadcast and Cable 2011 - Desenvolvimento de aplicativos para TV's Conetadas
Broadcast and Cable 2011 - Desenvolvimento de aplicativos para TV's Conetadas
 
Postgresql +python
Postgresql +pythonPostgresql +python
Postgresql +python
 
Building a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York TimesBuilding a Video Encoding Pipeline at The New York Times
Building a Video Encoding Pipeline at The New York Times
 
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQLFISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
FISL12 - Redis e as facilidades de trabalhar com um banco de dados NoSQL
 
Postgresql + Python = Power!
Postgresql + Python = Power!Postgresql + Python = Power!
Postgresql + Python = Power!
 
Automatizando tarefas com Python
Automatizando tarefas com PythonAutomatizando tarefas com Python
Automatizando tarefas com Python
 
Introdução à Programação Python e Tk
Introdução à Programação Python e TkIntrodução à Programação Python e Tk
Introdução à Programação Python e Tk
 
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados RelacionaisBanco de Dados Não Relacionais vs Banco de Dados Relacionais
Banco de Dados Não Relacionais vs Banco de Dados Relacionais
 
Python - Guia de bolso
Python - Guia de bolsoPython - Guia de bolso
Python - Guia de bolso
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Progressive Web Apps: o melhor da Web appficada
Progressive Web Apps: o melhor da Web appficadaProgressive Web Apps: o melhor da Web appficada
Progressive Web Apps: o melhor da Web appficada
 

Semelhante a Python e bancos NoSQL

Semelhante a Python e bancos NoSQL (20)

Conhecendo Ror
Conhecendo RorConhecendo Ror
Conhecendo Ror
 
MongoDB + PHP
MongoDB + PHPMongoDB + PHP
MongoDB + PHP
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
NoSQL Livre
NoSQL LivreNoSQL Livre
NoSQL Livre
 
Introducao rubyonrails
Introducao rubyonrailsIntroducao rubyonrails
Introducao rubyonrails
 
Desenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDBDesenvolvendo soluções com banco de dados não relacional - MongoDB
Desenvolvendo soluções com banco de dados não relacional - MongoDB
 
Mini-Curso de MongoDB
Mini-Curso de MongoDBMini-Curso de MongoDB
Mini-Curso de MongoDB
 
FEUCTEC 2016 - Hub de eventos com redis
FEUCTEC 2016 - Hub de eventos com redisFEUCTEC 2016 - Hub de eventos com redis
FEUCTEC 2016 - Hub de eventos com redis
 
MongoDB - Apresentação
MongoDB - ApresentaçãoMongoDB - Apresentação
MongoDB - Apresentação
 
Python e MongoDB - Ensol
Python e MongoDB - EnsolPython e MongoDB - Ensol
Python e MongoDB - Ensol
 
Desenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDBDesenvolvimento de aplicações PHP com MongoDB
Desenvolvimento de aplicações PHP com MongoDB
 
MAC5855 - NoSQL
MAC5855 - NoSQLMAC5855 - NoSQL
MAC5855 - NoSQL
 
Mongo db slides
Mongo db slidesMongo db slides
Mongo db slides
 
Apache NiFi com postgresql
Apache NiFi com postgresqlApache NiFi com postgresql
Apache NiFi com postgresql
 
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018Apache NiFi com PostgreSQL - PGConf.Brasil 2018
Apache NiFi com PostgreSQL - PGConf.Brasil 2018
 
MongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações webMongoDB - Performance e Escalabilidade para aplicações web
MongoDB - Performance e Escalabilidade para aplicações web
 
Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20Floggy-GUJavaSC-2008-09-20
Floggy-GUJavaSC-2008-09-20
 
MongoDB na Campus Party
MongoDB na Campus PartyMongoDB na Campus Party
MongoDB na Campus Party
 
PHP GERAL
PHP GERALPHP GERAL
PHP GERAL
 

Mais de Marinho Brandão

Tiristores na Indústria - Artigo
Tiristores na Indústria - ArtigoTiristores na Indústria - Artigo
Tiristores na Indústria - ArtigoMarinho Brandão
 
Arduino - Hardware Livre e Robótica
Arduino -  Hardware Livre e RobóticaArduino -  Hardware Livre e Robótica
Arduino - Hardware Livre e RobóticaMarinho Brandão
 
O Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonO Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonMarinho Brandão
 
Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com DjangoMarinho Brandão
 
Django - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes PlugaveisDjango - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes PlugaveisMarinho Brandão
 

Mais de Marinho Brandão (6)

Tiristores na Indústria - Artigo
Tiristores na Indústria - ArtigoTiristores na Indústria - Artigo
Tiristores na Indústria - Artigo
 
Arduino - Hardware Livre e Robótica
Arduino -  Hardware Livre e RobóticaArduino -  Hardware Livre e Robótica
Arduino - Hardware Livre e Robótica
 
O Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com PythonO Prazer De Trabalhar Com Python
O Prazer De Trabalhar Com Python
 
Geraldo Reports
Geraldo ReportsGeraldo Reports
Geraldo Reports
 
Construindo Sistemas Com Django
Construindo Sistemas Com DjangoConstruindo Sistemas Com Django
Construindo Sistemas Com Django
 
Django - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes PlugaveisDjango - Criando Aplicacoes Plugaveis
Django - Criando Aplicacoes Plugaveis
 

Python e bancos NoSQL

  • 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
  • 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