Hintergrundeinführung
Range (Partitionierung) ist eine Technologie zur Datenbankverwaltung und Organisation von Daten. In einem verteilten System können wir Daten zur Organisation nach bestimmten Regeln aufteilen und durch Aufteilung und Zusammenführung eine dynamische Verwaltung erreichen, um die Abfrageleistung zu optimieren und die Skalierbarkeit und Verfügbarkeit des Systems sowie den Lastausgleich zu verbessern. Der Hauptinhalt dieser Live-Übertragung ist: Bereichsaufteilung und -zusammenführung im verteilten KaiwuDB-System.
Im Folgenden finden Sie einen Auszug aus einem Teil des Inhalts. Klicken Sie hier, um die vollständige Version anzuzeigen >> Videowiedergabe der Vollversion
KaiwuDB-Bereichsaufteilung
Einführung in die Spaltung
splitQueue ist für die Bereichsaufteilung verantwortlich. Die Bedingungen, die die Bereichsaufteilung auslösen, sind wie folgt:
- Erstellen Sie eine neue Datenbank oder Tabelle.
- Die Bereichsgröße überschreitet range_max_bytes.
- Der QPS von Range ist zu hoch und überschreitet kv.range_split.load_qps_threshold (Standardwert 250, konfigurierbar).
- Ändern Sie die Konfigurationszone des Index oder der Partition, um sie von der übergeordneten Ebene unabhängig zu machen. In besonderen Fällen wird die adminSplit-Aufteilung direkt aufgerufen, ohne SplitQueue zu durchlaufen.
- Beim Import einer großen Datenmenge wird ein Bereich automatisch in mehrere Bereiche aufgeteilt.
- Beim Importieren von Daten wird ein leerer Bereich vorab für Daten aufgeteilt, die später importiert werden können.
- Manuelle Aufteilung: Tabelle tabellenname aufteilen nach Werten (Schlüssel1, Schlüssel2,…); wobei Werte den Primärschlüsselwert darstellen. Wenn es sich um einen gemeinsamen Primärschlüssel handelt, können Sie mehrere Werte schreiben, die die Anzahl nicht überschreiten dürfen Primärschlüsselspalten.
Flussdiagramm des Split-Algorithmus
Ein bestimmter Knoten in KaiwuDB verfügt über einen separaten Thread/Worker, der im Hintergrund läuft, um die Aufteilung verwandter Bereiche zu verwalten. Die Bereichsaufteilung ist in zwei Phasen unterteilt: Phase 1 – Vorbereitung der Bereichsaufteilungsparameter; Phase 2 – Aktualisierung des Bereichs und seiner Indexstruktur.
Wie in der Abbildung dargestellt, dient der Prozess auf der linken Seite hauptsächlich der Vorbereitung für die Aufteilung des Bereichs:
Sperren Sie zunächst den Schlüsselwert des Schlüssels des geteilten Bereichs. Nachdem dieser Schlüsselwert gefunden wurde, passt das System den aktuellen Bereichsbereich an und verwendet den geteilten Schlüsselschlüsselwert als Endschlüsselwert der Partition.
Der Prozess erstellt einen neuen Bereich für die rechte Seite, dessen Startschlüsselwert der für die Aufteilung verwendete Schlüsselwert ist und dessen Endschlüsselwert der Endschlüsselwert des ursprünglichen Bereichs ist. Gleichzeitig wird nach der Aufteilung des ursprünglichen Bereichs seine Version iterativ um 1 aktualisiert und die aktualisierte Version wird gleichzeitig auf den linken und rechten geteilten Bereich angewendet.
Wenn die geteilten Parameter auf der linken und rechten Seite des Bereichs bereit sind, tritt der Prozess in die Systemdatenaktualisierungsphase ein. Zusammenfassend ist es erforderlich, Schreibanforderungen und Verarbeitungsanforderungen vorzubereiten Die Transaktion muss die folgenden Angelegenheiten abschließen:
Starten Sie eine neue Transaktion. Der Status lautet „Ausstehend“.
- Linken Bereich aktualisieren
- Schreiben Sie einen neuen rechten Bereich
- Aktualisieren Sie den entsprechenden Suchpfad der zweistufigen Baumstruktur des Big Mac-Index im linken Bereich
- Fügen Sie im rechten Bereich den entsprechenden Suchpfad der zweistufigen Baumstruktur des Big-Mac-Index ein
- Der Status der Aktualisierungstransaktion ist Committed
- Aktualisieren Sie den MVCC des linken und rechten Bereichs
- Bereinigen Sie die Schreibabsicht
An diesem Punkt ist die Aufteilung des gesamten Bereichs abgeschlossen.
Beispiel für einen Split-Trigger
Das folgende Debug-Trigger-Szenario tritt auf, nachdem die Bereichsgröße einen vorgegebenen kritischen Wert überschreitet. Jeder Bereich wird in einer seriellen Timer-Wartezeit verarbeitet. Nach dem Aufwachen der Uhr wird die Bereichsgröße überprüft. Wenn festgestellt wird, dass die Bereichsgröße etwa 70 MB beträgt und den vorgegebenen Bereich von 64 MB überschreitet, löst das System die Funktion „Bereich teilen“ aus, um den Bereich aufzuteilen, der die Kapazitätsgrenze überschreitet.
Der Hintergrund-Thread oder Worker überprüft kontinuierlich alle Bereiche auf Verarbeitung in einer Schleife.
KaiwuDB-Bereichszusammenführung (Zusammenführung)
Beispiel für eine Zusammenführung
Wie in der Abbildung gezeigt, nimmt die Größe der beiden benachbarten Bereiche stark ab, wenn der Benutzer eine große Datenmenge löscht, und das System führt sie zusammen.
Die folgende Abbildung zeigt den Effekt nach dem Zusammenführen der beiden vorherigen Bereiche: lem-str, str- verschwand, sodass nur noch lem- übrig blieb. Die Schlüsselwerte der beiden ursprünglichen Bereiche wurden im selben Bereich lem zusammengeführt . -. Dementsprechend wurde auch die Datenstruktur der zweiten Ebene des Big-Mac-Index angepasst und die Erbsenstruktur in der Baumindexstruktur der ersten Ebene ist verschwunden.
Bedingungen zusammenführen
Die Bedingungen für das Zusammenführen von Bereichen sind relativ streng und umfassen hauptsächlich: Das Zusammenführen ist nicht deaktiviert. Es gibt einen nächsten Bereich und dieselbe Konfigurationszone. Die Größe der beiden zusammenzuführenden Bereiche ist kleiner als „range_min_bytes“. Die Bereichsaufteilung von QPS wird nach dem Zusammenführen nicht ausgelöst
Letzteres bedeutet, dass die Zusammenführung nicht durchgeführt wird, wenn der Bereich, in dem sich die Daten befinden, heiße Daten enthält, da die Zusammenführung eine Teilung auslöst, was dazu führt, dass das System nicht normal funktioniert.
Flussdiagramm des Zusammenführungsalgorithmus
Wie in der Abbildung gezeigt, ist die Zusammenführung ebenso wie die Aufteilung in zwei Phasen unterteilt: die erste Phase – die Vorbereitung der Bereichsparameter; die zweite Phase – die Aktivierung von Transaktionen für die Verarbeitung der Bereichsaktualisierungen. Für den vollständigen Inhalt klicken Sie bitte, um den Inhalt der Vollversion anzuzeigen >> [Videowiedergabe der Vollversion] ( https://www.bilibili.com/video/BV11y421z7jH/?spm_id_from=333.999.0.0 )
Beispiel für das Merge-Debugging Die folgenden zwei schematischen Diagramme zeigen den spezifischen Prozess des Debuggens der Bereichszusammenführung und die entsprechenden bereichsbezogenen Parameter.