5

私は Scala DB フレームワーク/ラッパーを調査していて、Twitter から Gizzard に出会いました。最初は感動しましたが、制限を読んで冷静になりました。彼らは、あなたが行うすべての DB 操作はべき等である必要があると言います可換。ちゃんと理解すれば、基本的にはほとんど何も残らない。例として、整数カウンターを持つエンティティがあり、インクリメントする必要があるとします。「増分」操作または「設定」操作のいずれかを使用できます。しかし、increment は冪等ではなく (2 回実行すると、1 回実行すると異なる結果が得られます)、set は可換ではありません (最初に 5 を設定し、次に 2 を設定すると、最初に 2 を設定し、次に 5 を設定すると、異なる結果が得られます)。したがって、ほとんどのユースケースであまり役に立たない「insert-if-absent」以外に何か残っているものはありますか? 基本的に何も役に立たないほど制約されている分散データベースフレームワークのポイントは何ですか? 私は何か重要なものを見逃しているに違いない。

[編集] 「insert-if-absent」(および「delete-if-present」) とは別に、「compare-timestamp-and-set」は、変更が破棄される代わりにキューに入れられる場合、冪等かつ可換であると思います。 「以前の変更」がまだ欠落している場合。しかし、DBがそれを実装しているかどうかはわかりません。

4

2 に答える 2

6

一般に、べき等アクションは、アクションを実行する前に状態をチェックする必要があります。データベース更新のコンテキストに適用する場合、これは、更新する前に変更しようとしているデータの状態を確認することを意味します。例えば:

update some_table set
some_column = 'some_new_value'
where id = 123
and some_column = 'its_current_value'; -- idempotent check

これが2回実行された場合、2番目の呼び出しは何もしません。

可換であるためには、2つの更新がデータ状態のさまざまな側面(さまざまな列/行)に影響を与える必要があります。つまり、各べき等チェックの有効性は、他のコマンドの更新アクションの影響を受けてはなりません。

于 2011-08-15T08:27:36.350 に答える
2

可換演算は、値を単調に増加させる演算です。上記の操作の冪等の例は次のとおりです。

  • セットへの要素の挿入、
  • 値を数値とその前の値の最大値に設定し、
于 2011-10-28T13:33:30.617 に答える