以下に 2 つの簡単なアイデアと参考文献を示します。
1) カウンタを 1 ずつインクリメントする代わりに、N ずつインクリメントして、クライアントにトランザクション識別子の範囲 [c, c+N) を効果的に与えます。たとえば、N=5 でカウンターの初期値が 1 の場合、クライアント A、B、および C は次のようになります。
A: [1, 2, 3, 4, 5]
B: [6, 7, 8, 9, 10]
C: [11, 12, 13, 14, 15]
これによりアトミック カウンターへの負荷が軽減されますが、この例からわかるように、一部のクライアント (クライアント C など) は比較的高い範囲の ID を取得し、他のクライアント (クライアント A) はより低い範囲の ID を取得します。これにより、中断率が高くなります。システムで。
2)インターリーブされたトランザクション ID の範囲を使用します。これは 1 に似ていますが、ステップ変数 S を追加しました。簡単な例を次に示します。N=5 で S=3 で、カウンターの初期値が 1 の場合、クライアント AB と C は次のようになります。
A: [1, 4, 7, 10, 13]
B: [2, 5, 8, 11, 14]
C: [3, 6, 9, 12, 15]
これで 1 の問題は解決したように見えますが、クライアント D について考えてみます。
D: [16, 19, 22, 25, 28]
ここで、解決策 1 と同じ問題に戻ります。「正しく理解する」ためには、このテクニックを使ってトリックを行う必要があります。
3) トランザクション ID を割り当てる興味深い、しかしより複雑な分散型の方法がここで説明されています。
Tu、Stephen、Wenting Zheng、Eddie Kohler、Barbara Liskov、Samuel Madden。「マルチコア インメモリ データベースでの高速トランザクション。」オペレーティング システムの原則に関する第 24 回 ACM シンポジウムの議事録、pp. 18-32。ACM、2013年。