2009-07-24 12 views
5

Ich arbeite an einem Projekt für ein Unternehmen, wo ich seine bisherigen Daten in ein neues System migrieren muss. Offensichtlich sind beide Strukturen völlig verschieden und ich benutze Hibernate für Datenbankmanipulation und verwirrt darüber, was der beste Ansatz zum Migrieren von Daten wäre. Sollte ich den Ruhezustand verwenden, sollte ich gespeicherte Prozeduren schreiben oder gibt es eine andere Option? Alle guten Ideen sind willkommen.Datenmigration mit Hibernate

+1

Diese Frage braucht mehr Details, um eine vernünftige Antwort zu geben. – Nathan

+0

Die Frage und die Antworten sind alt. Die Frage wurde 2009 gestellt. Und jetzt ist es 2014.Über 5 Jahre ändert sich der Hibernate so sehr. Also schlage ich vor, diese Frage und Antworten zu schließen. – AechoLiu

+0

@AechoLiu es ist eine nicht spezifizierte Frage zu den Versionen, also würde ich vorschlagen, es zu gegenwärtigen Spezifikt. Zu aktualisieren. –

Antwort

0

Obwohl ich mir nicht sicher bin, was "am besten" ist, würde ich lieber Hibernate oder ein ähnliches ORM verwenden, wenn ich in Ihrer Position wäre. Der Grund dafür ist, dass Sie eine Objekthierarchie zwischen den beiden Datenbanken verwenden müssen. Wenn die Schemas extrem ähnlich sind, ist ein einfaches SQL-Skript möglicherweise einfacher. Es hängt wirklich davon ab, was Ihre Situation ist, und die Besonderheiten davon.

edit: Ich brauche wirklich etwas Morgen Koffein ...

Was ich zu anmerken versuchte, wurde von den beiden Personen festgestellt, die nach mir geschrieben. Wenn die Schemas definiert sind, haben Sie bereits Objekte oder sind gut mit den Reverse Engineering-Tools, dann ist Ruhezustand ein einfacher Weg zu gehen. Wenn es jedoch eine einmalige Sache ist, sind Skripte definitiv der bessere Weg zu gehen.

7

Nachdem ich beide Ansätze in der Vergangenheit ausprobiert habe, kann ich definitiv sagen, dass dies kein Szenario ist, für das ORM entworfen wurde, noch eines, wo es gedeiht. Am Ende müssen Sie zwei verschiedene Objektgruppen erstellen, und es ist schwierig, die für eine Massenmigration erforderliche Effizienz zu erreichen. Der einzige Grund, den ich für die Verwendung von etwas wie Winterschlaf denken könnte, wäre, wenn Sie ein System aufbauen würden, das permanent zwischen zwei Systemen sitzen würde, um sie zu integrieren, aber es scheint, dass dies relativ kurzfristig ist.

Ich war sehr glücklich mit den Ergebnissen eines Python-Skripts, einer Reihe von SQL und einigen Python-Objekten, um die Daten zu transformieren.

2

Hibernate spielt nicht gut mit gespeicherten Prozeduren - es ist keine "natürliche Passform". Wenn Ihr ORM bereits zugeordnet ist und Sie Ihre Ist- und Zielobjekte eingerichtet haben, verwenden Sie normale Hibernate-Methoden, um Daten in Ihr neues Layout zu schreiben.

Wenn Sie gezwungen sind, den StoredProcedure-Weg zu gehen, dann können Sie entscheiden, ob Sie den Schmerz schlucken wollen und Ihre Transformationen in den gespeicherten Prozeduren codieren - so bleiben all Ihre Migrationsskripte zusammen.

Wie das andere Plakat schon sagte, kann eine Skriptsprache wie Python Ihnen hier gut dienen - es hat auch gut für mich funktioniert.

0

Persönlich würde ich wahrscheinlich ein ETL-Tool wie SSIS verwenden (wenn Sie von oder zu SQL Server gehen) dafür, Bewegung von großen Datenmengen ist, was ETl-Tools entworfen und optimiert zu tun.

2

Ich habe versucht, Datenmigration zu verwalten, wie ich meinen Code und meine Datendarstellung durch verschiedene Releases ändere. Jedes Mal habe ich spezifische SQL geschrieben, um nach Objekten im alten Zustand zu suchen und neue Spalten zu füllen. Wenn es eine einfache Möglichkeit gibt, die Datenmigration zu verwalten, während man alles als Objekt betrachtet, habe ich nicht darüber nachgedacht, und bis jetzt haben die neuen Spalten immer einfache Interpretationen, die ich in sql berechnen könnte.

Einige von ihnen waren einfach genug, dass der Code in Java endete, und andere Änderungen waren komplex genug, dass ich mehrere SQL-Anweisungen wollte, und so habe ich sie in Shell und Python (beide für die Portabilität) eingebettet) Skripte. Die Skripte sind here und the java code mit Methodennamen wie updateDB2008_4().