2008-09-17 6 views
7

Ich habe db4o mit viel Erfolg bei vielen Projekten in der Vergangenheit verwendet. Im Laufe der Zeit scheint es sich stark entwickelt zu haben, und mit modernen Trends wie LINQ in aller Munde hat es wieder mein Interesse geweckt, besonders jetzt, wo ich weiß, dass es transparente Aktivierung und Persistenz unterstützt, die mich ziemlich faszinieren, aber ein Freund Ich habe eine sehr gute Frage an mich gestellt, als ich db4o das erste Mal erwähnt habe, und selbst mit moderner Innovation bin ich mir immer noch nicht sicher, wie ich darauf antworten soll.Berichterstattung mit db4o

Welche sind die besten/schnellsten/gebräuchlichsten Methoden zum Generieren von Berichten, die den großen cross-table Complex Constraint-Berichten ähneln, die auf Plattformen wie SQL so effektiv durchgeführt werden können? Ich verstehe ziemlich gut, wie viel Zeit, Aufwand und Entwicklungszeit gespart werden und sogar viele Leistungsgewinne, besonders über ORMs, aber einige Anwendungen erfordern komplexe Berichte, von denen ich nicht sicher bin, wie ich Objekte und Objektabfragen ausdrücken kann Sorgen um die Leistung, da es überwältigend sein kann, komplexe Berichte selbst auf Systemen zu optimieren und zu warten, die speziell für diesen Zweck entwickelt wurden.

-
Edit:

Um mehr klar, Objektdatenquellen und dergleichen verwendet werden können db4o in die gleichen Daten reiche Kontrollen wie SqlDataSource et al zu ziehen. Ich wurde auf Dokumente auf der db4o-Website verwiesen, um sie mit ReportViewer zu verwenden, und wurde geraten, Daten in eine Berichtsdatenbank zu denormalisieren. Die Frage soll jedoch eine konzeptionelle Herausforderung darstellen, was getan werden kann, um die Arten von Abfragen zu erreichen RDBMS funktionieren so gut, dass sie die Industrie halten. Ich liebe db4o, aber ich kann mir kein wirklich effizientes Mittel vorstellen, um aggregierte Daten über mehrere verschiedene Typen (oder Tabellen in SQL) zu berichten, ohne alle relevanten Objekte aus der Datenbank zu entfernen, sie zu aktivieren und die Berechnungen durchzuführen im Code auf Anwendungsebene. Ich mag mich irren, aber es scheint, als könnte es nicht mit den Optimierungen konkurrieren, die mit einem RDBMS möglich sind.

Ich hoffe, unter den klugen Köpfen, die wir hier gesammelt haben, dass jemand etwas weiß, weiß ich nicht oder hat innovative Ideen für die zukünftige Implementierung, die die ODBMS-Arena erweitern könnte. Ich weiß, dass verschiedene ORMs Methoden für komplexe Berichtsobjekte implementieren, und ich frage mich, ob jemand mit Erfahrung mit einer dieser Technologien etwas Kreatives haben könnte, das nicht von Technologien außerhalb meines Codes und db4o abhängt (ich kann Berichte mit einem erstellen SQL Server allein).

Antwort

1

Mein begrenztes Verständnis des Problems ist, dass die Berichterstattung derzeit mit DB4O sehr schwierig ist, wegen einiger fehlender Funktionalität wie Count, Aggregate, etc. Wie es steht, müssen Sie diese selbst mit der schlechten Leistung implementieren das bedeutet (z. B. alle Datensätze aktivieren und dann eine Zählung für die Datensätze durchführen).

+0

Dieses Problem scheint hauptsächlich mit dem Entwerfen von Berichten auf die gleiche Weise verbunden zu sein, wie relationale Berichte entwickelt werden. Ich denke, eine Lösung für dieses Dilemma besteht darin, sich daran zu erinnern, dass wir kein RDBMS verwenden und dass wir uns einen neuen Ansatz überlegen müssen, anstatt einen quadratischen Stift in ein rundes Loch zu stecken. – TheXenocide

2

Um die Performance-Kosten für die Berichterstellung über db4o zu umgehen, würde ich vorschlagen, eine hoch denormalisierte (SQLite?) Datenbank parallel zu Ihrem db4o-Container zu unterhalten. Führen Sie Berichte gegen die db und normale App-Logik gegen db4o aus.

Ja, es ist mehr Arbeit, aber auf diese Weise haben Sie eine hohe Performance-Berichterstattung, während Sie die Nützlichkeit von db4o erhalten.

