2008-09-17 8 views
7

He usado db4o con mucho éxito en muchos proyectos en el pasado. Con el tiempo, parece haber evolucionado mucho, y con las tendencias modernas como LINQ en la lengua de todos, ha vuelto a aumentar mi interés, especialmente ahora que sé que está comenzando a apoyar la activación transparente y la persistencia que me intrigan un poco, pero un amigo Me planteó una muy buena pregunta cuando mencioné por primera vez db4o y, aun con la innovación moderna, todavía no estoy seguro de cómo responderla.Informes con db4o

¿Cuáles son los mejores/más rápidos/los métodos más comunes para generar informes similares a los grandes informes de restricciones complejas entre tablas que se pueden realizar de manera tan efectiva en plataformas como SQL? Entiendo bastante bien cuánto tiempo, esfuerzo y tiempo de desarrollo se guardan e incluso muchas de las ganancias de rendimiento, especialmente en ORM, pero algunas aplicaciones requieren informes complejos que no estoy seguro de cómo expresar el uso de objetos y consultas de objetos y también estoy preocupado por el rendimiento, ya que puede ser abrumador optimizar y mantener informes complejos, incluso en sistemas diseñados específicamente para ese fin.

-
Editar:

Para ser más claro, las fuentes de datos de objetos y similares puede utilizarse para tirar de db4o en los mismos controles de datos ricos como SqlDataSource et al. Me han remitido a documentos en el sitio db4o sobre su uso con ReportViewer y también he aconsejado desnormalizar datos en una base de datos de informes, pero la pregunta pretende plantear un desafío conceptual sobre qué se puede hacer para lograr los tipos de consultas que Los RDBMS funcionan tan bien que tienen la industria. Me encanta db4o, pero no puedo pensar en un medio realmente eficiente de informar sobre los datos agregados que existe en varios tipos diferentes (o tablas en SQL) sin sacar todos los objetos relevantes de la base de datos, activándolos y realizando los cálculos en el código de nivel de aplicación. Puedo estar equivocado, pero parece que no podría competir con las optimizaciones posibles con un RDBMS.

Espero que entre las mentes brillantes que hemos logrado reunir aquí que alguien sabe algo que yo no sé o tiene ideas innovadoras para la implementación futura que podría ampliar el ámbito ODBMS. Sé que varios ORM implementan metodologías para objetos de informes complejos y me pregunto si alguien con experiencia con cualquiera de estas tecnologías podría tener algo creativo que no dependa de ninguna tecnología fuera de mi código y db4o (puedo generar informes con un Servidor SQL solo).

Respuesta

1

Mi comprensión limitada del problema es que informar actualmente es muy difícil de hacer con DB4O, debido a algunas funcionalidades faltantes como Count, Aggregate, etc. Tal como están las cosas, tiene que implementarlas usted mismo con todo el mal rendimiento eso implica (por ejemplo, activar todos los registros, luego hacer una operación de conteo en los registros).

+0

Este problema parece estar asociado principalmente con el diseño de informes de la misma manera que se diseñan los informes relacionales. Creo que la solución a este dilema es recordar que no estamos utilizando un RDBMS y que tenemos que pensar en un nuevo enfoque, en lugar de ajustar una clavija cuadrada en un agujero redondo. – TheXenocide

2

Para evitar el costo de rendimiento de los informes a través de db4o, sugiero mantener una base de datos altamente desnormalizada (sqlite?) En paralelo a su contenedor db4o. Ejecute informes contra db y la lógica de la aplicación normal contra db4o.

Sí, es más trabajo, pero de esta manera tendrá informes de alto rendimiento, manteniendo la utilidad de db4o.

Si ha separado correctamente su código de acceso a datos, debería ser fácil actualizar cualquier código que guarde objetos para actualizar también el informe db.

+0

Gracias por comentar, pero esto parece más un truco que una solución; si estoy ejecutando datos en SQL, también podría mantener mis datos en SQL en lugar de arriesgar problemas de concurrencia y tal; también, después de configurar el db, guardar un objeto en db4o es una línea, e incluso menos si usa la persistencia transparente – TheXenocide

+1

Por eso mencioné "altamente desnormalizado". Quise mantener principalmente tablas de resumen que contengan exactamente lo que necesita para sus informes. Un poco de la misma manera en que usarías lucene.net para buscar. Debe mantener su índice por separado de su base de datos. –

+0

Esto es más una solución que una solución; Quiero conocer los métodos adecuados para informar * con * db4o, algo que no puedo usar para evitar la dificultad de informar con él. También "adecuadamente separado" es bastante relativo a la implementación, y db4o se beneficia de diferentes técnicas de abstracción – TheXenocide

1

No estoy familiarizado con db4o. Pero sé algo sobre el software de informes. Algunos de ellos tienen una interfaz de datos que puede escribir su propio conector como i-net Crystal-Clear. Si puede consultar una lista simple de objetos simples (cadenas, números, ...), entonces es simple.

Otra solución simple es escribir un controlador JDBC ficticio. Hay una muestra para eso.Las consultas que desee ejecutar en su db4o estarán disponibles como procedimiento almacenado virtual. Con los parámetros opcionales puede filtrar sus datos en db4o para obtener el mejor rendimiento. Tal controlador JDBC ficticio se puede escribir 3-4 horas.

+0

Veo de dónde vienes en esta respuesta, pero debido a que db4o es un estilo completamente diferente de DB, usar JDBC es innecesario, aunque puede ver algunas capacidades geniales que vienen con él, no funcionaría para .NET y no aprovecha las capacidades de db4o de manera eficiente, lo cual es importante. – TheXenocide

+0

Aún obtiene un +1 por esfuerzo y lo más cercano a una respuesta completa, aunque :) - CrystalClear tampoco es del todo correcto para la pregunta, pero gracias por el esfuerzo. Sin embargo, creo que necesito que alguien con experiencia db4o responda esto. – TheXenocide

2

Consulte this page.

mejor,

alemán

+0

¿Podría ser que el Viscuso alemán de db4o se haya acercado al SO? Muy halagador; p. Gracias, esto es útil, pero mi pregunta es más sobre patrones para informes complejos que parecen beneficiarse de la estructura RDBMS (multi-table/union/etc.). ¿cómo vamos a reemplazar esta funcionalidad? Voy a editar para mayor claridad – TheXenocide

+1

el enlace ya no funciona. –

1

Se puede también se reducen a lo herramienta de informes que utilice. Por ejemplo, he implementado un proyecto que utiliza el motor del lado del cliente de Reporting Services de Microsoft para generar informes, sin dependencia del servidor SQL, simplemente lo alimenta con objetos. Toda la agregación es realizada por el motor de informes, lo que significa que su código simplemente necesita encontrar y materializar los objetos subyacentes.

0

Demasiado tarde para que te sea útil. Pero sugiero que las personas que encuentren esta pregunta quieran consultar los informes de Jasper. Hay una versión "comercial" del producto. Sin embargo, en realidad es una solución de código abierto y se puede encontrar en sourceforge.

Parece que en realidad es bastante bueno. Incluso hay una funcionalidad report server y BI (de nuevo, todas son de código abierto). Por lo tanto, valdría la pena buscar a alguien que esté un poco interesado.

Cuestiones relacionadas