Posiadamy bardzo dużą bazę danych na poziomie przedsiębiorstwa. W ramach naszego modelu biznesowego wszyscy użytkownicy sieci odwiedzają nasze serwery internetowe o tej samej porze każdego miesiąca, co z kolei hamuje działanie naszej skrzynki SQL. Ruch uliczny jest bardzo duży i rośnie, im większa jest firma. Optymalizacja proc sql została wykonana, a sprzęt został już skalowany do bardzo wysokiego poziomu.
Chcemy teraz oddzielić bazę danych, abyśmy mogli poradzić sobie z rozwojem firmy i przyszłymi obciążeniami.
Zdecydowaliśmy, które konkretne dane powinny zostać podzielone. Jest to podzbiór naszej bazy danych, który jest wysoce wykorzystywany.
Moje pytanie dotyczy jednak danych niedzielonych, które są wspólne / uniwersalne. Przykładem takich danych może być na przykład tabela zapasów lub ewentualnie tabela pracowników, tabela użytkowników itp.
Widzę dwie opcje do obsługi tych wspólnych / uniwersalnych danych:
1) projekt 1 - Umieść wspólne / uniwersalne dane w zewnętrznej bazie danych. Wszystkie zapisy pojawią się tutaj. Dane te będą następnie replikowane w dół do każdego niezależnego fragmentu, umożliwiając każdemu niezależnemu odczytanie tych danych i wewnętrzne połączenie z tymi danymi w procesach t-sql.
2) projekt 2 - Daj każdemu odłamkowi własną kopię wszystkich wspólnych / uniwersalnych danych. Pozwól każdemu niezależnemu zapisywać lokalnie w tych tabelach i użyj replikacji scalającej SQL do aktualizacji / synchronizacji tych danych we wszystkich innych niezależnych fragmentach.
obawy dotyczące projektu nr 1
1) Problemy transakcyjne: Jeśli masz sytuację, w której musisz zapisać lub zaktualizować dane w odłamku, a następnie zapisać / zaktualizować tabelę wspólną / uniwersalną na przykład w 1 przechowywanym proc, nie będziesz już w stanie tego łatwo zrobić. Dane istnieją teraz w osobnych instancjach SQL i bazach danych. Konieczne może być zaangażowanie MS DTS, aby sprawdzić, czy można zapakować te zapisy w transakcję, ponieważ znajdują się one w osobnej bazie danych. Wydajność jest w tym przypadku istotna i w przypadku procesorów, które zapisują dane podzielone i wspólne, mogą być zaangażowane możliwości ponownego zapisu.
2) utrata integralności referencyjnej. Nie można wykonać integralności referencyjnej między bazami danych.
3) Przekodowanie dużych obszarów systemu, aby wiedział, że może zapisywać wspólne dane w nowej uniwersalnej bazie danych, ale odczytywać wspólne dane z odłamków.
4). zwiększone przejazdy do bazy danych. Podobnie jak w punkcie 1 powyżej, gdy natrafisz na sytuację, w której musisz zaktualizować dane podzielone i wspólne dane, będziesz musiał wykonać wiele podróży w obie strony, aby to osiągnąć, ponieważ dane znajdują się teraz w osobnych bazach danych. Trochę opóźnień w sieci tutaj, ale nie martwię się o ten problem tak bardzo jak powyższe 3.
obawy dotyczące projektu nr 2
W projekcie nr 2 każdy fragment otrzymuje własną instancję wszystkich wspólnych / uniwersalnych danych. Oznacza to, że cały kod dołączający lub aktualizujący wspólne dane nadal działa / działa tak jak dzisiaj. Zespół programistów potrzebuje bardzo mało przepisywania / przepisywania. Jednak ten projekt całkowicie zależy od replikacji scalania, aby zachować synchronizację danych we wszystkich fragmentach. dbas są wysoko wykwalifikowani i są bardzo zaniepokojeni tym, że replikacja scalająca może nie być w stanie sobie z tym poradzić i jeśli scalenie replikacji zakończy się niepowodzeniem, odzyskanie po awarii nie jest duże i może mieć na nas bardzo negatywny wpływ.
Ciekawe, czy ktoś poszedł z opcją projektowania # 2. Jestem również ciekawy, czy przeoczam trzecią lub czwartą opcję projektowania, której nie widzę.
z góry dziękuję.