Jestem programistą SQL (nie DBA ani architektem) dla małej (ok. 50 pracowników) firmy SaaS. Zadanie polega na ustaleniu, jak:
- Odciąż raportowanie operacyjne z naszych ponad 100 baz danych OLTP
- Zezwalaj na uruchamianie tych raportów na danych z wielu baz danych klientów
- Ustaw naszą firmę na dostarczanie w przyszłości większej liczby rozwiązań analitycznych
Przeczytałem wiele artykułów na temat różnych technologii, takich jak replikacja transakcyjna (w szczególności model abonenta centralnego), broker usług SQL, wysyłka dzienników, śledzenie zmian (CT) i przechwytywanie danych zmian (CDC, rozumiem, że dotyczy to wyłącznie przedsiębiorstw) i nie jestem pewien, którą ścieżkę najlepiej wybrać.
Mam nadzieję, że niektórzy z was posiadający wiedzę na temat integracji mogli napotkać konfigurację podobną do naszej i być w stanie wskazać mi udaną ścieżkę lub skierować mnie do niektórych zasobów, które byłyby pomocne.
Ze względu na ograniczenia kosztów nasze rozwiązanie musi działać w ramach SQL Server Standard Edition. Ponadto, rozwiązanie musi być uzasadnione, aby wspierać / utrzymywać w naszej małej organizacji.
Podstawowa konfiguracja:
Obecnie mamy ponad 100 indywidualnych baz danych klientów, większość wdrożonych na serwerach SQL w naszym centrum danych, ale niektóre wdrożone na serwerach klientów w ich centrum danych, do których możemy zdalnie. Są to wszystkie bazy danych SQL Server 2008 R2, ale wkrótce planujemy uaktualnienie do SQL 2016.
Korzystamy z projektów baz danych i dacpaców, aby upewnić się, że schemat jest taki sam we wszystkich bazach danych klientów, które byłyby zintegrowane. Ponieważ jednak nie zmuszamy wszystkich klientów do aktualizacji do nowych wersji w tym samym czasie, możliwe są pewne różnice w schemacie między aktualizacjami. Rozwiązanie musi być wystarczająco elastyczne, aby nie uległo awarii, jeśli klient A jest w wersji oprogramowania 1.0, a klient B w wersji 1.1.
Raporty operacyjne są obecnie uruchamiane bezpośrednio z bazy danych OLTP każdego klienta. Niepokoi nas wpływ, jaki będzie to miało wpływ na wydajność aplikacji, jeśli jej nie odciążymy.
Wymagania wysokiego poziomu:
Naszymi klientami są szpitalne sterylne wydziały przetwarzania (SPD), które oczekują aktualnych raportów z tego, co dotąd przetwarzały, gdzie znajdują się zapasy itp. Inwentaryzacja procesów SPD przez całą dobę, w tym w weekendy i święta. Ponieważ jednym z głównych celów tych wysiłków jest lepsze wsparcie raportowania operacyjnego, chcielibyśmy, aby dane były jak najbardziej zbliżone do czasu rzeczywistego, aby nadal spełniać potrzeby klientów.
Obecnie mamy kilka SPD w oddzielnych bazach danych, które w rzeczywistości są częścią tego samego systemu szpitalnego. Ci klienci chcą mieć możliwość raportowania względem wszystkich SPD w swoim systemie.
Mówiąc strategicznie, chcielibyśmy mieć możliwość łatwego agregowania danych u wszystkich naszych klientów, aby wspierać nasze wewnętrzne inicjatywy analityczne. Oczekujemy, że będziemy w stanie wykorzystać zebrane dane operacyjne jako źródło dla centrów danych / hurtowni.
Dotychczasowe myśli:
Wydaje się, że replikacja transakcyjna zapewniłaby najbardziej „rozwiązanie w czasie rzeczywistym”. Uważam, że ta odpowiedź jest szczególnie pomocna, ale obawiam się, że z powodu potencjalnych różnic w schemacie nie zadziała ona dla nas: replikacja wiele do jednego programu SQL Server
Przesyłanie dziennika nie wydaje się idealne, biorąc pod uwagę, że dziennika nie można przywrócić, gdy zapytania są aktywne. Muszę wyrzucić wszystkich, aby dziennik mógł zostać przywrócony, w przeciwnym razie dane staną się nieaktualne. Nie jestem pewien, czy można zastosować tę metodę do scentralizowania danych z wielu baz danych, ponieważ każdy dostarczony dziennik byłby przeznaczony tylko dla indywidualnej bazy danych, z której pochodzi.
Korzystanie z brokera usług SQL opóźnienie może być nieprzewidywalne, jeśli kolejka nie będzie w stanie nadążyć za liczbą komunikatów do przetworzenia.
CT identyfikuje tylko wersję dla każdego wiersza tabeli. Opóźnienie zależałoby od tego, jak szybko moglibyśmy przetworzyć coś w rodzaju pakietu SSIS dla każdej bazy danych w celu pobrania danych i wstawienia ich do centralnego repozytorium.
Czy musimy rozważyć replikację każdej bazy danych osobno, a może zastosować jakąś technikę wirtualizacji danych, aby połączyć dane z różnych replikowanych źródeł?
Wszelkie porady i wskazówki, które zechcesz udzielić, będą bardzo mile widziane.