Pregunta

Estoy probando la base de datos de objetos db4o y hasta ahora me gusta bastante lo que veo, pero también leí este post en stackoverflow ¿experiencias db4o? que indican que no todo lo que parece tan fácil es fácil.

En este momento, tengo algunas preguntas sobre cómo se usa db4o en aplicaciones del mundo real. Entonces, si tiene alguna experiencia en el trabajo (especialmente en el contexto de aplicaciones web) con db4o, me encantaría escucharlos.

Aquí están mis preguntas:

  1. ¿Cómo gestiona la identidad del objeto cuando trabaja con objetos almacenados en db4o? **
    Desde el fondo de RDBMS, donde normalmente siempre tiene una columna de clave / identidad primaria para cada tabla, no puedo imaginarme ahora cómo administrar la identidad del objeto en db4o.

    Por ejemplo, si estaba trabajando con NHibernate / mysql y necesitaba encontrar un objeto de usuario por id, haría una sesión. Carga (primaryKey) y será recuperado por su PK. También es muy común que la PK se defina como incremento automático en la definición de la tabla.

  2. Como no hay tal opción en db4o, mi pensamiento fue usar una estructura Guid para identificar algunos objetos en la base de datos de objetos.

  3. ¿Alguna herramienta para ver los objetos almacenados en la base de datos?

    ¿Hay algo como SQL Server Management Studio (probablemente menos sofisticado) en el mundo de db4o? Me gustaría ver los datos / objetos ya almacenados en el archivo db.

  4. ¿Te equivocaste al cambiar el nombre de tus objetos de dominio?

    Por lo que sé cuando cambia el nombre de una clase, ya no se pueden recuperar las instancias almacenadas previamente en la base de datos. ¿Hay una manera de solucionar este problema? ¿Cómo lidias con las actualizaciones en una base de datos activa que ya contiene muchos objetos?

  5. ¿Puedo excluir que las propiedades no se guarden en la base de datos?

    Si, por ejemplo, un objeto de dominio contiene una referencia a un objeto de servicio (sin estado), entonces el objeto de servicio también persistirá si el objeto de dominio persiste, ¿verdad?

Parece un poco extraño tener una instancia de servicio guardada en la base de datos, al menos para mí.

¿Puede excluir la instancia de servicio para que no se guarde? Si el objeto de dominio se recupera nuevamente, ¿cómo puedo asegurarme de que el servicio también se vuelva a inyectar en la instancia?

¿Fue útil?

Solución

1) ¿Cómo gestiona la identidad del objeto cuando trabaja con objetos almacenados en db4o? En db4o normalmente no tienes id. db4o utiliza object-identity para distinguir el objeto aparte. Entonces, el mismo objeto en la memoria será el mismo objeto para la base de datos.

Siempre y cuando no serialices un objeto, esto funciona bien. Sin embargo, tan pronto como los objetos se serializan / desconectan, esto ya no funciona. Por ejemplo, en un escenario web: envía los datos al navegador. Ahora necesitas identificar los objetos otra vez con algunos ID.

Creo que estas tres opciones son posibles: - Use db4o ID interna . Sin embargo, esta identificación no es para siempre. La desfragmentación de la base de datos cambia este id. - Utilizando UUIDs db4o's . Pero los UUID db4o son bastante grandes - Crear IDs por ti mismo

2) Hay una herramienta de Object-Manager para mirar la base de datos. Sin embargo, es extremadamente limitado en su estado actual. En mi opinión, este es un gran inconveniente para db4o.

3) Puede crear alias, renombrar clases y campos, etc. . Sin embargo, cambiar la jerarquía de herencia no funciona. Entonces necesitas copiar los datos antiguos a nuevas instancias.

4) Sí. Puede marcar los campos como transitorio con el atributo .NET sin atributos serializados o atributos personalizados.

Otros consejos

En las bases de datos orientadas a objetos (como db4o) la identidad del objeto no se debe usar realmente. En su lugar se utilizaron consultas y navegación. Primero realice una consulta para obtener uno / algunos objetos, luego use la navegación para llegar a otros.

'Navegación' significa que simplemente sigues los campos / referencias en cualquier objeto cargado.

El uso de identificadores de objetos puede considerarse un estilo malo, la mayoría de las aplicaciones (que yo sepa) no las usan en absoluto.

Mientras trabajaba con DB4O, escribí un simple navegador de objetos DB4O que funciona mucho mejor que el incluido. Pruébalo, es de código abierto.

http://sourceforge.net/projects/db4oviewer/develop

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top