Clickhouse-Lösung zur automatischen Feldinkrementierung

Implementiert mit rowNumberInAllBlocks()

Fallstrick bei Feldeinstellungen für die automatische Inkrementierung von rowNumberInAllBlocks()

In Tabellen, die die Tabellen-Engine „ReplaceingMergeTree“ verwenden, wird rowNumberInAllBlocks() verwendet, um die ID während des Einfügens zu erhöhen. Bei der Verteilung wird die ID in jedem Cluster erhöht. Wenn die Zusammenführung auf der ID basiert, wird die Datenmenge halbiert.

Das Diagramm sieht wie folgt aus:

Wenn Sie Daten in eine neue Tabelle einfügen und rowNumberInAllBlocks() verwenden, um eine neue Spalte von atuo_id zu erhöhen, werden Sie feststellen, dass derselbe Wert von atuo_id die Wiederholung der Anzahl der Clusterserver ist. Wenn beispielsweise drei Server im Cluster vorhanden sind Cluster, dann gibt es drei Inkremente von atuo_id von 1.

wie das Bild zeigt:

Wenn die Anzahl der Cluster gering ist, kann sie auf folgende Weise gelöst werden:

Methode 1: Ändern Sie eine Tabellen-Engine wie MergeTree, aber die ID ist immer noch dieselbe wie oben. Da die ID nicht aktualisiert werden kann, fügen Sie ein id_auto-Feld hinzu, legen Sie aber wiederum fest, dass das id_auto-Feld in der lokalen Tabelle mit rowNumberInAllBlocks() inkrementiert wird. Beachten Sie, dass Sie dies auf dem Server der Reihe nach tun müssen. Bei jeder Ausführung müssen Sie den Maximalwert von id_auto nach der letzten Ausführung prüfen und ihn automatisch auf diesen Wert erhöhen.

Methode 2: Anstatt die Tabellen-Engine zu ändern, verwenden Sie die Tabellen-Engine ReplacingMergeTree. Die Lösung besteht darin, lokale Tabellen zu verwenden und die lokalen Tabellen einzufügen, in die die Tabellen eingefügt werden sollen. Bestimmen Sie nach jeder Einfügung den Maximalwert der eingefügten Tabellen-ID , und fügen Sie den Maximalwert in der Tabelle zu rowNumberInAllBlocks() hinzu. value

Ich denke du magst

Origin blog.csdn.net/qq_41110377/article/details/128634788
Empfohlen
Rangfolge