Mamy wielu klientów, których systemy mają pewną funkcjonalność, ale mają też dość dużą różnorodność. Rośnie liczba klientów - zawsze zdrowa rzecz! - a różnorodność między ich firmami również rośnie.
Obecnie istnieje jedna witryna sieci Web ASP.Net (formularze WWW) (w przeciwieństwie do projektu internetowego), która zawiera podfoldery dla każdego najemcy, wraz z niestandardowymi stronami tego najemcy. Istnieje osobny projekt modelowy, który zajmuje się dostępem do bazy danych i logiką biznesową.
Co jest lepsze - a co najważniejsze - dlaczego - między posiadaniem (a) 1 bazy danych na klienta, z tylko funkcjami powiązanymi z tym klientem; lub (b) pojedyncza baza danych współdzielona przez wszystkich klientów, przy czym tylko jeden zestaw tabel jest używany przez jednego klienta.
Główne obawy w branży dotyczą:
- utrzymanie wielu zasobów - kopii zapasowych, kontrola wersji i tym podobne
- promowanie ponownego wykorzystania w jak największym stopniu
W jaki sposób zapewniłbyś rozwiązanie tych problemów, które rozwiązanie jest lepsze i dlaczego? (Kompilowałem również odpowiedzi na podobne pytania)
źródło
Odpowiedzi:
Oto najważniejsze informacje z badań z innych źródeł (pierwotnie z wersji 2 pytania ):
Czy powinienem używać jednej bazy danych na aplikację lub udostępniać jedną bazę danych wielu aplikacjom
Wspieranie multitenancy
MSDN Multi-Tenant Data Architecture
SO Jak stworzyć bazę danych dla wielu dzierżawców ze wspólnymi strukturami tabel?
CloudExpo SaaS - Opcje projektowania baz danych dla wielu najemców
Blogi MSDN Przejście na model bazy danych wielu dzierżawców jest łatwiejszy dzięki federacjom SQL Azure
Zapytaj bazę danych SQL Server Central One lub wiele?
SQL Server Centralne mieszanie tabel z różnych baz danych / aplikacji w jedną bazę danych
Blog Ayende @ Rahien Multi Tenancy - model danych fizycznych
Code Project Architektura bazy danych wielu najemców
Joel o oprogramowaniu Projektowanie bazy danych dla wielu dzierżawców
SO Wiele aplikacji korzysta z jednej bazy danych?
SO Jedna lub wiele baz danych
Code Rant - Multi-tenancy Part 1, Strategy and Part 2, Components and Context
źródło
Jeśli używasz programu SQL Server, użyj jednej bazy danych, ale użyj schematów. Użyj dbo do rzeczy ogólnych dla wszystkich klientów i utwórz schemat dla każdego klienta i ustaw domyślny schemat dla użytkowników z tego klienta. Teraz możesz mieć ogólny obiekt (na przykład proc getBudget) w schemacie dbo i dostosowany dla klienta w schemacie o tej samej nazwie.
źródło
Ponieważ bazy danych klientów i funkcje są rozbieżne, oznacza to, że w pewnym momencie będą to różne systemy, więc w tym przypadku zaleciłbym osobne systemy, ponieważ koszty utrzymania dostosowań dla każdego klienta przeważą nad korzyściami pojedynczego system bazy danych.
Systemy z pojedynczą bazą danych są najlepsze, gdy zmiany między różnymi klientami są jedynie konfiguracjami, ale nie dodatkowymi funkcjami dla każdego klienta.
źródło
Brakuje Ci pewnych obaw. Problemy pojawią się wraz ze wzrostem. Jeśli możesz założyć, że pewnego dnia staniesz się większy niż jeden serwer DB - jedna złożona baza danych na pewno sprawi ci ból głowy. Chyba że wcześniej zainwestujesz w architekturę. Ale jest to również kosztowny krok)
Nie zapominaj więc, że zarówno wiele razy taniej, jak i wiele razy łatwiej skalować kilka różnych baz danych niż ogromne)
źródło
Jednym z obszarów, których nie widziałem w odpowiedziach, są problemy z prawidłowym zabezpieczeniem aplikacji DB dla wielu dzierżawców. Aplikacje dla wielu dzierżawców muszą być bardzo starannie zaprojektowane, aby uniknąć problemów z bezpieczeństwem. Większość baz danych i aplikacji zapewnia pewną, ale nie całkowitą izolację - zwykle istnieją sposoby bezpośredniego lub pośredniego wnioskowania na podstawie schematów DB. I sporo wspólnych zasobów (dzienniki i inne pliki, tabele DBA, kursory ...), które mogą przynajmniej prowadzić do łatwych ataków typu „odmowa usługi” na innych najemców i zwykle znacznie więcej.
źródło