Apr 30, 2011 - Python, ZODB
Conferencia: Tira tu base de datos relacional a la basura
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.
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


"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