Maciek Z.

Maciek Z. programista
Java/J2EE

Temat: Narzędzie do baz danych

Witam !
Dostałem zadanie stworzenia narzędzia służącego do przenoszenia danych między bazami ( w moim przypadku jest to pomiędzy MS SQL Server 2000 a 2005 ). Czy ktoś miał do czynienia z takimi programami ?
W jaki sposób najlepiej podejść do tworzenia takiego narzędzia ?
Jakie framework'i lub biblioteki warto wykorzystać ?

Za wszelkie sugestie z góry dziękuję.
Krzysztof T.

Krzysztof T. Software maker

Temat: Narzędzie do baz danych

Maciek Zaremba:
Witam !
Dostałem zadanie stworzenia narzędzia służącego do przenoszenia danych między bazami ( w moim przypadku jest to pomiędzy MS SQL Server 2000 a 2005 ). Czy ktoś miał do czynienia z takimi programami ?
W jaki sposób najlepiej podejść do tworzenia takiego narzędzia ?
Jakie framework'i lub biblioteki warto wykorzystać ?

Za wszelkie sugestie z góry dziękuję.

tworzyłem ORM który miał za zadanie również expoty/importy (z dependencjami) czyli replikację wybranych części baz.
ORM jak to ORM, wiedział JAK a nie wiedział CO :) czyli kupa zabawy na wysokim poziomie abstrakcji.
Jedną z trudniejszych rzeczy które Cię czekają to dociąganie dependencji - by nie mieć sierocych odwołań, oraz zapychanie do bazy zgodnie z hierarhią wynikłą z dependencji - coby constrainy nie szalały :)
Da się zrobić. Dociąganie dependencji w moim silniku było proste, bo to wynikało z uzycia relacji (w sensie sparowanych referencji), skolei zapychanie załatwiłem poprzez użycie listy zapytań wyposażonej w komparator sortujący dependencjami - proste i użyteczne :)

No... tyle że ja musiałem pisac swój ORM, a Ty być może możasz skorzystać z istniejących rozwiązań...

No i to był mój 2 ORM jaki pisałem i wiedziałem co i jak pisać - wersja sprawnie działająca zajęła mi 10 dni roboczych. Jednak pisanie czegoś takiego jest naprawdę trudne i wymaga sporo praktyki - zatem sugeruję szukać narzędzi do replikacji, jezeli tylko o replikację Ci chodzi.Krzysztof Torenc edytował(a) ten post dnia 12.01.09 o godzinie 20:23
Zacheusz Siedlecki

Zacheusz Siedlecki Senior Java
Architect, Working
Manager

Temat: Narzędzie do baz danych

Może napisz dokładniej co chcesz zrobić i jakie są wymagania?Zacheusz Siedlecki edytował(a) ten post dnia 12.01.09 o godzinie 19:59
Krzysztof T.

Krzysztof T. Software maker

Temat: Narzędzie do baz danych

Zacheusz Siedlecki:
Może napisz dokładniej co chcesz zrobić i jakie są wymagania?

Zacheusz, jest przecież jasno:

Dostałem zadanie stworzenia narzędzia służącego do przenoszenia
danych między bazami
( w moim przypadku jest to pomiędzy MS SQL Server 2000 a 2005 ).


ma napisac toolsa wykonującego replikację poszczególnych rzeczy, bo z jakiejś przyczyny adminowi sie nie chce użyc żadnego specjalizowanego replikatora.Krzysztof Torenc edytował(a) ten post dnia 12.01.09 o godzinie 20:20
Maciek Z.

Maciek Z. programista
Java/J2EE

Temat: Narzędzie do baz danych

Wspomnę jeszcze, że program ma też wstawiać w odpowiednie miejsca id wartości słownikowych. Bo w źródłowej bazie jest np.
place = 'Łódź' a w docelowej ma być placeid = {id dla wartości słownikowej Łódź }.
Krzysztof T.

Krzysztof T. Software maker

Temat: Narzędzie do baz danych

