Zbudowałem tę aplikację internetową (php i mysql), która przechowuje informacje dla różnych organizacji (obecnie około 20 klientów).
Bieżący scenariusz przechowuje informacje związane z klientem w poszczególnych bazach danych, więc istnieje 20 baz danych klientów i 1 główna baza danych.
Jedną z głównych zalet jest to, że ponieważ każda baza danych klienta jest izolowana, numeracja artefaktów klienta (raporty, audyty) itp. Jest sekwencjonowana; dając naszym klientom poczucie bezpieczeństwa.
Każdy DB ma w przybliżeniu 15 tabel, a najwięcej wierszy w tabeli ma około 2000. Oczekuje się, że zostanie to maksymalnie zwiększone do 5000 rekordów.
Zarządzanie pojedynczą zmianą poziomu db oznacza zmianę 20 baz danych, ale w rzadkich przypadkach, gdy muszę wprowadzić taką zmianę, używam skryptu, który robi to w pojedynczym wywołaniu funkcji.
Jesteśmy na wspólnej platformie hostingowej, a nasz dostawca usług internetowych zapewnia nam ograniczoną liczbę nie. baz danych; i to właśnie skłoniło mnie do myślenia o scentralizowaniu bazy danych; aby WSZYSTKIE dane klienta mogły być przechowywane w głównej bazie danych.
Oczywiście pojawiają się następujące ważne kwestie:
za. Utrzymanie sekwencji artefaktów (można to rozwiązać, tworząc dodatkowy klucz referencyjny) b. Szybkość i wydajność (w takim przypadku mogę tworzyć indeksy w celu przyspieszenia rzeczy) c. Bezpieczeństwo: będzie zarządzany jako każde zapytanie, które pobiera informacje o kliencie. będzie również śledzić ich identyfikator_ klienta
W przyszłości być może będziemy musieli rozważyć porównanie zestawów danych jednej organizacji z inną, ale uważam, że można to osiągnąć również w scentralizowanym pliku danych. Jestem nieco skłonny (ze względu na wydajność i łatwość konserwacji) do przejścia do scentralizowanej bazy danych.
Czy uważasz, że przejście do scentralizowanej bazy danych ma większy sens niż pozostanie takim, jakim jesteśmy (w poszczególnych bazach danych)?
Dzięki za radę.
Odpowiedzi:
Oba systemy dziedziczą ryzyko i korzyści. Pracowałem dla firmy finansowej, która obsługiwała około 40 klientów (banków krajowych) w 1 bazie danych. Następnie kupiliśmy inną firmę, która sprzedawała podobne oprogramowanie i która posiadała 1 bazę danych na klienta. W końcu firma zbankrutowała i musieliśmy wyeksportować wszystkie dane użytkownika. Oto ludzie, z którymi pracowałem i które znalazłem:
Pro z Single DB:
Con's of Single DB:
Pro z wielu baz danych:
Wady wielu baz danych:
W końcu moim zaleceniem, które widziałem i zrobiłem oba, jest „dyscyplina”! Myślę, że wybór wielu baz danych jest nieco lepszy, ponieważ chroni cię, ale nigdy nie możesz pozwolić klientom dokonać wyboru, który spowoduje, że dodasz funkcjonalność tylko do nich lub będziesz narażony na porażkę.
źródło
Miałbym osobną bazę danych dla oddzielnych klientów. Klient może tego wymagać ze względów bezpieczeństwa - tj. Tylko ich strona ma dostęp do swoich danych. Oznacza to również, że jeśli klient chce przenieść swoje dane to będzie dużo łatwiejsze do zarządzania.
Oznacza to również, że jeśli występuje problem z bazą danych jednego klienta, nie wpływa to na wszystkie pozostałe.
Jeśli chcesz porównać dane między klientami, powinieneś to zrobić osobno.
Jeśli brakuje Ci baz danych, które możesz mieć, być może powinieneś rozważyć zmianę dostawcy hosta.
źródło
Jedynym powodem, dla którego nie miałbym osobnej bazy danych dla każdego klienta, jest to, że masz 100 lub 1000 klientów / baz danych. Może to być naprawdę włochate w zarządzaniu, w tym wprowadzanie zmian w bazie danych lub robienie czegoś we wszystkich bazach danych. Działania wykonywane w wielu bazach danych mogą być również powolne, ponieważ trzeba otworzyć (a zatem zamknąć) tak wiele tabel.
Ale oprócz tego przypadku uważam, że wiele baz danych jest lepszych.
Jedną z zalet, która może nie być ważna, ale może być użyteczna, jest to, że każdy klient otrzymuje własne sekwencyjne identyfikatory (zamiast ewentualnego pomijania grupy, ponieważ inni klienci dodali rekordy).
Ponadto wiele baz danych pozwala łatwo dostosować tabele podrzędne (takie jak typ telefonu) dla każdego klienta bez potrzeby posiadania identyfikatora rekordu nadrzędnego w tych tabelach.
źródło
Najpierw sekwencjonowanie artefaktów. Zakładam, że do tego celu używasz liczb całkowitych. Naprawdę powinieneś mieć osobną kolumnę „numer artefaktu”. PK powinny być PK i niczym więcej. Ludzie mówią o „naturalnych kluczach” i tym podobnych, a ja kulę się. Ilekroć polegasz na tym, że PK jest czymś więcej niż identyfikatorem, wraca, by cię ugryźć. Jeśli chcesz poznać sekwencję czegoś, zapisz datę lub numer sekwencyjny.
Myślę, że w twoim przypadku zarządzanie konfiguracją doprowadziłoby cię do pojedynczej bazy danych. Zobacz, ile kosztuje utrzymanie i aktualizowanie baz danych. Jakie koszty wiążą się z każdą wersją oprogramowania? Zastanów się także nad kosztem, gdy pozyskasz nowego klienta i musisz utworzyć bazę danych i skonfigurować dla niej aplikację. Wszystko można zautomatyzować, pytanie brzmi: czy warto, jeśli masz 100 baz danych?
W przyszłości łatwiej jest skalować (partycjonowanie, sprzęt, dzielenie itp.) Pojedynczej bazy danych, niż zrobić to samo dla 100 baz danych.
Myślę, że inni plakaty napisali kilka doskonałych punktów, więc nie będę ich omijał.
źródło
Aby dodać do wymienionych dotychczas pro / conów:
Pro wielu baz danych:
Unika się problemów z blokowaniem; mamy bazy danych, w których klienci mogą wywoływać zmiany DDL w niektórych tabelach. W przypadku większych tabel (> 2m rekordów) blokuje to tabelę na znaczny czas. Jedynymi osobami w niekorzystnej sytuacji są ich użytkownicy, więc jest to w pewnym sensie dopuszczalne.
Elastyczność - niektórzy klienci mają określone życzenia dotyczące danych, które chcą przechowywać; multi-baza danych pozwoliła nam elastycznie modyfikować swoją bazę danych bez konieczności zaśmiecania modelu danych innych klientów.
Cons:
Powodzenia w wyborze!
źródło
Wiem, że już wybrałeś odpowiedź, ale wygląda na to, że istnieje inne rozwiązanie, które nie zostało zasugerowane:
Przenieś wszystko do jednej bazy danych, ale utwórz tabele dla każdego klienta, używając prefiksu, takiego jak ten:
To trochę najlepsze z obu światów.
źródło