Universidad del Valle de Guatemala Facultad de Ingeniería Departamento de Ingeniería en Ciencias de la Computación CC3012 – Modelado de Base de Datos Catedrática: Lynette García
Tarea No.4
Zope Object Data Base (ZODB)
Trabajo presentado por: Luis Carlos Aldana Molina, 08261 Martín Luis H. Guzmán Colmenares, 08041 Byron Orlando Morales Sequén, 08414 Guatemala, 27 de agosto de 2011
Zope Object Data Base (ZODB) is licensed under Creative commons AttributionNoncommercial-Share Alike 3.0 Guatemala License
1/15
RESUMEN El presente trabajo describe las principales características de Zope Object Database (ZODB), el cual pertenece al framwork para Python Zope. ZODB fue desarrollado como adición al framework, framework, pero se puede utilizar utilizar como aplicación aplicación independient independiente. e. ZODB proporcion proporcionaa una base base de dato datoss orie orient ntad adaa a obje objeto toss de alto alto grad grado o de tran transa sapar paren enci ciaa para para Pytho Python. n. Las Las aplicaciones pueden aprovechar las características de la base de datos orientada a o objetos con pocos cambios en la lógica de aplicación. No es necesario consultar o actualizar objetos a través de interacciones con la base de datos. Los objetos se obtienen y actualizan por medio de interacción normal con objetos. Las transacciones se pueden deshacer de una manera que mantiene la integridad. El caché de un objeto provee alto rendimiento, uso eficiente de memoria y protección contra pérdidas de memoria (memory leaks) debido a las referencias circulares.
2/15
ÍNDICE DE CONTENI CONTENIDOS DOS Página 1. Resu Resume men n
.... ..........................................................................................................................................................................................
2
2. Intr Introd oduc ucci ción ón .... ........... .......................................................................... ...................... .......................... ...................... .......................... .....
4
3. Zope ope Obj Object ect Datab atabas asee (ZODB ODB)
.... .......................... .......... .......................... ..............................................
4
.......... ............... ..................................................
4
b. Requ Requer erim imie ient ntos os del del sist sistema ema .... ............................................................................................................
5
c. ¿Cómo fun funciona ZOD ZODB?
................ ...........................................
5
d. Inte Interf rfac aces es de ZODB ODB .... ......................................................................................................................................
6
e. Venta entaja jass
... ....... .............. .......... .............. .......... .............. .......................... .......... .............. .......... .......................... ......
7
f. Desv Desven enta taja jass .... ................................................................................................................................................................
9
a. ¿Qué es ZO ZODB?
4. Zope ope Ent Enterpr erpris isee Obje Object ctss (ZE (ZEO)
.... .......................... .......... .......................... ..............................................
10
........................................................
10
.... .............. .......... .............. ...................................................................................... ..........
11
c. Para Para cor corre rerr el ser servi vido dorr ZEO ZEO .... ............................................................................................................
11
d. Pro Probando ZE ZEO
.......... ............... ..................................................
11
5. Trans Transacc accion iones es ...... ......... ...... ....... ....... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... ...... .....
12
a. ¿Cómo funciona ZEO? b. Requ Requer erim imiient entos
a. Subt Subtra rans nsac acci cion ones es
.... ......................................................................................................................................
13
b. Desh Deshac acer er camb cambio ioss
.... ......................................................................................................................................
13
.... ................................................................................................................................................................
13
d. Bloq Bloque ueos os y resol resoluc ució ión n de conf confli lict ctos.. os..................................... ...............................................
14
6. Escala Escalabi bili lida dad d .... ........... .......................................................................... ...................... .......................... ...................... .......................... .....
14
7. Futur uturas as cara caraccterí erísti sticas cas
.... .............. .......... .............. ...................................................................................... ..........
14
8. Conc Conclu lusi sion ones es .... ........... .......................................................................... ...................... .......................... ...................... .......................... .....
15
9. Bibl Biblio iogr grafí afíaa
15
c. Versi ersion ones es
.... ........... .......................................................................... ...................... .......................... ...................... .......................... .....
3/15
INTRODUCCIÓN El método más común para almacenar datos es el uso de sistemas de base de datos relacionales. Estos proporcionan un modelo sencillo para organizar los datos en tablas, y la mayor yoría puede manejar grande dess cantidades de datos de manera efe efectiva. Desafortunad Desafortunadament amente, e, no todos todos los problemas problemas se ajustan ajustan a una organizaci organización ón tabular tabular simple. simple. Por esto, una parte importante de la lógica de la aplicación se dedica a leer los datos de las tablas y luego escribir los datos modificados de vuelta a las tablas. Los beneficios de la orientación a objetos, tales como la encapsulación y asociación de la lógica con los datos, se pierden. Las bases de datos orientadas a objetos proveen una integración más estrecha entre el modelo de objetos de la aplicación y el almacenamiento de datos. El propósito de este trabajo es presentar una base de datos orientada a objetos para Python, Zope Object Database Database (ZODB). (ZODB). Los objetivos objetivos del trabajo trabajo son describir describir el uso y beneficios beneficios de ZODB, proveer una visión arquitectónica de alto nivel, resaltar aspectos técnicos interesantes y describir la evolución reciente y futura.
Zope Object Database (ZODB) ¿Qué es ZODB? Zope Object Database (ZODB) es un sistema de persistencia para objetos de Python. Los lengua lenguajes jes de progra programaci mación ón persis persisten tentes tes provee proveen n facilid facilidade adess para para escrib escribir ir automáticamente los objetos en el disco y leerlos de nuevo cuando son requeridos por un programa en ejecución. Al instalar ZODB, éstas facilidades se agregan a Python, haciendo del mismo un lenguaje de programación persistente. En el caso de Python, como en muchos otros lenguajes de programación, ciertamente es posible construir un propio sistema de objetos persistentes. El modo usual de inicio es convertir los objetos en cadenas de bytes para poderlos almacenar en un medio de almacenamiento físico. Algunos ejemplos de ésto, en Python, podrían ser los módulos de gdbm o bsddb , que proveen formas para escribir y leer los objetos hacia disco. Es importante mencionar que éstos módulos son sencillos de utilizar y combinar con el módulo de pickle 1 para almacenar los objetos. Incluso estos módulos vienen incluidos en las bibliotecas de Python. 1 No todos todos los objetos objetos pueden pueden ser persistido persistidos. s. El módulo módulo de pickle provee una lista de los objetos que pueden ser persistidos.
4/15
Sin embargo, la desventaja es que el programador tiene que gestionar de forma explícita los objetos, desde la escritura de los objetos en disco cuando el objeto ya no es necesario, hasta la lectura del objeto en cuanto se necesita. El trabajo que hace ZODB ODB es admi admini nist stra rarr los los obje objeto tos, s, para para facil facilit itar ar este este traba trabajo jo al prog progra rama mado dor, r, mant manten enie iend ndo o los los obje objeto toss en memo memori riaa RAM, RAM, escr escrib ibié iénd ndol olos os en disc disco o cuan cuando do se modifican, y eliminándolos de la memoria cuando no se hayan utilizado en suficiente tiempo.
Requerimientos del sistema El único requerimiento de ZODB es tener instalado Python 2.3 o superior. La forma de instalar ZODB es tan fácil como descomprimir el archivo ejecutable 2 y luego ejecutar: >> python setup.py install
Sin Sin emba embarg rgo o tamb tambié ién n es neces necesar ario io,, en el caso caso de inst instala alarl rlo o en Wind Window ows, s, tene tenerr instalado un compilador para lenguaje C, ya que ZODB utiliza varios módulos de dicha lenguaje para funcionar. En el caso de usuarios UNIX no es necesario, pues estos módulos vienen incluidos en el sistema operativo.
¿Cómo funciona ZODB? ZODB es conceptualmente simple. Para que un objeto de Python pueda ser persistido utilizando ZODB debe cumplir con cualquiera de las siguientes opciones:
1. Ser un dato primitivo, como int, char, boolean, string, etc. 2. Ser un objeto que pertenece a una clase que hereda la subclase de Python persistent.Persistent. Una clase que herede de ésta puede ser persistido sin ningún problema por ZODB. Las instancias de los objetos persistentes son traídas de un medio de almacenamiento permanente, como un archivo de disco, cuando el programa lo necesita, y se mantiene en memoria RAM. ZODB se encarga de reconocer las modificaciones a los objetos, de modo que cuando se modifica un objeto (por ejemplo con una instrucción como: obj.size = 1) se marca como “sucio”. Cuando el usuario lo requiere, un objeto “sucio” puede ser persistido (almacenado permanentemente en disco), a lo se que le conoce como “committing a transaction”. Las transacciones también pueden ser abortadas, con lo que los objetos “sucios” vuelven a su estado inicial, es decir, cuando comenzó la transacción u operación. 2 Los ejec ejecuta utables bles puede pueden n ser encon encontra trados dos en: en:http://old.zope.org/Products/ZODB3.3 http://old.zope.org/Products/ZODB3.3
5/15
El térm términ ino o “tran “transac sacci ción ón”” tien tienee un sent sentid ido o técn técnic ico o espe especí cífi fico co en Cien Cienci cias as de la Computación. Éste es uno de los términos más importantes en el área. Usualmente es muy importante que el contenido de una base de datos no se dañe por accidentes de software o hardware, por lo que la mayoría del software de base de datos ofrece protección contra este tipo de corrupción mediante el apoyo de cuatro propiedades: Atomicidad, Consistencia, Aislamiento y Durabilidad. Colectivamente se les conoce a éstos como ACID, por sus siglas en inglés. Cuando un software posee estas cuatro propiedades se dice que el software realiza transacciones. Todas éstas son proveídas por ZODB, por lo que se puede decir que realiza transacciones. A continuación se muestra qué significa cada propiedad: •
•
•
•
Atomicida Atomicidad d: significa significa que cualquier cualquier cambio cambio a los datos datos hechos durante una transacción, se realizan todo o nada. En otras palabras, o bien todos los cambios se aplica, o ninguno de ellos. La idea es que si se realizan varios cambios no se vaya a corromper o dejar incoherente el dato por realizar cambios parcialmente. Consistencia: significa que cada transacción se ejecuta en un estado válido de la base de datos, con el objetivo de no corromper los datos que ya se encuentren dentro de la misma. Aislamient Aislamiento o: significa significa que dos programas programas o subprocesos subprocesos o hilos de ejecución ejecución que se ejecuten en 2 transacciones distintos no puedan ver los cambios del otro hasta que la transacción sea finalizada. Ésto para no dejar la base de datos en un estado modificado parcialmente por transacciones distintas. Durabilidad: significa que cada vez que una transacción se haya completado, un error posterior no dañe o cause la pérdida de los datos cambiados en la transacción.
Interfaces de ZODB ZODB proporciona tres principales interfaces: Storage, DB y Connection. Las interfaces de DB y de Connection tienen implementaciones individuales, sin embargo la interfaz de Stora Storage ge (alma (almace cena nami mien ento to)) pose poseee varia variass impl implem emen enta taci cion ones es difer diferen ente tes. s. A continuación se describe un poco cada interfaz: •
DB: La implementac implementación ión en una clase de esta interfaz permite la interacció interacción n entre el medio de almacenamiento y la conexión. Se puede decir que se “encuentra en la parte superior”. Por proceso es necesario crear una única instancia.
6/15
•
•
Connection: Una implementación de esta interfaz permite la correcta escritura y lectura de los objetos dentro del medio de almacenamiento. Un programa con varios hilos de ejecución debe abrir una conexión independiente para cada subproceso. Storage: La implementación en una clase de esta interfaz permite manejar el almacenamient almacenamiento o y recuperación recuperación de objetos objetos de algún tipo de almacenamie almacenamiento nto permanente. Como se mencionó anteriorm ormente, exis xisten varias implementaciones de esta interfaz. Algunos ejemplos son: pred eterminado. Todo Todo FileStorage : utiliza los arhivos de disco nomales. Es el predeterminado. se guarda en un gran archivo Data.fs, el cual es seesncialmente un log de transacciones. ◦
◦
DBDFullStorage : que que util utiliz izaa dato datoss del del soft softwa ware re Sleep Sleepyc ycat at Soft Softwa ware re's 's
BerkeleyDB. ◦
DirectoryStorage : util utiliz izaa arch archiv ivos os y carp carpet etas as ordi ordina nari rias as para para guar guarda darr
revisiones. Guarda un archivo por revisión de un objeto. ◦
RelStorage : guarda guarda pickles (co (colec lecció ción n de objeto objetoss conv convert ertido idoss en tablas tablas
util utiliz izan ando do una una func funció ión n llam llamada ada pick pickler ler fetch fetch)) en una una base base de dato datoss relacional. Provee soporte para PostreSQL, MySQL y Oracle.
Ventajas 1.
Eficiencia contra otros tipo de gestores
Se sabe que es complicado crear programas que creen objetos a partir de datos guardados en tablas (mediante mapeo objeto-relacional) y que tomen poco tiempo para realizar esta tarea. En cambio ZODB utiliza la serialización de punteros, por lo que rest restab able lecer cer los los obje objeto toss toma toma poco poco tiem tiemo o (lo (lo cual cual es espe especi cial alme ment ntee útil útil para para aplicacciones que realizan lecturas intensamente).
2.
Podemos realizar un Undo
En la mayoría de Sistemas Manejadores de Bases de Datos podemos cancelar una transacción antes de que finalice, pero una vez realizada ya no se puede deshacer. Mientras que en ZODB se puede eliminar la última transacción que se ha realizado sobre un grupo de datos determinado. Una opción muy útil, cuando tenemos los parámetros suficientes para determinar que la última transacción no debió realizarse.
7/15
3.
Lo que hace una transacción es explicito
En ZODB se escribe donde inicia y donde finaliza una transacción dentro de nuestro propio código. Por ello sabemos exactamente lo que cada transacción hace.
4.
Indexación de textos
Exist Existen en dive divero ross indi indice cess de text textos os en ZODB, ODB, clar claro o estos estos inde indexad xador ores es trab trabaj ajan an únicam únicament entee en la capa capa de aplica aplicació ción. n. Esto Esto implic implicaa que nuestra nuestra aplica aplicació ción n sea la encargada de actualizar los índices.
5.
Realizar herencia es trivial
Aprovechando las ventajas de trabajar para un lenguaje orientado a objetos como Python, realizar modelado de herencia en varios niveles es sencillo. Se sigue la misma línea que para el resto de objetos. Realizar esta tarea en gestores de bases de datos tradicionales es muy complicado, además que repercute en el desempeño del mismo.
6.
Escalable
Para cambios sensillos e incrementales, para nuestra aplicación trabajar en red no implica muchos cambios a trabajar localmente. Unas simples configuraciones de clases y ZODB ODB hace hace el rest resto. o. Con Con un sist sistem emaa de punt puntos os de mont montaj aje, e, hace hace simp simple le y transparente este sistema. Sopo Soport rtaa Blob Blobss (Bin (Binar aryy Larg Largee Obje Object cts) s) para para mene meneja jarr arch archiv ivos os gran grande dess 7. (multimedia) En la actualidad se requiere del manejo de información multimedia, especialmente en entornos que giran a la Red. En ZODB el manejo de archivos binarios grandes es bastante simple ya que se ayuda de lo que Python ofrece.
8.
Packing: quita revisiones viejas de los objetos
El desempeño de nuestras aplicaciones es importante para ZODB, por ello nos permite llevar un historial de las modificaciones de nuestros objetos. Lo cual podría llegar a ser un problema si se realizan demasiados, por ello también cuenta con un sistema de limpieza del historial.
8/15
Desventajas 1.
La persistencia sólo aparece en nuestra aplicación.
Para que una aplicación externa pueda acceder a la información de una aplicación, se debe tener la estructura de la base de datos completa la cual está dentro de la aplicación que la maneja. Lo que esto implica para el desempeño de las aplicaciones externas, es que para realizar la más mínima tarea (como hacer una pequeña consulta a un dato especifico de un objeto) es necesario tener cargada la aplicación completa.
2.
Manejo centralizado de la información
Dada la forma como ZODB maneja la información, se vuelve un cuello de botella. Dependemos completamente de ZODB para acceder a la información que hemos guar guarda dado do en una una base base de dat datos. os. Lo cual cual no nos nos perm permit itee tene tenerr repl replic icas as de la información que manejamos.
3.
Manejo pobre de la información que se recupera
Para acceder a un dato especifico de un objeto es necesario cargar el objeto completo en memoria. Además no tenemos una forma certera de saber que otros objetos ha cargado ZODB. Por esto la organización de una base de datos puede tener muchas complicaciones.
4.
Migrar toma demasiado tiempo
Organizar una base de datos creada en ZODB toma tiempo y es poco transparente. Mientras que migrar datos tiene muchos inconvenientes de tiempo y es casi imposible migrar la información de las transacciones realizadas sobre un objeto.
5.
Problemas con deshacer (undo)
Si las transa transacci ccione oness realiza realizan n cambio cambioss sobre sobre un mismo mismo objet objeto, o, no es aconsej aconsejabl ablee int intenta entarr hace hacerr un Undo Undo sobr sobree una una tran transa sacc cció ión n que que ha suce sucedi dido do hace hace vari varias as transacciones porque puede dejar inconsistente a la base de datos (una transacción sólo guarda información sobre los cambios que han ocurrido en un objeto y no se refleja en el resto de objetos objetos relacionados relacionados a ellos). Esto conlleva conlleva que se puede llevar totalmente a una base de datos a un estado del pasado con la información de una transacción.
9/15
6. Indexar no es transpartente Debido a que los indices se manejan dentro de la aplicación, es necesario escribir como se actualizan los índices; esto repercute en la transparencia del código de las aplicaciones. En mucho casos este manejo manual puede ocacionar problemas con Undo.
Zope Enterprise Objects (ZEO) ¿Cómo funciona ZEO? ZODB, como se ha descrito hasta ahora, sólo puede ser utilizado dentro de un único proces proceso o de Python Python (aunqu (aunquee podría podría ser en varios varios hilos hilos de ejecuc ejecución ión). ). ZEO, ZEO, Zope Zope Enterprise Objects, se utiliza para extender la funcionalidad de ZODB y facilitar el acceso a los objetos por una red. Cabe destacar que el nombre “Zope Enterprise Objects” es un poco engañoso. ZEO se puede utilizar para almacenar objetos Python y acceder a ellos de forma distribuida, sin necesidad de utilizar Zope. La combinación de ZEO y ZODB es esencialmente una base de datos que puede ser utilizada en red para el lenguaje de Python. ZEO ZEO se compo ompone ne de cerc cercaa de 12,0 12,000 00 líne líneas as de códi código go Pyth Python on.. El códi código go es relativamente pequeño, ya que contiene sólo el código de un servidor TCP/IP, e implementa un nuevo tipo de almacenamiento: ClientStorage . Éste simplemente hace llam llamad adas as de proc proced edim imie ient nto o remot remoto o al servi servido dor, r, que que lueg luego o pasa pasa a una una clase clase de almacenamiento regular, como por ejemplo FileStorage . Cualquier número de procesos puede crear una instancia de ClienStorage , así como cualquier número de hilos en cada proceso. En caso de corrupción, ZEO envía un mensaje de invalidación a todas las instancias relacionadas con ClientStorage en cada operación de escritura o lectura. Funciona por medio de mensajes, en general. El mensaje de invalidación contiene el identificador de objeto para cada objeto que haya sido modificado, dejando que las diferentes instancias de ClientStorage borren los datos antiguos de su respectiva memoria RAM. Cabe destacar que este diseño tiene algunas consecuencias a tener en cuenta. En primer lugar, mientras que ZEO no está ligado a Zope, de haber sido escrita para su uso con Zope, por lo que almacena código del programa de la base de datos. Como resultado, resultado, la lectura a la base de datos se hace mucho más frecuente frecuente de lo que se escribe, y por lo l o tanto, ZEO es más adecuado para aplicaciones de lectura intensa. Si cada ClientStorage está escribiendo en la base de datos todo el tiempo, esto se traducirá en una tormenta de mensajes que se envían e invalidan, por lo que puede tomar más tiempo el procesamiento de las operaciones que las operaciones de los datos en sí. 10/15
Por Por otro otro lado, lado, para aplica aplicacio ciones nes que tienen tienen pocas pocas instru instrucci ccione oness de escrit escritura ura en comparación con el número de lecturas, este método puede ser de gran ayuda. La idea es lograr que el servidor ZEO haga relativamente poco trabajo. Si es posible lograr hacer que el servidor ZEO no vaya a ser contactado para cada petición, por lo que su carga de trabajo podría continuar siendo manejable.
Requerimientos El software: ZEO server software se encuentra incluído en ZODB3. Por lo tanto es necesario únicamente contar con Python 2.3 o superior, al igual que ZODB.
Para correr el servidor ZEO Para correr un servidor ZEO es necesario corrar el código runzeo.py, que se encuentra dentro de la carpeta de ZEO en el directorio del instalador de ZODB. Se puede correr con el comando: python runzeo.py -h, para ver las diferentes opciones que posee. Un buen ejemplo de prueba puede ser: >> python ZEO/runzeo.py -a/tmp/zeosocket -f /tmp/test.fs Con lo que se consigue correr ZEO en un sistema UNIX utilizando la implementación de Storage predeterminada: FileStorage
Probando ZEO Una vez el servidor de ZEO se encuentre corriendo, puede ser utilizado por ZODB como si fuera un modo de almacenamien almacenamiento to más, por lo que no es necesario necesario codificar codificar código código extra para hacer el uso remoto del servidor. servidor. La única diferencia radica radica en que se debe crear una instancia de ClientStorage en lugar de FileStorage.
A conti continua nuació ción n se muestr muestraa un pequeñ pequeño o ejemplo ejemplo para probar probar el funcio funcionam namien iento to adecuado de ZEO:
11/15
Imagen No.1 – Ejemplo para funcionamiento de ZEO
Transacciones ZODB provee soporte de transacciones en su núcleo. Las transacciones proveen control de concurrencia y atomicidad. Las transacciones se ejecutan como si tuvieran acceso exclusivo a los datos. No existe algo que prevenga el conflicto de dos peticiones simultáneas. Una transacción tendrá éxito o no, los datos no se dejan en un estado inconsistente si se produce un error. Los cambios realizados durante una transacción no aparecen en la base de datos hasta que se invoca commit(), método del objeto actual de Transaction. Si se utiliza el hilo predeterminado del administrador de transacciones, es suficiente ejecutar: >> transaction.commit()
De manera similar, las transacciones se pueden abortar explícitamente invocando invocando abort(). transaction.abort()
Si se produce un error y falla el commit , todos los commit posteriores producirán un error. Se debe iniciar explícitamente una nueva transacción, ya sea abortando la anterior o utilizando begin().
12/15
Subtransacciones Subtransacciones pueden ser creadas dentro de una transacción. Cada una puede hacer commit y abort individualmente. Los cambios dentro de una subtransacción hacen un verdadero commit hasta que la transacción que la contiene hace commit . Una subtransacción nueva inicia automáticamente al terminar la anterior. >> transaction.commit(True) transaction.commit(True) >> transaction.abort(True) transaction.abort(True)
Deshacer cambios Algunos tipos de almacenamiento soportan deshacer cambios aun después de un commit . Invocando undoLog(start, end [, func]) , retorna el log de las transacciones pasadas entre los tiempos start y end , medidos en segundos. Si está presente, func trabaja como un filtro de las transacciones a retornar. Para Para desha deshace cerr los los camb cambio ioss de una una tran transa sacc cció ión n se invo invoca ca DB.undo(id), sien siendo do el parámetro el identificador de la transacción a deshacer. La transacción no se puede desha deshacer cer si tran transa sacc ccio ione ness post poster erio iore ress modi modifi fica caro ron n los los obje objeto toss que que afect afectó ó la transacción a deshacer. Para guardar los cambios se tiene que hacer commit a la transacción que deshizo los cambios.
Versiones Al igual igual que muchas muchas subtra subtransa nsacci ccione oness se conti contiene enen n en una transa transacci cción, ón, muchas muchas transacciones se contienen dentro de una transacción larga, llamada versión. Dentro de una versión, muchas transacciones pueden ser creadas, hacer commit y abort ; pero los cambios no son visibles para otras conexiones a la base de datos. Una versión se puede seleccionar al crear la conexión, enviando como parámetro el nombre de la versión: >> DB.open([*version*])
Para hacer visibles los cambios realizados en una versión se utiliza: >> DB.commitVersion() >> DB.abortVersion()
ZODB no hace ningún intento para conciliar los cambios entre diferentes versiones. La primera versión que modifique un objeto va a obtener un bloqueo sobre ese objeto. Cualquier otra versión no podrá modificar ese objeto. 13/15
Bloqueos y resolución de conflictos ZODB ZODB util utiliz izaa un prot protoc ocol olo o opti optimi mist staa basa basado do en timestamps. Cambi Cambios os a copi copias as indivi individua duales les de objeto objetoss se realiza realizan n de forma forma indepe independi ndient ente, e, por lo que objet objetos os indivi individua duales les no necesi necesitan tan ser bloque bloqueado ados. s. Los cambio cambioss se sincro sincroniz nizan an cuando cuando las transacciones son confirmadas. Sólo una transacción tiene permitido hacer commit a un almacenamiento a la vez. Si dos hilos modifican el mismo objeto en múltiples conexiones, un hilo está garantizado para hacer hacer commit primero primero.. Cuando Cuando el segund segundo o hilo hilo hace hace commit , se lanza una excepción ConflictError . La aplicación debe detectar el conflicto y volver a ejecutar las operaciones. Cuando la transacción se vuelve a ejecutar, los estados de los objetos afectados reflejan los cambios hechos por la transacción anterior. anterior.
Escalabilidad Scalability Python está limitado a un solo CPU por el Global Interpreter Lock . ZEO permite
ejecutar múltiples aplicaciones de servidor Zope compartiendo una sola base de datos. Se recomienda ejecutar un cliente Zope por cada procesador en el servidor ser vidor..
Futuras características •
•
•
•
Opciones Opciones de Almacenamie Almacenamiento nto: se desea aumentar aumentar los almacenamien almacenamientos tos existentes existentes,, guardando data comprimida o que reducen espacio cuando registros actualizados son idén idénti tico coss a regi regist stro ross exis existe tent ntes es.. Una Una herr herram amie ient ntaa para para copia opiarr dat datos entr entree almacenamientos sin recurrir a exportar e importar objetos. Opti Optimi miza zaci ción ón: part partes es de la base base de dato datoss será serán n re impl implem ement entad adas as en C para para proporcionar un mayor rendimiento o reducir uso de memoria. Bloqueos Bloqueo s: protocolos de gestión gestió n de contenidos, como WebDAV, requieren la capacidad capa cidad de bloque bloquear ar objet objetos os para para su actual actualiza izació ción. n. Probab Probablem lement entee se crearán crearán versio versiones nes asociadas a los bloqueos y estas se crearán para los objetos afectados. Lenguaje de consulta : Python provee el lenguaje de consulta para ZODB. Es deseable que provea un lenguaje de consulta estándar como el Object Query La Language nguage (OQL).
14/15
CONCLUSIONES •
•
•
• •
ZODB es una simple y transparente base de datos orientada a objetos para Python. ZODB es un componente de libre disponibilidad del servidor de aplicaciones Zope. ZODB ZODB ofrece característic características as avanzadas avanzadas que permiten desarrollar simples pero poderosos programas de Python. Las consultas se hacen por interacción con objetos, no con la base de datos. datos . Las transacciones cumplen las cuatro propiedades ACID.
BIBLIOGRAFÍA •
• •
•
•
•
•
McDonoug, C. ZODB Tips and Tricks. 2005, Plone Symposium. http://www.plope.com/static/presentations/zodb.pdf ZODB programming guide. http://www.zodb.org/documentation/guide/index.html Rowe, Laurence. An Overview of the ZODB. http://www.zodb.org/documentation/articles/ZODB-overview.html Rowe, Laurence. Transactions in ZODB. http://www.zodb.org/documentation/guide/transactions.html Rowe, Laurence. Comparison to other database types. http://www.zodb.org/documentation/articles/ZODB-overview http://www.zodb.org/documentat ion/articles/ZODB-overview.html#comparison-to.html#comparison-toother-database-types Fulton, Jim. Introduction to the Zion Object Database. http://www.python.org/workshops/2000-01/proceedings/papers/fulton/zodb3.html Winkler, P. To ZODB Or Not to ZODB. 2009. http://www.coactivate.org/projects/toppengineering/blog/2009/03/20/to-zodb-or-not engineering/blog/2009/03/20/t o-zodb-or-not-to-zodb -to-zodb
15/15