Cassandras のドキュメントをたくさん読み、カウンターの変更などを確認しました。しかし、Cassandra には、その場でインクリメンタル シーケンスを生成するデフォルトの標準的な方法が同梱されていないようです。
私が見つけたのは、比較と設定を行ってIFステートメント/句を使用することだけです。
このようにして、ドキュメントの存在を確認し、存在しない場合はドキュメントを生成できます。これはクラスターと見なされるクォーラム アルゴリズムによって行われるため、使いやすく安全ですが、待ち時間が長くなります。
この待ち時間を回避するために、nextSequenceId を 1 ではなく 1000 ずつインクリメントすることで、1000 の ID を生成 (予約) できます。この方法では、最初の 1000 が生成されたときにのみレイテンシーの支払いが発生します (または、時期尚早に行われた場合、レイテンシーはほとんどありません)。
ホットスポットや混雑が発生することを理解しています。
この輻輳を回避する 1 つの方法は、より多くのシーケンス番号ジェネレーターをすべて異なるオフセット (モジュロ) で使用し、モジュロを選択して特定のシーケンス ジェネレーターをランダムに選択することで衝突の可能性を制限することです。
したがって、これは私の素朴な実装になります。
Cassandra 3.0 が登場して以来、私は次の 3 つのことを疑問に思います。
- Cassandra は、シーケンスを実装するよりスマートな方法を提供しますか?
- Cassandra は、これを実装する際の苦痛を和らげるものを提供していますか? つまり、比較して設定するよりも、読み取りを行うということです。もっと賢いものはありますか?
- ある種のシーケンス番号をすでに提供しているライブラリはありますか?