Wenn Sie Ihren Datenzugriffscode ordnungsgemäß getrennt haben, sollte es einfach sein, jeden Code zu aktualisieren, der Objekte speichert, um auch die Berichts-DB zu aktualisieren.

+0

Danke für das Kommentieren, aber das scheint eher ein Hack als eine Lösung zu sein; Wenn ich Daten in SQL ausfühle, kann ich meine Daten lieber in SQL aufbewahren, als Risiken der Parallelität zu riskieren. Auch nach dem Einrichten der db, speichern Sie ein Objekt in db4o ist eine Zeile, und noch weniger, wenn Sie transparente Persistenz verwenden – TheXenocide

+1

Deshalb habe ich erwähnt "hoch denormalized". Ich wollte hauptsächlich Tabellen zusammenhalten, die genau das enthalten, was Sie für Ihre Berichte benötigen. Ein bisschen so, wie Sie lucene.net für die Suche verwenden würden. Sie müssen seinen Index getrennt von Ihrer Datenbank pflegen. –

+0

Dies ist eher eine Problemumgehung als eine Lösung. Ich möchte die richtigen Methoden der Berichterstattung * mit * db4o kennenlernen, nicht etwas, das ich verwenden kann, um die Schwierigkeit zu umgehen, damit zu berichten. Auch "richtig getrennt" ist ziemlich relativ zur Implementierung, und db4o profitiert von verschiedenen Abstraktionstechniken. – TheXenocide

1

Ich bin nicht vertraut mit db4o. Aber ich kenne einige über Reporting-Software. Einige davon haben eine Datenschnittstelle, die Sie Ihren eigenen Stecker wie i-net Crystal-Clear schreiben können. Wenn Sie eine einfache Liste von einfachen Objekten (Strings, Zahlen, ...) abfragen können, ist es einfach.

Eine andere einfache Lösung besteht darin, einen Dummy-JDBC-Treiber zu schreiben. Es gibt ein Beispiel dafür.Die Abfragen, die auf Ihrem db4o ausgeführt werden sollen, sind als virtuelle gespeicherte Prozedur verfügbar. Mit den optionalen Parametern können Sie Ihre Daten für beste Leistung auf db4o filtern. Dieser Dummy-JDBC-Treiber kann 3-4 Stunden geschrieben werden.

+0

Ich sehe, woher Sie in dieser Antwort kommen, aber weil db4o eine völlig andere Art von DB ist, ist die Verwendung von JDBC unnötig, obwohl ich kann einige nette Funktionen sehen, die damit einhergehen, es würde nicht für .NET funktionieren und es nutzt die Fähigkeiten von db4o nicht effizient, was wichtig ist. – TheXenocide

+0

Sie erhalten immer noch eine +1 für die Mühe und am nächsten zu einer gründlichen Antwort :) - CrystalClear ist auch nicht ganz richtig für die Frage, aber danke für die Mühe. Ich denke, ich brauche jemanden mit db4o Erfahrung, um dies zu beantworten. – TheXenocide

2

Bitte siehe this page.

Best,

Deutsch

+0

Könnte es sein, dass German Viscuso von db4o zu SO übergelaufen ist? Ziemlich schmeichelhaft, p. Danke, das ist nützlich, aber meine Frage bezieht sich mehr auf Muster für komplexe Berichte, die von der RDBMS-Struktur zu profitieren scheinen (Multi-table/union/etc.). Wie werden wir diese Funktionalität ersetzen? Ich werde für die Klarheit bearbeiten – TheXenocide

+1

der Link funktioniert nicht mehr. –

1

Es kann auch einkochen, bis zu welchem ​​Reporting-Tool Sie verwenden. Ich habe beispielsweise ein Projekt implementiert, das die clientseitige Microsoft Reporting Services-Engine zum Rendern von Berichten verwendet - keine Abhängigkeit vom SQL-Server -, sondern nur Feed-Objekte. Die gesamte Aggregation wird von der Reporting-Engine durchgeführt, was bedeutet, dass Ihr Code lediglich die zugrunde liegenden Objekte finden und materialisieren muss.

0

Viel zu spät, um Ihnen nützlich zu sein. Aber ich schlage vor, dass Leute, die diese Frage finden, sich vielleicht Jasper Reports ansehen möchten. Es gibt eine "kommerzielle" Version des Produkts. Es ist jedoch eine Open-Source-Lösung und kann unter sourceforge gefunden werden.

Scheint es ist eigentlich ziemlich gut. Es gibt sogar eine report server und BI-Funktionalität (wieder alle Open Source). Es lohnt sich also, jemanden zu suchen, der ein bisschen interessiert ist.