Integracja baz

0

Czy jest możliwość ustawienia jakiegoś mechanizmu (np. triggera) do przerzucania danych z jednej bazy do drugiej, bez konieczności pisania jakiejś aplikacji ? Mogę sobie napisać aplikację w Javie, łączyć się przez jdbc z jedną bazą, pobrać dane, połączyć się z drugą i załadować dane, ale jeśli da się bezpośrednio z poziomu bazy, bez drogi okrężnej, to bym się skłaniał raczej do zastosowania takiego rozwiązania. Ale czy to wg was ma sens i z czego skorzystać ?

0

Jaki system bazodanowy? Zależy co dokładnie chcesz zrobić?
W MS SQL Server masz np. linked server i za pomocą tego z poziomu jednego serwera możesz dobrać się do innego, właściwie nie tylko innego ms sql servera, ale każdego do którego da się po łączyć po ole db czy odbc i jakie tam inne providery masz.
Jeśli chcesz tego użyć żeby roić mirroring baz, czy synchronizację, to zdecydowanie nie tędy droga. Do takich celów są odpowiednie mechanizmy.

0

Więc załóżmy, że to 2 bazy na jednym serwerze MySQL. W razie, gdy jedna jest aktualizowana, druga też się musi zaktualizować o pewne dane z pierwszej. Czyli raczej zainteresować się konkretnym mechanizmem służącym do tego celu ?

0

Dwie bazy na jednym serwerze to też inna bajka. Łącząc się na danym użytkowniku do MySQL możesz mieć uprawnienia nie tylko do jednej bazy, ale do wielu i możesz na nich operować.
Może napisz co dokładnie chcesz osiągnąć, bo inaczej to trochę głupie gdybanie. Albo przetrzep dokumentację MySQL'a.

0

Ostatecznie jednak to będą 2 różne serwery. Chcę przenieść dane z konkretnych tabel pewnej bazy (MySQL) do konkretnych tabel innej bazy (innej niż MySQL). Nazwy tabel i pola mogą być różne. W dodatku odpowiednik danej tabeli w drugiej bazie może się różnić strukturą - np. posiadać dodatkową kolumnę. W drugim etapie muszę wmontować mechanizm, który w przypadku modyfikacji danych tabeli 1 będzie modyfikował dane tabeli 2.

0

Możesz poczytać o ETL i programach do wspomagania tego procesu. To pokrywa kwestię transportu danych z jednej bazy do innej z transformacjami.
Jeszcze pozostaje kwestia modyfikacji danych w pierwszej bazie i propagacji ich do innej. W momencie kiedy są to inne systemy bazodanowe, ale także bazy o innej strukturze, to chyba nie ma dobrego rozwiązania na poziomie samej bazy danych. Triggery w tej sytuacji byłyby głupotom (czyli modyfikacja w bazie 1 wyzwala trigger, który łączy się z bazą 2 i dokonuje modyfikacji).
Najlepszym rozwiązaniem jest DAL, który będzie modyfikował obie bazy (i ja poważnie rozważyłbym to rozwiązanie). Lub cykliczny mechanizm sprawdzający przyrost danych w bazie 1 i propagował je do bazy 2.
Rozwijając temat DAL'a, jeśli zmiany do drugiej bazy nie muszą propagować się online, to można użyć kolejek w celu uzyskania asynchroniczności i cyklicznie sprawdzać czy jest coś w kolejkach, lub reagować na minimum n wpisów etc. Myślę że to rozwiązanie, również jest warte rozważenia.

0

Pokłon. Dzięki za informacje. Interesuje mnie jeszcze jedna rzecz. Czy triggerem mógłbym uruchomić javową aplikację ? Lub inną, która potrafiłaby przekonwertować zawartość jednych tabel do drugich o nieco innym schemacie ?

0

Jeśli chodzi o mySQL to znalazłem coś takiego http://dev.mysql.com/doc/refman/5.0/en/adding-udf.html
Musisz sam sobie zgłębić, czyli hasło UDF (User Defined Function).
Chociaż wg mnie to nie jest dobry pomysł. Tzn. jeśli takie wywołanie nie blokuje triggera to ok lub że funkcja w C woła inny proces i zaraz wraca i trigger się kończy. Bo jeśli całe wywołanie będzie blokowało triggera to zdecydowanie nie rób tego.

0

Mnie ciekawi podobna rzecz. Mamy 3 bazy, każda inna (SQLServer, Sybase, Postgres), w której część tabel musi zawierać te same dane. Do każdej z baz podłączony jest inny program i np. dodając klienta w jednym, klient ten powinien przenieść się też do innych baz. Czy są do tego jakieś mechanizmy czy też trzeba będzie przerabiać programy żeby wrzucały dane do 3 baz naraz?

0

To jest raczej kwestia niezbyt udanej architektury, lub integracji systemów.
Albo przygotujesz do tej części wspólnej odpowiednie DAL, które zrealizują taką potrzebę i aplikacje będą używały wspólnego DAL, np warstwa webservice. Ale powstaje tu kilka problemów, co zrobić jeśli w bazie A i B insert się powiedzie a w C nie? Czyli dochodzimy do konieczności użycia rozwiązania zwanego transakcjami rozproszonymi.
Można także wydzielić część wspólną tych baz do innej bazy D. Oczywiście w bazach A, B, C popsujemy trochę relacyjność i mechanizmy walidacji danych z tym związane.
Tak, czy siak znacząca przebudowa systemów cię czeka.
Możesz też spróbować zmigrować wszystkie trzy bazy na jeden serwer, np. na ms sql, jeśli masz licencję na coś więcej niż express. Wtedy komunikacja pomiędzy bazami jest dość łatwa.

1 użytkowników online, w tym zalogowanych: 0, gości: 1