In diesem Artikel werden hauptsächlich die Funktionsweise und die Zusammenfassung der MyBatis-Implementierung der Unterdatenbank und Tabelle der MySQL-Datenbank vorgestellt
Als Datenbank, als Tabelle in der Datenbank, wenn die Anzahl der Benutzer zunimmt und die Zeit vergeht, wird die Datenmenge eines Tages so groß sein, dass sie schwer zu handhaben ist. Zu diesem Zeitpunkt beträgt die Datenmenge in nur einer Tabelle mehrere zehn Millionen, unabhängig davon, ob sie abgefragt oder geändert wird. Zu diesem Zeitpunkt ist eine Datenbanksegmentierung erforderlich. Die einfachsten Schritte zum Implementieren von Untertabellen in MyBatis
Da der Titel des Artikels so geschrieben ist, ist er praktischer Gehen Sie direkt zu den praktischen Informationen. Schauen wir uns zunächst an, wie die einfachste Untertabelle implementiert wird. 1. Das Datenvolumen unserer simulierten Benutzertabelle übersteigt mehrere zehn Millionen (obwohl dies eigentlich unwahrscheinlich ist) 2 Der ursprüngliche Name der Benutzertabelle lautet
, und wir teilen Es wird inund
unterteilt (eigentlich handelt es sich möglicherweise nicht um einen so zufälligen Namen), sodass die ursprünglichen zig Millionen Daten in zwei Tabellen mit einer Datenmenge von zwei Millionen aufgeteilt werden können. 3. Wie bedient man diese beiden Tabellen? Zur Unterscheidung verwenden wir die Benutzer-ID, die eindeutige Kennung des Benutzers.user_tab
4. user_tab_0
s Benutzeroperationstabelle user_tab_1
, ebenso
5. Wie implementiert man also die SQL-Anweisung in MyBatis? Das Folgende ist ein Beispiel für die Abfrage der SQL-Anweisung eines Benutzers userId%2 == 0
user_tab_0
userId%2 == 1
user_tab_1
Darunter übergeben wir zwei Parameter tabIndex und userId ist der Indikatorwert der Operation Tabelle (0 oder 1). Wenn Sie also den Benutzer abfragen müssen, dessen Benutzer-ID 5 ist, lautet die endgültige SQL-Anweisung:
<select id="getUser" parameterType="java.util.Map" resultType="UserDO"> SELECT userId, name FROM user_tab_#{tabIndex} WHERE userId = #{userId} </select>
Andere redundante DAO-Dienste und Implementierungen sind hier. Ich werde Ihnen nicht zu viel zeigen, ich glaube, Sie sind klug genug, es zu tun.
Das Obige ist die einfachste Implementierung. Es sind keine zusätzlichen Frameworks oder Plug-Ins erforderlich, um die Anforderungen von Untertabellen zu erfüllen.
SELECT userId, name FROM user_tab_1 WHERE userId = 5
Ich werde aus den folgenden Perspektiven darüber sprechen. Ich habe es in der einfachsten Umgangssprache ausgedrückt.
Trennungsmethoden
Es gibt zwei Hauptarten der Segmentierung: horizontale Segmentierung und vertikale Segmentierung. 1. Horizontale Segmentierung Um es einfach auszudrücken: Teilen Sie eine Tabelle in mehrere identische Tabellen auf, und dann sind die Tabellennamen unterschiedlich. Genau wie das einfachste Beispiel oben.
Diese Art der Segmentierung eignet sich für Situationen, in denen die Datenmenge in einer Tabelle zu groß ist und die Betriebszeit verlangsamt wird, z. B. bei einigen Tabellen mit gespeicherten Datensätzen.
2. Vertikale Segmentierung
Teilen Sie verschiedene Geschäftsmodule in verschiedene Datenbanken auf (vereinfacht gesagt, sie haben nichts miteinander zu tun).
Dies eignet sich vor allem für Situationen, in denen die Datenmenge im Allgemeinen groß ist und die Geschäftsszenarien verstreut sind und keine logische Beziehung zwischen ihnen besteht.
Trennungsstrategie
Sie können auch Ihre eigenen Strategien entwerfen: Es ist nur eine Liste ohne auf Details einzugehen. 1. „%“ Modulo, das im obigen Beispiel implementiert ist, ist auch das einfachste. 2. MD5-Hash
3. Datum und Uhrzeit (Teilen Sie die Tabellen nach verschiedenen Daten auf, z. B. eine Tabelle pro Monat, und bearbeiten Sie diesen Monat Tabelle wird nächsten Monat ersetzt)
5. Aufzählungsbereich (Benutzer 1-10000 bedienen die erste Tabelle, Benutzer 10001-20000 bedienen die zweite Tabelle)
Das Problem der Trennung
Lassen Sie uns über den letzten Punkt und die damit verbundenen Probleme sprechen.
Die Datenbank ist definitiv nichts, was man allein teilen kann. (Menschen sind emotionaler, wie können sie einfach Schluss machen?) Im Ernst, ich habe die folgenden Probleme aufgelistet, die eine Trennung nur verursachen wird. 1. Das Problem der Eindeutigkeit des Primärschlüssels beim Hinzufügen mehrerer Tabellen ist, dass der ursprüngliche selbsterhöhende Primärschlüssel nicht eindeutig ist, sodass es keine Möglichkeit gibt, sich selbst zu erhöhen, was zu Problemen führt. und es gibt Lösungen, wie zum Beispiel die Pflege einer separaten Primärschlüsseltabelle speziell zum Speichern des aktuellen Primärschlüssels oder die Verwendung anderer Middleware usw.
2. Obwohl das Effizienzproblem beim Hinzufügen neuer Daten kein großes Problem darstellt, erhöht das Hinzufügen neuer Daten definitiv den Rechenaufwand. Dieses Problem kann ignoriert werden.
3. Das durch die Abfrage verursachte Paging-Problem ist sehr schwierig. Dabei wird auch berücksichtigt, dass unterschiedliche Trennungen unterschiedliche Lösungen erfordern.
4. Ebenso war es bei verwandten Abfragen ursprünglich sehr einfach, eine Tabelle mit einer anderen Tabelle oder eine andere Tabelle mit einer Tabelle zu verknüpfen, aber jetzt ist es nach der Trennung schwierig.
5. Transaktionsprobleme müssen verteilte Transaktionen verwenden, um die ursprünglichen Vorgänge mit Transaktionen abzuschließen. Da die ursprüngliche Transaktion nur eine Tabelle sperrte, müssen jetzt möglicherweise mehrere Tabellen gesperrt werden.
6. Einige Sharding-Strategien verfügen nicht über eine gute Datenskalierbarkeit. Bedeutet das, dass Sie neue Tabellen zum Erweitern erstellen können?
Grundsätze der Trennung
Im Folgenden werden einige Grundsätze der Trennung zusammengefasst, die hauptsächlich auf Referenzen im Internet ohne tatsächliche Grundlage basieren (ich bin weder A Ein DBA mit einem Jahresgehalt von einer Million kann nicht auf so große Datenmengen stoßen, um sie tatsächlich zu testen. Wenn Sie also Fragen haben, weisen Sie diese bitte darauf hin.
1. Wenn du nicht trennen kannst, trenne dich nicht
2. Wenn du weniger trennen kannst, trenne nicht mehr
3
4 , Vermeiden Sie die Verwendung verteilter Transaktionen, hauptsächlich weil es zu schwierig ist und ich nicht weiß, wie es geht
5. Wenn eine einzelne Tabelle weniger als 10 Millionen Datensätze enthält, es wird nicht geteilt
6. Wenn Sie es jetzt nicht teilen, ist es zu spät, es später zu teilen
7. Erweiterung, Kopplung und sorgfältige Überlegung
Wie man eine Trennung erreicht
Lassen Sie uns abschließend über die Methode der Trennung sprechen, die mittlerweile beliebt ist. Das beste DAO-Framework ist MyBatis, aber es gibt noch viele andere Rahmen. Die Trennung wird hauptsächlich auf folgende Weise umgesetzt.
1. Für die native Implementierung ist, genau wie im obigen Beispiel, nichts anderes erforderlich. Verwenden Sie das native Framework, um die Implementierung selbst zu steuern.
Die Vorteile sind: einfache Kontrolle und Eigeninitiative.
Die Nachteile sind: Es gibt viel Code, Sie müssen ihn genau kennen, es ist unpraktisch, ihn zu ändern, und er unterstützt keine komplexe Segmentierung. Beispielsweise müssen Sie nach der Segmentierung einige Paging-Abfragen durchführen , sowie die oben genannten primären Schlüsselthemen usw.
2. Plug-in-Implementierung: Verwenden Sie einige vom Framework selbst entwickelte Plug-ins, um diese Plug-ins zu implementieren, und verwenden Sie dann die Plug-ins, um auf die Datenbank zuzugreifen und eine direkte Trennung zu erreichen.
Die Vorteile sind: weniger Code, einfache Implementierung und gute Skalierbarkeit.
Nachteile sind: schwer zu kontrollieren, begrenzte Trennmethoden und schwer zu lösende Probleme. Keine besonders ausgereiften Plug-ins gefunden.
3. Middleware-Implementierung. Verwenden Sie eine Middleware für den Datenbankzugriff, um vor dem Zugriff auf die Datenbank einige Vorgänge auszuführen und entsprechende Änderungen in SQL vorzunehmen, um eine Trennung zu erreichen.
Die Vorteile sind: geringe Kopplung, gute Skalierbarkeit und die Lösung des Problems verteilter Transaktionen.
Es ist definitiv so: Die Implementierung ist komplex, erfordert das Erlernen der Middleware und kostet viel. Auch die Wartung ist ein großes Problem, falls sie ausfällt. .
Kurz gesagt, jede Methode hat ihre eigenen Vorzüge, aber angesichts der Kosten kostet die erste Methode fast 0,00 €, Sie können loslegen und sie ist einfacher zu kontrollieren, genau wie das oben angegebene Beispiel und die Daten Ich bearbeite gerade: „Wir sind noch nicht so weit, dass wir uns überall trennen müssen, also wähle ich die erste Option.“ Auch empfehlenswert. Wenn Sie ein Plug-in oder eine Middleware finden, die einfacher zu verwenden ist, können Sie sie in den Kommentaren empfehlen.
Zusammenfassung
Im eigentlichen Projekt musste ich den Benutzer trennen, weil es zu viele Kontodatensätze gab und weil die Kontodatensätze vorhanden waren mehr Die meisten davon sind nur Neuzugänge ohne Änderung oder Löschung, und es gibt nur wenige Abfragen. Daher verwenden wir die einfachste Methode, um sie zu trennen und die einfachste Strategie zu wählen. Ich hoffe, dass die obige Zusammenfassung der Prinzipien, Strategien, Methoden und Probleme hilfreich und als Referenz für Sie sein kann. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und ich werde Ihnen rechtzeitig antworten. Ich möchte mich auch bei Ihnen allen für Ihre Unterstützung der Script House-Website bedanken!
Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel dafür, wie MyBatis die Unterdatenbank und Tabellenuntererklärung der MySQL-Datenbank implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!