Heim >häufiges Problem >Es gibt verschiedene Möglichkeiten, eine Datenbank aufzuteilen
Die Aufteilung der Datenbank umfasst: 1. Aufteilen nach Funktion [vertikale Segmentierung] und Einfügen von Tabellen, die sich auf verschiedene Funktionen beziehen, in verschiedenen Datenbanken. 2. Gemäß einem bestimmten Teil der Tabellenbereichsaufteilung der Feldwerte [horizontale Segmentierung]. Wenn die Datenmenge in einer bestimmten Tabelle immer größer wird und unerträglich wird, muss sie weiter segmentiert werden.
Mehrere Möglichkeiten, die Datenbank aufzuteilen:
1. Teilen nach Funktion (vertikale Segmentierung)
Fügen Sie Tabellen zu verschiedenen Funktionen in verschiedene Datenbanken ein. Der Vorteil besteht darin, dass es sehr intuitiv ist. Wenn jedoch das Datenvolumen oder die Leistungsanforderungen eines bestimmten Teils der Funktion den kontrollierbaren Bereich überschreiten, muss er weiter segmentiert werden.
2. Aufteilen nach dem Bereich eines bestimmten Feldwerts in der Tabelle (horizontale Segmentierung)
Wenn die Datenmenge in einer bestimmten Tabelle immer größer und unerträglich wird, muss eine weitere Segmentierung erfolgen. Eine Möglichkeit besteht darin, basierend auf dem Schlüsselbereich zu segmentieren, beispielsweise die IDs 1–10000 auf A und die IDs 10000–20000 auf B zu platzieren. Eine solche Ausweitung ist absehbar. Die andere besteht darin, nach einem bestimmten Feldwert zu dividieren. Wenn der Benutzername beispielsweise A-D ist, gehört er zu A und E-H gehört zu B. Auch hier besteht ein Ungleichgewicht. Wenn ein bestimmter Bereich den Bereich überschreitet, den ein einzelner Punkt ertragen kann, muss er weiterhin geteilt werden. Es gibt auch eine Segmentierung nach Datum usw.
Vorteile: Die Größe einer einzelnen Tabelle ist kontrollierbar, natürliche horizontale Erweiterung
Nachteile: Das Problem zentraler Schreibengpässe kann nicht gelöst werden.
3. Bei der Hash-basierten Segmentierung
wird im Allgemeinen Mod zum Segmentieren verwendet. Zu Beginn wird die Anzahl der zu segmentierenden Datenbanken festgelegt, und der Hash-Modul wird verwendet, um zu bestimmen, welche verwendet werden soll. Mit dieser Methode können Daten gleichmäßig verteilt werden. Wenn jedoch die Datenmenge zunimmt und eine Erweiterung erforderlich ist, kann mit dieser Methode keine Online-Erweiterung erreicht werden. Jedes Mal, wenn ein Knoten hinzugefügt wird, muss der Hash-Algorithmus neu berechnet werden.
Daher wird empfohlen, mit dieser Methode Mod 2^n konsistentes Hashing zu verwenden
Am Beispiel der einheitlichen Auftragsdatenbank von Dianping beträgt die Lösung für Unterdatenbank und Untertabelle 32 *32, d. h. Die letzten vier Ziffern der Benutzer-ID werden durch Mod 32 in 32 Bibliotheken unterteilt. Gleichzeitig wird jede Bibliothek mithilfe der letzten vier Ziffern der Benutzer-ID Div 32 Mod 32 in 32 Tabellen unterteilt, was einer Gesamtzahl von 1024 entspricht Tische. Die Online-Bereitstellung umfasst 8 Cluster (Master-Slave), jeder Cluster verfügt über 4 Bibliotheken
4. Segmentierung basierend auf der Routing-Tabelle
Die vorherigen Methoden bestimmen alle Vorgänge basierend auf Anwendungsdaten. Die Segmentierung basierend auf der Routing-Tabelle ist eine entspanntere Methode. Es verwaltet eine separate Routing-Tabelle und durchsucht die Routing-Tabelle, um basierend auf einem bestimmten Attribut des Benutzers zu entscheiden, welche Datenbank verwendet werden soll.
Vorteile: Der Zuordnungsalgorithmus von ID und Bibliothek kann nach Belieben geändert werden
Nachteile: Es können zusätzliche Einzelpunkte eingeführt werden
Das obige ist der detaillierte Inhalt vonEs gibt verschiedene Möglichkeiten, eine Datenbank aufzuteilen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!