クリックハウスフィールド自動インクリメントソリューション

rowNumberInAllBlocks() で 実装

フィールド設定の自動インクリメント rowNumberInAllBlocks() の落とし穴

ReplacingMergeTree テーブル エンジンを使用するテーブルでは、rowNumberInAllBlocks() を使用して挿入中に ID をインクリメントします。分散すると、ID は各クラスターでインクリメントされます。マージが ID に基づいて行われる場合、データの量は半分になります。

回路図は以下の通りです:

新しいテーブルにデータを挿入し、rowNumberInAllBlocks() を使用してatuo_id の新しい列をインクリメントすると、 atuo_id の同じ値がクラスター サーバーの数の繰り返しであることがわかります。クラスターの場合、atuo_id は 1 に 3 回増加します。

写真が示すように:

クラスターの数が少ない場合は、次の方法で解決できます。

方法 1: MergeTree などのテーブル エンジンを変更しますが、ID は上記と同じです。ID は更新できないため、id_auto フィールドを追加しますが、その代わりに rowNumberInAllBlocks() を使用してローカル テーブルで id_auto フィールドがインクリメントされるように設定します。注意すべき点の 1 つは、これをサーバー上で順番に実行することです。実行するたびに、最後の実行後の id_auto の最大値を確認し、この値に基づいて id_auto を自動的にインクリメントする必要があります。

方法 2: テーブル エンジンを変更する代わりに、ReplacingMergeTree テーブル エンジンを使用します。解決策は、ローカル テーブルを使用し、テーブルが挿入されるローカル テーブルを挿入することです。挿入するたびに、挿入されたテーブル ID の最大値を決定します。を実行し、テーブル内の最大値を rowNumberInAllBlocks() に追加します。

おすすめ

転載: blog.csdn.net/qq_41110377/article/details/128634788
おすすめ