Frage

In den alten Tagen haben wir die Datenbank über gespeicherte Prozeduren zuzugreifen. Sie wurden als `die bessere‘ Art und Weise zu sehen, die Daten zu verwalten. Wir halten die Daten in der Datenbank, und jede Sprache / Plattform es über JDBC Zugriff auf / ODBC / etc.

Doch in den letzten Jahren Laufzeit Reflexion / Meta-Daten basierten Speicherabrufmechanismen wie Hibernate / Datanucleus populär geworden. Am Anfang waren wir besorgt, dass sie beteiligt wegen der zusätzlichen Schritte langsam sein würde (Reflexion ist teuer) und wie sie abgerufen werden unnötige Daten (das gesamte Objekt), wenn alles, was wir brauchen ein Feld ist.

Ich bin für ein großen Daten Plan starte Projekt Warehousing, die J2EE verwendet, aber ich bin ein wenig unsicher, ob für Stored Procedures oder JDO / JPA gehen und dergleichen. Vor kurzem habe ich wurde mit Hibernate zu arbeiten, und ganz ehrlich zu sein, ich weiß nicht verpassen Schreiben CRUD gespeicherte Prozeduren!

Es läuft darauf hinaus im Wesentlichen nach unten an:

Stored Procedures
+ Kann auf dem Server optimiert werden (obwohl nur die Abfragen)
. - Es gibt wahrscheinlich mehr als tausend gespeicherte Prozeduren sein: für jede Tabelle hinzufügen, löschen, aktualisieren, getById, etc,

JDO
+ Ich werde in den nächsten Monaten zu schreiben parameters.add nicht ausgeben ( „@ Vornamen“, customer.getFirstName ()); ...
- Wird langsamer als SPs (aber die meisten Unterstützung Paging)

Was würden Sie in meiner Situation plump für. In diesem Fall finde ich es viel von einem muchness ist.

Danke,

John

Keine korrekte Lösung

Andere Tipps

"JDO - Wird langsamer als SPs (aber die meisten Unterstützung Paging)"

Diese Annahme ist oft falsch. Es gibt keinen Grund für die SP besonders schnell zu sein. Ich habe einige Messungen durchgeführt und sie sind nicht schneller als Code außerhalb der Datenbank.

Ein Data Warehouse wird durch Einsatz nur Lasten gekennzeichnet und mit langer Laufzeit SELECT...GROUP BY... Abfragen.

Sie schreiben nicht Transaktionsverarbeitung OLTP. Sie verwenden 3NF als eine Möglichkeit, nicht aktualisieren Anomalien auf update / delete Transaktionen zu verhindern.

Da Sie Bulk-Einsätze tun, wird ein SP definitiv langsamer als ein Blockladewerkzeug. Bulk-Loader sind oft multi-threaded und werden alle verfügbaren CPU-Ressourcen verbrauchen. Der SP ist Teil des DB und kann nur DB nur über begrenzte Ressourcen teilen.

Da Sie meistens SELECT GROUP BY tun, wird ein SP hier nicht viel helfen, entweder. Die SELECT-Anweisung nicht in den Genuss von in einem Verfahren eingewickelt werden.

Sie brauchen sie nicht. Sie helfen nicht.

Sie können leicht Benchmark eine Bulk-Ladung und eine Abfrage zeigen, dass der SP nicht zu helfen.

Rod Johnson in seinem "J2EE Design-adn Entwicklung" eine sehr klare Analyse über ORM / StoredProcedures schrieb. Er sagte, dass

  

Gespeicherte Prozeduren sollten nur in einem J2EE-System verwendet werden, um Operationen durchzuführen, die die Datenbank immer stark nutzen werden, ob sie in der Datenbank implementiert sind oder in Java-Code, dass der Austausch eine Menge von Daten mit der Datenbank.

Wie Sie planen, ein Data-Warehouse zu implementieren, ich denke, dass die gespeicherten Prozeduren Ansatz ist die richtige Wahl.

Ich würde vorschlagen, die Metadaten mit Hilfe der Skripte, die Sie zum Laden in das Data Warehouse nutzen zu generieren. Auf diese Weise können Sie Performance-Vorteile bekommen von spezialisierter Last Tool und vielleicht von gespeicherten Prozeduren (wenn Sie eine ausreichend alte Datenbank verwenden). Außerdem werden Sie wahrscheinlich Hand am Ende Codierung zumindest einige SQL. Nachdem Sie Ihre allgemeine Skripte als gespeicherte Prozeduren getan ermöglicht es Ihnen, alle von ihnen in der gleichen Art und Weise zu planen und haben keine Sorgen zu machen über die Änderung, wie sie aufgerufen werden, wenn Sie einige generierten Codes neu schreiben, damit es besser laufen.

Wie die Daten für immer aus, wenn das, was Sie bauen in J2EE ist ein Reporting-Tool, dann können Sie besser dran JDO verwenden. Während ich mit der Berichterstattung Seite der Dinge nicht sehr vertraut bin, kann ein Vorteil sehe ich darin, dass es einfacher sein wird, die Endbenutzer zu ermöglichen, benutzerdefinierte Berichte zu machen, dass Sie nicht im Voraus vorhergesehen (obwohl Sie noch zu haben habe einige Einschränkungen auf, was sie tun können, damit sie die Datenbank in dem Prozess nicht abnehmen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top