Frage

Ich fand einige Diskussions-Threads auf this- aber nichts, was einen Vergleich aller drei Mechanismus unter einem Faden gebracht.

So, hier ist meine Frage ...

Ich muss prüfen DB Änderungen- Einsatz \ Updates \ löscht zu Business-Objekten.

kann ich denke an drei Möglichkeiten, dies zu tun

1) DB Trigger

2) Hibernate Abfangjäger

3) Frühling AOP

(Diese Frage ist spezifisch für einen Frühling \ Hibernate \ RDBMS- Ich denke, das ist neutral zu java \ c # oder Ruhezustand \ nhibernate- aber wenn Ihre Antwort ist abhängig von C ++ oder Java oder spezifische Implementierung von hibernate bitte angeben)

Was sind die Vor- und Nachteile einer dieser Strategien der Auswahl?

Ich bitte nicht für die Umsetzung details.-Dies ist ein Entwurf Diskussion.

Ich hoffe, wir dies als Teil der Community Wiki machen

War es hilfreich?

Lösung

Ich kann nur über Trigger und NHibernate, sprechen, weil ich weiß nicht, Abou tSpring AOP enought.

Es hängt davon ab, wie immer, was für Sie am wichtigsten ist.

DB Trigger

  • sind schnell
  • wird immer aufgerufen, auch aus nativen SQL-Skripte, externen Anwendungen.
  • Schreibdaten in der DB von denen NH nicht kennt. Es wird in der aktuellen Sitzung fehlen. (Die zu unerwarteten Ergebnissen führen kann)
  • Sie wissen in der Regel nichts über ihre Sitzung. (Sagen wir: Login-Name)

NHibernate Abfangjäger / events

  • sind keine spezifischen DBMS.
  • erlauben Sie einfachen Zugriff auf Sie Geschäftsinformationen, wie die Benutzersitzung, Client-Computernamen, bestimmte Berechnungen oder Interpretationen, Lokalisierung, etc.
  • können Sie deklarative Konfiguration, wie Attribute auf die Entität, die definieren, wenn das Unternehmen angemeldet werden muss und wie.
  • können Sie off Protokollierung Drehen, diese für Upgrades von Bedeutung sein könnten, Importe, spezielle Aktionen, die vom Benutzer nicht ausgelöst werden.
  • können Sie eine Einheit Blick auf das Geschäftsmodell. Sie sind wahrscheinlich näher an den Benutzer Sicht.

Andere Tipps

Ich verstehe dies nicht zu 100% auf die Frage bezogen, aber es hat einen Mehrwert mit neuen Optionen.

Es gibt zwei weitere Möglichkeiten, können Sie prüfen, was los ist.

Lese Transaktionsprotokoll: Wenn Datenbank in vollem Wiederherstellungsmodus dann allen Details über INSERT, UPDATE, DELETE und DDL-Anweisungen werden in Transaktionsprotokoll protokolliert.

Das Problem ist, dass es sehr komplex ist zu lesen, weil es nicht nativ unterstützt wird und dass es eine dritte Partei Transaktionsprotokollleser benötigt, zB: ApexSQL Log oder SQL Log Rettung (letzteres ist kostenlos, aber nur unterstützt sQL 2000).

Der Vorteil dieser Methode ist, dass man buchstäblich außer keine Änderungen vornehmen müssen, um die Datenbank in voller Recovery-Modus zu setzen.

SQL Server Spuren: Spuren werden alles in Trace-Dateien einschließlich select-Anweisungen erfassen, die auch für einige Compliance-Szenarien benötigt werden. Der Nachteil ist, dass Spuren sind Textdateien, die analysiert und organisiert werden müssen.

Ich kann mir keinen guten Grund nicht mit Datenbankänderungen löst in der Datenbank zu prüfen. Einfügungen, Aktualisierungen und Löschungen können möglicherweise die Datenbank aus verschiedenen Quellen getroffen - Auslöser all diese fangen; Hibernate usw. nicht.

I tink, wenn Sie die Überwachung betrachten, müssen Sie überlegen, was es ist für. Erstens ist es Aufzeichnung havea wer was geändert hat, was sich verändert, so können Sie schlechte Änderungen sichern, können Sie Probleme mit dem System identifizieren (wir können, welche von mehreren Differnt Anwendungen sehen die Änderung casued die schnell hilft identifizieren, welche gebrochen) und so kann man erkennen, wer die Änderung vorgenommen hat. Die letzte kann wirklich entscheidend sein, wenn es um die Aufdeckung von Betrug. Wenn Sie alles über die Benutzeroberfläche zu tun, werden Sie nie der Benutzer zu begehen Betrug sehen, wer die Daten im Backend verändert schreiben selbst ein Scheck. Wenn Sie alles von der Schnittstelle tun, wahrscheinlich müssen Sie Berechtigungen auf Tabel Ebene gesetzt haben, damit die Tür zu öffnen für Betrug zu beginnen. Wenn Sie alles von der Schnittstelle wissen Sie nicht, welche verärgerter Mitarbeiter die gesamte Benutzertabelle für den reinen Ärgernis Wert gelöscht. Wenn Sie alles von dem vorderen Ende wissen Sie nicht, welche inkompetent dba versehentlich alle Kundenaufträge an den gleichen Kunden aktualisiert. Ich kann nicht unterstützen mit nichts außer Auslöser für die Prüfung, wie Sie einen guten Teil verlieren, warum Sie die Überwachung in erster Linie benötigen.

Mit Hibernate Abfangjäger Überwachungsprotokolle auszuführen ist zutiefst fehlerhaft. Ich bin durch die Anzahl der Blogs betäubt, die diese Methode empfehlen, ohne seine offensichtlichste Fehler Hinweis auf - der Abfangjäger hat eine neue Transaktion zu verwenden, um die Prüfung aufzunehmen. Was bedeutet, Sie erfolgreich die Haupttransaktion retten können und einen Systemabsturz haben, die die Prüfung Transaktion aufzeichnen nicht!

eine alte Frage, die ich auf now.There chanced ist eine weitere Option zur Verfügung, und das ist Envers, die zusammen mit Hibernate ab ver 3.6 ab ..

verfügbar ist
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top