Professional Documents
Culture Documents
NDICE
MHProject
db4objects
Crditos Y Bibliografa
RDBMS Vs OODBMS
OODBMS
Introduccin
Caractersticas
La API
Nativas Vs No-Nativas
Tratamiento De Objetos
Consultas
QBE
NQ
SODA
19/12/2005
.2
PERSISTENCIA DE DATOS
Persistencia
Una de las tareas ms crticas en la programacin es salvar y recuperar datos La persistencia es el almacenamiento de los datos en memoria, para una posterior recuperacin de los mismos En sistemas orientados a objetos, existen varios mtodos para hacer los objetos persistentes. La eleccin del mtodo es de vital importancia.
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .4
DATABASES
SERIALIZACIN
ORDMBS
PERSISTENCIA DE OBJETOS
OODBMS
RDBMS
19/12/2005
.5
RDBMS vs OODBMS
RDBMS vs OODBMS
Tecnologa de Objetos
Orientada a Objetos Centrada en servicios
19/12/2005
.7
RDBMS vs OODBMS
Tecnologa Relacional
Los datos constituyen un ente propio y van completamente separados de las funciones que los manejan. De hecho uno puede existir perfectamente sin la existencia del otro. Esto crea una complejidad aadida a la hora de manejar esos datos.
19/12/2005
.8
RDBMS vs OODBMS
Tecnologa de Objetos
Los datos coexisten junto a los procesos que los tratan. Estas entidades son los Objetos Simplifica el tratamiento de los datos.
19/12/2005
.9
El Paradigma Relacional
Los datos son independientes de las entidades que los procesan Dichos datos deben ser almacenados en bases de datos relacionales compuestas principalmente de Tablas, Filas (registros), y Campos. Dichos datos deben mantener una relacin coherente entre ellos (Relacin impuesta por la Base de datos).
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .11
El paradigma relacional
Qu pasa si queremos almacenar Objetos creados por un lenguaje orientado a Objetos en una base de datos Relacional? En este instante se produce lo que vamos a llamar la Inadaptacin de Impedancia (Entre Objetos y Datos Relacionales)
19/12/2005
.12
OBJETO1
OBJETO2 OBJETO3
X X X
TABLA1
RDBMS
TABLA2
ENTORNO DE OBJETOS
ENTORNO DE DATOS
19/12/2005
.13
Qu pasa si queremos almacenar Objetos creados por un lenguaje orientado a Objetos en una base de datos Relacional? La solucin comunmente aceptada pasa por lo que llamaremos Mapeo Objeto - Relacional
19/12/2005
.14
RDBMS
TABLA1 TABLA2
ENTORNO DE DATOS
OODBMS
Nos permiten almacenar Objetos directamente (no hay registros ni tablas). Nos dan transparencia a la hora de almacenarlos. Nos ofrecen mayor flexibilidad ante los posibles cambios. Los datos coexisten con los objetos. Velocidad OODBMS RDBMS
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .18
OIDs : Identificadores de objetos, almacenados dentro de los objetos para indicar con cuales est relacionado El OID no es visible ni para el usuario, ni para el programador de la Base de datos Un objeto permanece como el mismo objeto incluso cuando su estado toma completamente nuevos valores
E.T.S de Ingenieros de Telecomunicacin
19/12/2005
.19
OODBMS Standards
The Object Oriented Database Manifesto (1989) Mandatory features: Complex objects (OO feature)
objects can contain attributes which are themselves objects.
Object identity (OO) Encapsulation (OO) Classes (OO) Inheritance (OO): class hierarchies Overriding, Overloading, Late Binding (OO) Computational completeness (OO Persistence (DB)
data must remain after the process that created it has terminated
Secondary Storage Management (DB) Concurrency (DB) Recovery (DB) Ad hoc query facility (DB)
not necessarily a query language could be a graphical query tool
19/12/2005
.21
OODBMS Standards
The ODMG Proposed Standard One of the crucial factors in the commercial success of RDBMSs is the relative standardisation of the data model The Object Data Management Group (ODMG) was formed by a group of industry representatives to define a proposed standard for the object data model. It is still far from being as widely recognised as the relational database standards. The ODMG proposed standard defines the following aspects of an OODBMS:
basic terminology data types classes and inheritance objects collection objects (including sets, bags, lists, arrays) structured objects (Date, Interval, Time, Timestamp similar to SQL) relationships object definition language (ODL) object query language (OQL)
E.T.S de Ingenieros de Telecomunicacin
19/12/2005
.22
OODBMS Ventajas
Objetos y Relaciones Complej@s Jerarqua de clases Sin desadaptacin de impedancia Sin necesidad de claves primarias Un Modelo de datos Un Lenguaje de programacin Sin necesidad de lenguaje de Conslutas Alto rendimiento en ciertas tareas
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .23
OODBMS Desventajas
Aplicaciones escritas para uso de JDO pueden tratar con cualquier Base de datos que implemente JDO Las consultas (queries) estn escritas en un lenguaje parecido-a-Java (JDOQL) El mapeo de objetos a la base de datos estn definidos en descriptores XML Algunos proovedores de OODBMS basan sus productos en JDO (Lo hace db4o?)
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .25
OODBMS Nativas
La interface permite el tratamiento nativo de los objetos como tales. La base de datos almacena esos objetos como tales.
19/12/2005
.26
db4OBJECTS
www.db4o.com
INTRODUCCIN
Db4o: Introduccin
Base de datos orientada a objetos completamente nativa de alto rendimiento. Desarrollada en el corazn de Sillicon Valley. Compacta y vlida como Base de datos embedida en la aplicacin. Soporta aplicaciones Standalone as como Cliente/Servidor (Aplicaciones distribuidas). Disponible para entornos Java o .Net
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .28
Db4o: Caractersticas
Db4o: Caractersticas II
Velocidad: hasta 44 veces ms rpido que Hibernate/MySQL Soporte al cambio de Versiones Administracin Nula Soporte a JSP / Servlets Cdigo Abierto (Bajo 2 licencias)
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .30
Con db4o eliminamos el proceso de diseo, implementacin y mantenimiento de la base de datos pues:
El modelo de clases es el esquema de base de datos.
19/12/2005
.31
db4o
19/12/2005
.32
SODA
NQ Native Queries
Dispositivos mdicos y biotecnologa Industria del transporte Software enlatado Aplicaciones Web (JSP / Servlets) Sistemas en tiempo real
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .36
Podemos utilizar db4objects para: Instituciones educativas y de enseanza en Colegios y/o Universidades.
(Conseguimos con ello centrarnos en el lenguaje Java o .Net sin distraernos en la BD)
Db4o: Ejemplos de Clientes Novell BMW Car IT Indra Systems Massie Labas Bosch TMT Eastern Data Electrabel Web Radiance Hertz
19/12/2005
.38
El motor de la base de datos consiste tan solo en un pequeo archivo .jar de menos de 400kb. La instalacin supone agregar el motor de la base de datos (db4o-.jar) a nuestro CLASSPATH. La documentacin de la base de datos est creada mediante JavaDoc y viene incluida en el mismo paquete.
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .40
La API
Db4o Por dentro: La API En principio solo los paquetes com.db4o y com.db4o.query son necesarios para un correcto funcionamiento.
Mtodos estticos nos permiten: - Abrir y Cerrar db. - Conectarnos a servidor. - Configurar la db.
com.db4o
com.db4o. Db4o
com.db4o. ObjectContainer
19/12/2005
.42
Db4o Por dentro: La API com.db4o.config nos ofrece y proporciona las com.db4o.ext nos extiende el interface y/o com.db4o.query nos permite configurarde funciones avanzadas tipos de consultas consultas mediante 3 de com.db4o. (2 pasos) tunear la base de datos a nuestro gusto
-Paquete que alberga la Razones: contiene tipos clase predicado para y clases que nos permiten -Es ms fcil tunear la realizar consultas mediante configurar y/o y rpido base Native Query (NQ).gusto. de datos a nuestrola db. empezar a utilizar -Ser ms fcil para otros -NQconfiguracin de ms -La permite mejor y la base rpida implementacin pero de datos se hace la interface productos copiar por norma reduce derendimiento de generalel la db. abrir la bsica antes de -Es un sencillo ejemplo de consultas. la misma. sesin en cmo de ligera puede llegar a ser nuestra dB.
com.db4o
com.db4o.ext
com.db4o.config
com.db4o.query
19/12/2005
.44
TRATAMIENTO DE OBJETOS
19/12/2005
.46
Almacenar objetos
Simplemente llamamos a .set( ) pasando cualquier objeto como parmetro
Pilot pilot1 = new Pilot("Michael Schumacher",100); db.set(pilot1); Almacenamos el objeto con un simple set
System.out.println("Stored "+pilot1);
19/12/2005
.47
Recuperar objetos
Lo intentamos con la sencilla interface QBE
Pilot proto = new Pilot(null,0); ObjectSet result=db.get(proto); listResult(result); Consultamos con .get() Listamos resultados Listamos todos ! Creamos un objeto prototipo con new() (con nulls y 0s)
19/12/2005
.48
19/12/2005
.49
Actualizar objetos
Lo intentamos con la sencilla interface QBE
ObjectSet result=db.get(new Pilot("Michael",0)); Pilot found=(Pilot)result.next(); Recuperamos un objeto de la db
19/12/2005
Borrar objetos
Simplemente llamamos a .delete( ) pasando cualquier objeto como parmetro
ObjectSet result=db.get(new Pilot("Michael Schumacher",0)); Pilot found=(Pilot)result.next(); db.delete(found); retrieveAllPilots(db);
19/12/2005
.51
CONSULTAS DE OBJETOS
19/12/2005
.53
19/12/2005
19/12/2005
.55
19/12/2005
.57
Creamos una expresin en leguaje nativo con nuevo Predicate() Implementamos el mtodo .match() que hace la comparacin y devuelve true
19/12/2005
.61
Creamos nuevo nodo de consulta con .query() Imponemos ese nodo a Toda la clase pilot Descendemos por el nodo a name e imponemos MS con .constrain() Ejecutamos la consulta mediante .execute()
.63
Creamos nuevo nodo de consulta con .query() Imponemos ese nodo a Toda la clase pilot Descendemos por el nodo a name e imponemos MS con .constrain() Descendemos a points e imponemos >60
.64
Greater( 60 )
19/12/2005
No tenemos por qu almacenar todos los objetos subordinados si no slo el objeto de mayor nivel. team
car
Db4o database
pilot
19/12/2005
.66
Consultas estructuradas
Consultar un piloto por su modelo de coche
Class: Car
el mod
pilo t
Equals (Ferrari) Query carquery=db.query(); carquery.constrain(Car.class); carquery.descend("model").constrain("Ferrari"); Query pilotquery=carquery.descend("pilot"); ObjectSet result=pilotquery.execute();
19/12/2005 E.T.S de Ingenieros de Telecomunicacin
Creamos nuevo nodo de consulta con .query() Descendemos por model imponemos Ferrari Descendemos por pilot.
.67
Actualizacin de profundidad
Si queremos actualizar un objeto subordinado salvando (almacenando) su objeto superior en la dB debemos configurar la db para actualizacin de profundida con .cascadeOnUpdate() antes de abrir la db. Por defecto la profundidad es 1 lo cual permite actualizar atributos primitivos o Strings.
19/12/2005
.68
Borrado recursivo
De forma anloga a la actualizacin el borrado recursivo debe ser configurado mediante .cascadeOnDelete() antes de la apertura de la dB. Con esto conseguimos borrar los objetos subordinados borrando nicamente el objeto de mayor nivel. Pero que pasa si un objeto subordinado est referenciado por otro objeto? Cuidado!!!
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .69
Con .cascadeOnDelete()
Borramos
X
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .70
db4o: Herencia Db4o nos devuelve los objetos del tipo consultado es decir:
Consultando una SuperClase nos devuelve todos los objetos padre e hijos. Consultando una SubClase nos devuelve los objetos de esa SubClase.
Figuras Consulta
Consulta
19/12/2005
.72
db4o: Herencia
19/12/2005
.73
La transaccin es implcitamente cerrada por defecto cuando cerramos una db. Sin embargo debemos tener cuidado a la hora de hacer .rollback() con Live Objects.
Se deben refrescar con .ext().refresh(obj,depth)
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .75
Refre s
Db4o database
19/12/2005
.76
De cara a la API no existen diferencias reales entre ejecutar transacciones concurrentes dentro de la misma VM y transacciones ejecutadas contra un server
Para abrir una db en modo servidor dentro de la misma VM utilizamos .openServer(dbfile.yap,0) con puerto 0. Para acceder a esa base de datos en modo cliente Local tan solo usamos .openClient()
E.T.S de Ingenieros de Telecomunicacin
19/12/2005
.77
Cada contenedor cliente mantiene su propio cache de referencias dbiles de los objetos ya conocidos. Para hacer que los cambios hechos por un cliente sean cometidos por todos los clientes inmediatamente debemos refrescar los objetos conocidos explcitamente con .ext().refresh(obj, depth)
19/12/2005
.78
Desde aqu hay un pequeo paso ya para configurar nuestra db como Client/Server sobre TCP/IP.
Tan solo especificamos un puerto de servidor mayor que 0 y abrimos los clientes garantizandoles acceso con USER Y PASS. Abrimos con .openServer(db.yap,PORT) Garantizamos con .grantAccess(USER,PASS) Conectamos con .openClient(Server",PORT,USER,PASS)
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .79
Algunas veces necesitamos enviar ciertos mensajes tipo kill al servidor entonces:
El servidor se pone como receptor de mensajes con .setMessageRecipient() pasndole como parmetro el mensaje obj. El mensaje es recivido y procesado por el mtodo processMessage() El cliente se pone como Mensajero con .getMessageSender() y manda un mensaje con .send() . Ejemplo msg: new StopServer()
19/12/2005 E.T.S de Ingenieros de Telecomunicacin .80
db4o: Conclusin
Hemos visto como db4o nos permite hacer un sin fin de cosas con muy poco cdigo y esfuerzo y eso que tan solo hemos visto una parte de db4o. An nos quedara por mirar temas como:
Evaluaciones SODA Constructores Intrpretes Configuracin y Tuneado Indexacin Object Manager
19/12/2005
ClassLoaders ServLets Encriptacin Refactorizado de clases Optimizacin de consultas E.T.S de Ingenieros de Telecomunicacin Replicaciones
.81
db4o Base de datos Orientada a Objetos [---------- Proyecto ----------] MHProject v1.0
www.mhproject.org E.T.S de Ingenieros de Telecomunicacin
Crditos y Bibliografa
19/12/2005
mikel.sagues@unavarra.es
.82