Das einzige Problem ist, dass es keinen bequemen Weg gibt , diese Beziehungen durchzusetzen . Sie können eine Schiffsladung Trigger verwenden oder die Mastertabelle in jeder Instanzdatenbank speichern und einfach alle als Metadaten für den Master verfügbar machen, möglicherweise mithilfe einer Ansicht.
Der größte Nachteil, denke ich, hat damit zu tun, dass die Daten in mindestens drei Szenarien genau und synchron gehalten werden (all dies kann auch dann ein Problem sein, wenn Sie Trigger verwenden):
- Falsch koordinierte datenbankübergreifende Transaktionen - Beispielsweise fügt eine Transaktion dem Master eine neue Zeile hinzu, übergibt die Identität an eine andere Transaktion, und die erste Transaktion wird zurückgesetzt.
- Wiederherstellung nach einem einzelnen Datenbankfehler - Eine Datenbank stürzt ab. Sie müssen zu einem Zeitpunkt wiederherstellen, der möglicherweise vor Abschluss anderer erfolgreicher Transaktionen in anderen Datenbanken lag. Dies kann bedeuten, dass, wenn eine Instanzdatenbank auf einen früheren Zeitpunkt zurückgesetzt werden muss, Zeilen fehlen, die der Master erwartet. Wenn der Master zurückgesetzt werden muss, haben möglicherweise alle Instanzdatenbanken Werte, die im Master nicht vorhanden sind.
- Sicherungskonsistenz im Allgemeinen - Wenn Sie eine Notfallwiederherstellung benötigen, wird es Ihnen schwer fallen, alle Ihre vollständigen und protokollierten Sicherungen bis zu einem bestimmten Zeitpunkt transaktionskonsistent zu halten. Dateisystem-Snapshots helfen dabei nicht, und selbst Verfügbarkeitsgruppen garantieren keine datenbankübergreifende Transaktionskonsistenz für die Datenbanken in einer einzelnen Verfügbarkeitsgruppe. Wenn Sie eine Katastrophe haben und Ihre Datenbanken auf einem neuen System wiederherstellen müssen, können Sie nicht sicher sein, dass sie transaktionskonsistent sind.
Alles in allem war und bin ich immer ein Fan davon, Mieter in ihre eigenen Datenbanken aufzuteilen, und ich erkenne an, dass mit der zentralen Datenbank ein Risiko verbunden ist - aber es ist notwendig.
(Abgesehen davon sollten Sie andere Namen für Ihre Datenbanken als master / instance verwenden. master
In SQL Server hat dies definitiv eine explizite Bedeutung, und selbst das Lesen meiner eigenen Wörter darüber kann mehrdeutig sein. Gleiches gilt für instance
. In einem früheren Leben habe ich ein Multi ausgeführt -Mietersystem und wir haben die zentrale Datenbank Control
und die Mandantendatenbanken aufgerufen Tenants
.)