2009-07-24 18 views
5

Pracuję nad projektem dla firmy, w której muszę przenieść poprzednie dane do nowego systemu. Oczywiście obie struktury są zupełnie inne i używam hibernacji do manipulacji w bazie danych i jestem zdezorientowany co do najlepszego sposobu migracji danych. Czy powinienem używać hibernacji, czy powinienem zapisać zapisane procedury, czy jest jeszcze inna opcja? Wszelkie jasne pomysły są mile widziane.Migracja danych za pomocą Hibernate

+1

To pytanie wymaga więcej szczegółów, aby dać rozsądną odpowiedź. – Nathan

+0

Pytanie i odpowiedzi są stare. Pytanie zostało utworzone na rok 2009. A teraz jest 2014.W ciągu 5 lat Hibernate zmienia się tak bardzo. Proponuję więc zamknąć to pytanie i odpowiedzi. – AechoLiu

+0

@AechoLiu to nieokreślone pytanie do wersji, więc proponuję zaktualizować go do aktualnych specyfikacji. –

Odpowiedz

0

Chociaż nie jestem pewien co do "najlepszego", wolałbym użyć Hibernate lub podobnego ORM, gdybym był na twojej pozycji. Powodem jest to, że masz hierarchię obiektów do użycia między dwiema bazami danych. Jeśli schematy są bardzo podobne, prosty skrypt SQL może być łatwiejszy. To naprawdę zależy od twojej sytuacji i jej specyfiki.

edit: I naprawdę potrzebują rano kofeiny ...

Co ja próbuje zwrócić uwagę, zostało dostrzeżone przez dwóch ludzi, którzy napisanych po mnie. Jeśli schematy są zdefiniowane, masz już obiekty lub są dobre z narzędziami inżynierii odwrotnej, to hibernacja jest łatwym sposobem. Jeśli jednak jest to jednorazowa rzecz, to zdecydowanie lepiej jest pisać scenariusze.

7

Po wypróbowaniu obu podejść w przeszłości, mogę z całą pewnością stwierdzić, że nie jest to scenariusz, dla którego zaprojektowano ORM, ani też tam, gdzie się rozwija. Koniec z koniecznością budowania dwóch różnych zestawów obiektów i trudno jest uzyskać wydajność wymaganą do masowej migracji. Jedynym powodem, dla którego mogę myśleć o używaniu czegoś w rodzaju hibernacji, byłoby zbudowanie systemu, który miałby trwale osadzić się pomiędzy dwoma systemami, aby je zintegrować, ale wydaje się, że jest to stosunkowo krótkoterminowe.

Byłem niezmiernie zadowolony z wyników skryptu Pythona, garści SQL i niektórych obiektów Pythona w celu transformacji danych.

2

Hibernacja nie działa bardzo dobrze z procedurami przechowywanymi - nie jest to "naturalne dopasowanie". Jeśli twoja ORM jest już zmapowana, a twoje obiekty są ustawione "tak jak jest" i "w toku", użyj standardowych metod hibernacji, aby zapisać dane do nowego układu.

Jeśli jesteś zmuszony do przejścia w tryb StoredProcedure, możesz zdecydować, czy chcesz przełknąć ból i zakodować transformacje w procedurach przechowywanych - w ten sposób wszystkie skrypty migracji pozostaną razem.

Tak jak napisano na drugim plakacie, język skryptowy, taki jak Python, może ci dobrze służyć - dobrze mi też działał.

0

Osobiście prawdopodobnie używałbym narzędzia ETL, takiego jak SSIS (jeśli przechodzisz z lub do SQL Server) do tego, ruch dużych ilości danych jest to, co narzędzia ETl są zaprojektowane i zoptymalizowane do zrobienia.

2

Próbowałem zarządzać migracją danych, ponieważ zmienię swój kod i reprezentację danych w różnych wersjach. Za każdym razem kończyłem pisanie określonego sql, aby wyszukiwać obiekty w starym stanie i zapełniać nowe kolumny. Jeśli istnieje prosty sposób zarządzania migracją danych podczas przeglądania wszystkiego jako obiektu, nie pomyślałem o tym i jak dotąd nowe kolumny zawsze mają proste interpretacje, które mogłem obliczyć w sql.

Niektóre z nich były na tyle proste, że kod znalazł się w java, a inne zmiany były na tyle złożone, że chciałem wielu instrukcji sql, więc w efekcie osadziłem je w powłoce i pythonie (oba, dla przenośności) skrypty. Skrypty to here i the java code z nazwami metod, takimi jak updateDB2008_4().

Powiązane problemy