.net - Algunas preguntas sobre el trabajo con db4o
(3)
1) ¿Cómo gestiona la identidad del objeto cuando trabaja con objetos almacenados en db4o? En db4o normalmente no tienes id. db4o usa la object-identity para distinguir el objeto aparte. Entonces, el mismo objeto en la memoria será el mismo objeto para la base de datos.
Mientras 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 más tarde de nuevo por algunos identificadores.
Creo que estas tres opciones son posibles: - Utilice la ID interna de db4o . Sin embargo, esta identificación no es para siempre. Desfragmentar la base de datos cambia este id. - Utilizando los UUIDs de db4o . Pero los UUID de db4o son bastante grandes: crear ID por ti mismo
2) Hay una herramienta Object-Manager Tool 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) si. Puede marcar los campos como transient con el atributo .NET no serializado o los atributos personalizados.
Estoy probando el objeto db4o databse y hasta ahora me gusta bastante lo que estoy viendo, pero también leo este post sobre las experiencias db4o de stackoverflow . Indicando 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:
¿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á recuperada 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.
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.
¿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.
¿Estás jodido al cambiar el nombre de tus objetos de dominio?
Por lo que sé cuando cambia el nombre de una clase, las instancias almacenadas previamente en la base de datos ya no se pueden recuperar. ¿Hay una manera de solucionar este problema? ¿Cómo lidias con las actualizaciones contra una base de datos en vivo que ya contiene muchos objetos?
¿Puedo excluir las propiedades que se guardan 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í.
¿Se 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 inyecte en la instancia nuevamente?
En las bases de datos orientadas a objetos (como db4o), la identidad del objeto no debe usarse 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 sigue los campos / referencias en cualquier objeto cargado.
El uso de identificadores de objetos puede considerarse como un estilo malo, la mayoría de las aplicaciones (que yo sepa) no las utilizan 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.