Maciek Zaremba:
Wspomnę jeszcze, że program ma też wstawiać w odpowiednie miejsca id wartości słownikowych. Bo w źródłowej bazie jest np.
place = 'Łódź' a w docelowej ma być placeid = {id dla wartości słownikowej Łódź }.

czyli przetwarzanie w locie ?
Zatem zwykły replikator Cię nie urządza.
Musisz wyszarpać rekord, przetworzyć i zapchać, oznaczyć w starej bazie że był już pchany coby nie powtórzyć operacji z danym rekordem... no i oczywiście przed zapchaniem rekordu potraktować w powyższy sposób dependencje.
Względem dependencji to relacje M2M i M2O Cię interesują, O2M jest bezbolesna. Ponadto zadbaj by na nowej bazie sekwencje miały liczniki wyżej wartościowane niż liczniki na starej bazie, bo będzie kwas :|

No i masz do wyboru - wpiąć się jakimś hibernatem czy wprost JDBC i analizować model by szarpac dependencje (bo polegniesz na spójności danych) albo natrzaskać swój ORM który takie rzeczy będzie sam z siebie czynił - ale to trudne jest.
Możesz też się oprzeć o onalizowanie metadanych i modlić się by w starej bazie wszystkie rzeczywiste referencje były jawnie zreferowane, bo jeżeli nie są a w nowej ta niedoróba zostanie poprawiona to sie posypie.
Do tego dochodzi walidacja pod kątem typu danych i wielkości przy zapychaniu - może być potrzebne obcięcie, dopełnienie wartości czy translacja typu (nie wiem w jakim stopniu są spójne schematy) dlatego analizować musisz i model wejściowy.

Masz spory rebus do rozwiązania.
To co mogę zasugerować - jeżeli bazy są spore a chcesz uniknąc potęznego klepania to nie używaj specjalizowanych encji (tabela->pojo) tylko zbuduj mechanizm generalizujący, tak by zmielił wszystko cokolwiek doń wrzucisz (możesz dokładać odpowiedni konfig do wybranych tabel by wymusić dodatkowe zachowania/określone przetworzenie... czyli cos jak sterowanie proceduralne)

Powodzenia życzę.
Temat bardzo ciekawy i dość przyjemny - jeżeli specjalizujesz się w backendzie. Jeżli backend nie jest Twoją mocną stroną to doradzam posłużyć się spychologią stosowaną bo władujesz na minę i siebie i firmę. Ten temat jest dla człowieka silnego w backendzie.
Jakub Grabowski

Jakub Grabowski Tworzenie aplikacji,
integracja SOA,
outsourcing,
szkolen...

Temat: Narzędzie do baz danych

A może spróbować wysokopoziomowo z narzędziem specjalizowanym do takich zadań, czyli czymś z grupy ETL - Extract, Transform & Load?
Robiłem podobne projekty na narzędziu ETLowym z komercyjnego JCAPS'a.
Z opensource'owych produktów znam ETLSE z projektu OpenESB (następca narzędzia, którego używałem). Niestety jest jeszcze w powijakach i trudno się przez to przebić, bez znajomości poprzednika.
Poza tym co wymieniłem na pewno znajdziesz wiele innych narzędzi z grupy ETL. Może coś Ci przypadnie do gustu...
Krzysztof T.

Krzysztof T. Software maker

Temat: Narzędzie do baz danych

Jakub Grabowski:
A może spróbować wysokopoziomowo z narzędziem specjalizowanym do takich zadań, czyli czymś z grupy ETL - Extract, Transform & Load?
Robiłem podobne projekty na narzędziu ETLowym z komercyjnego JCAPS'a.
Z opensource'owych produktów znam ETLSE z projektu OpenESB (następca narzędzia, którego używałem). Niestety jest jeszcze w powijakach i trudno się przez to przebić, bez znajomości poprzednika.
Poza tym co wymieniłem na pewno znajdziesz wiele innych narzędzi z grupy ETL. Może coś Ci przypadnie do gustu...

