Skip to content. | Skip to navigation

Apr 30, 2011 - Python, ZODB

Conferencia: Tira tu base de datos relacional a la basura

ZODB es un motor de persistencia a objetos que permite almacenar el estado de objetos python en un diccionario persistente.

Notas de la charla presentada en el PyDay 2011 de Córdoba.

Qué es ZODB

  • Motor de persistencia transparente para objetos (suspender y recuperar en otra sesión)
  • Python puro
  • Soporte transacciones ACID
  • Historial / soporte de UNDO
  • Soporte eficiente para grandes archivos binarios (blobs)
  • Medios de almacenamientos 'enchufables', ZODB puede almacenar en BDD relacionales si es necesario
  • Apto para base de datos 'empotradas' (sqlite)
  • Arquitectura escalable
  • Replicable

Razones para usar ZODB

Principalemente dos, una es usar solo un paradigma en vez de dos. La otra, Perfromance.

Performance. ZODB se comporta razonablemente bien y mejor que PostgresSQL.

 

https://lh5.googleusercontent.com/-FSLCANKmIPI/TqTCb4y1FLI/AAAAAAAAEhk/s7J1Ju_mZ5k/s529/zodbwritespeed.png

Velocidad de escritura ZODB según benchs de Roche Compaan

Diseño

Applicación con bdd relacional

[ aplicación ]  <------> [   ORM   ] <------->  [ BDD Relacional ]
Objetos                                             Relacional / SQL

 

Diseño Applicación ZODB

[ apliación]  <------>  [ ZODB ]

Objetos                Objetos

Instalación

$ easy_install ZODB3
$ python
>>> import ZODB
>>>

Definimos una clase ejemplo

class Conference:
def __init__(self, nombre, fecha):
self.nombre = nombre

>>> pyday = Conference('Pyday', '30 abril')
>>>

Persistencia de un objeto

>>> import ZODB
>>> from ZODB import ZODB.FileStorage
>>> from ZODB.DB import DB
>>> import transaction
>>> storage = FileStorage('data.fs')
>>> db = DB(storage)
>>> connection = db.open()
>>> root = connection.root()
>>> root['pyday'] = pyday # linea magica
>>> transaction.commit()
>>> db.close()

Aplicaciones usando ZODB

  • Plone
  • Zope / Grok / Bluebream
  • Django
  • Pyramid

Conclusiones

  • Suspender Objetos
  • Aplicaciones sencillas
  • Aplicaciones escalables
  • No es lo mejor alternativa para modelos/aplicaciones basados en tablas

Referencias

Filed under: ,

Comments (3)

http://hdanielb.myopenid.com/ May 24, 2011 12:31 PM
Roberto, en la seccion "persistencia de un objeto" en la 2da linea. no debería ser
"from ZODB import ZODB.DB" ?

la secuencia para abrir el archivo seria..
import ZODB
>>> from ZODB.FileStorage import FileStorage
>>> from ZODB.DB import DB
>>> storage = FileStorage('data.fs')
>>> db = DB(storage)
>>> connection = db.open()

y luego para leer los datos? yo hago ...
root = connection.root()
root.keys()
y obtengo ['pyday']
esta bien eso? como obtendría el resto de los datos?

Gracias
http://hdanielb.myopenid.com/ May 24, 2011 12:40 PM
perdon, le erré a la pregunta. De vuelta; en la seccion "persistencia..."
>>> from ZODB.FileStorage import FileStorage
(como está en el otro ejemplo que puse yo)
Roberto Allende Feb 06, 2012 03:35 PM
root es un diccionario. Se comporta igual que cualquier diccionario en python.
comments powered by Disqus