java - persistencia - db4o experiencias?
informix (4)
El principal problema que he encontrado con él es informar. Simplemente no parece haber ninguna forma de ejecutar informes eficientes contra una fuente de datos db4o.
Actualmente estoy probando db4o (la versión de Java) y me gusta mucho lo que veo. Pero no puedo evitar preguntarme cómo funciona en un entorno real en vivo (web). ¿Alguien tiene alguna experiencia (buena o mala) para compartir sobre ejecutar db4o?
La mayoría de las consultas nativas pueden y se convierten de manera eficiente en consultas de SODA detrás de las escenas, por lo que no deberían marcar la diferencia. El uso de NQ es, por supuesto, preferido ya que permaneces en los reinos del lenguaje fuerte. Si tiene problemas para que NQ use índices, no dude en publicar su problema en los foros de db4o e intentaremos ayudarlo.
Goran
Judah, parece que no estás utilizando la activación transparente, que es una característica de la última versión de producción (7.4)? ¿Tal vez si especificó la versión que está utilizando, ya que puede haber otros problemas que ahora se resuelven en la última versión?
Ejecutamos la versión DB40 .NET en un gran proyecto cliente / servidor.
Nuestra experiencia es que potencialmente puede obtener un rendimiento mucho mejor que las bases de datos relacionales típicas.
Sin embargo, realmente tienes que ajustar tus objetos para obtener este tipo de rendimiento. Por ejemplo, si tiene una lista que contiene muchos objetos, la activación de DB4O de estas listas es lenta. Hay varias formas de evitar este problema, por ejemplo, invirtiendo la relación.
Otro dolor es la activación. Cuando recupera o elimina un objeto de DB4O, de forma predeterminada activará todo el árbol de objetos. Por ejemplo, cargar un Foo cargará Foo.Bar.Baz.Bat, etc. hasta que no quede nada para cargar. Si bien esto es agradable desde el punto de vista de la programación, el rendimiento disminuirá la cantidad de anidamiento en sus objetos. Para mejorar el rendimiento, puedes decirle a DB4O cuántos niveles profundos activar. Esto lleva mucho tiempo si tienes muchos objetos.
Otra área de dolor fue la búsqueda de texto. La búsqueda de texto de DB4O es mucho, mucho más lenta que la indexación de texto completo de SQL. (Le dirán esto directamente en su sitio). La buena noticia es que es fácil configurar un motor de búsqueda de texto sobre DB4O. En nuestro proyecto, hemos conectado Lucene.NET para indexar los campos de texto que queremos.
Algunas API no parecen funcionar, como las API de GetField, que son útiles para aplicar actualizaciones de bases de datos. (Por ejemplo, si ha cambiado el nombre de una propiedad y desea actualizar sus objetos existentes en la base de datos, debe usar estas API de "reflexión" para buscar objetos en la base de datos. Otras API, como el atributo [Índice] don '' t funciona en la versión estable 6.4 y, en su lugar, debe especificar índices utilizando Configure (). Index ("someField"), que no está fuertemente tipado.
Hemos sido testigos de la degradación del rendimiento cuanto mayor sea su base de datos. Tenemos una base de datos de 1 GB en este momento y las cosas siguen siendo rápidas, pero no tan rápido como cuando comenzamos con una base de datos pequeña.
Hemos encontrado otro problema por el cual Db4O.GetByID cerrará la base de datos si la ID ya no existe en la base de datos.
Hemos encontrado que la sintaxis Native Query (la sintaxis más natural, integrada en el lenguaje para consultas) es mucho, mucho más lenta que las consultas SODA menos amigables. Entonces en lugar de tipear:
// C# syntax for "Find all MyFoos with Bar == 23".
// (Note the Java syntax is more verbose using the Predicate class.)
IList<MyFoo> results = db4o.Query<MyFoo>(input => input.Bar == 23);
En lugar de ese buen código de consulta, tiene que hacer una fea consulta SODA basada en cadenas y no fuertemente tipada.
Para los amigos de .NET, recientemente introdujeron un proveedor LINQ-to-DB4O, que brinda la mejor sintaxis hasta el momento. Sin embargo, aún está por verse si el rendimiento estará a la altura de las feas consultas de SODA.
El soporte de DB4O ha sido decente: hemos hablado con ellos por teléfono varias veces y hemos recibido información útil. Sus foros de usuarios son inútiles, sin embargo, casi todas las preguntas quedan sin respuesta. Su rastreador de errores JIRA recibe mucha atención, por lo que si tienes un error molesto, archivarlo en JIRA suele ser reparado. (Hemos tenido 2 errores que se han corregido, y otro que se parchó de una manera a medias).
Si todo esto no te ha asustado, déjame decirte que estamos muy contentos con DB4O, a pesar de los problemas que hemos encontrado. El rendimiento que hemos obtenido ha destruido algunos marcos O / RM que probamos. Lo recomiendo.
actualización de julio de 2015 Tenga en cuenta que esta respuesta se escribió en 2008. Si bien aprecio los votos a favor, el mundo ha cambiado desde entonces, y esta información puede no ser tan confiable como lo era cuando se escribió.