w tym co robiłem zapotrzebowanie na replikację to był ułamek projektu (choć dość istotny ułamek) więc innych rozwiązań nawet nie poszukiwałem bo i tak jedyne co mogły wniesc to zamieszanie w projekcie. ...no ale tu zdaje się nic poza replikacją z przetwarzaniem nie będzie (przynajmniej tak narazie rozumiem projekt) i ETL mógłby być i efektowny i efektywny.
Szczerze mówiac nie zetknęłem się z tym - zatem poproszę o większą garść informacji i ogólne wrażenia z użycia. Jak się to ma do obciążenia, czy daje sobie radę z dużą zmiennością modelu podczas translacji (baza wyjściowa nie przypomina wejściowej), czy jest możliwość walidacji pod kątem merytorycznej zawartości krotki ?Krzysztof Torenc edytował(a) ten post dnia 13.01.09 o godzinie 10:58
Daniel Kumór

Daniel Kumór Senior Sofware
Engineer

Temat: Narzędzie do baz danych

Ja polecam Pentaho Data IntegrationDaniel Kumór edytował(a) ten post dnia 13.01.09 o godzinie 12:28
Zacheusz Siedlecki

Zacheusz Siedlecki Senior Java
Architect, Working
Manager

Temat: Narzędzie do baz danych

Krzysztof Torenc:
Zacheusz Siedlecki:
Może napisz dokładniej co chcesz zrobić i jakie są wymagania?

Zacheusz, jest przecież jasno:

Dostałem zadanie stworzenia narzędzia służącego do przenoszenia
danych między bazami
( w moim przypadku jest to pomiędzy MS SQL Server 2000 a 2005 ).


ma napisac toolsa wykonującego replikację poszczególnych rzeczy, bo z jakiejś przyczyny adminowi sie nie chce użyc żadnego specjalizowanego replikatora.
Właśnie chodzi o to czy to ma być replikacja w celu synchronizacji podczas działania czy jest to sytuacja w której można użyć gotowych kombajnów do ETL. Stąd moje pytanie. Jeśli masz przenieść dane z "zamrożonej" bazy zadanie jest znacznie prostsze i jest trochę wyspecjalizowanych, gotowych narzędzi do tego. Można też wykorzystać coś (jak wspomniał kolega wyżej) z ESB - na przykład Mule - to juz właściwie w obydwu przypadkach może okazać się przydatne. Ważne jest też czy bazy między którymi przenosimy dane mają takie same schematy czy różne itd.
Mimo wszystko nasze rozważania można uznać za gdybanie gdy nie wiemy co dokładnie ma być zrobione.Zacheusz Siedlecki edytował(a) ten post dnia 14.01.09 o godzinie 00:12
Krzysztof T.

Krzysztof T. Software maker

Temat: Narzędzie do baz danych

Zacheusz Siedlecki:

no masz rację Zacheusz,
ja mimowolnie załozyłem że NIE JEST to replikacja z martwej bazy i że schematy są różne (muszą być skoro wartości mają być podmienione na IDki słownika). Załozyłem też że "podobne" części schematu nie będą identyczne - często baza jest zrobiona zwyczajnie niechlujnie, bo nikt nie lubi dłubaniny i zazwyczaj spychana jest ona (dłubanina) do ludzi o najniższej chierarchii (i umiejętnościach) w zespole. I bez znaczenia jest czy niskiej jakości jest baza wejściowa czy wyjściowa.
Replikatory automagiczne z którymi do tej pory miałem miejsce musiały być wyposażone w bazodanowca który co jakiś czas a to zmieni skrypt a to cos popchnie... ale to dawne czasy i może obecne narzędzia pozwolą na zautomatyzowanie procesów (zakładam iz nie jest to operacja jednorazowa bo zwyczajnie nie potrzeba by pisać narzędzia, wystarczył by zmyślny bazodanowiec).Krzysztof Torenc edytował(a) ten post dnia 14.01.09 o godzinie 10:50



Wyślij zaproszenie do