5

スカラー値に対する等価操作をサポートする分散型の高可用性、最終的に整合性のあるデータベースはありますか?偶数増加演算子を使用した、結果的に一貫性のある分散データベースですか?

通常の更新を使用すると、異なるノードに2つの異なる値があり、両方のトランザクション値で金額を増やす必要があるため、値が正しくない可能性があります。

私は応答を受け取ったときにその操作が現在のものに関係なく他のレプリカで実行されることができるように、コマンドの増分(key、attribute [column]、diff)アカウントの価値?このようにして、2つの異なるノードが異なる値で増加しても、その増加が他のレプリカに伝播するため、操作を増加させるための最終的な一貫性が得られます。

私は、それが高機能データベースのcassandra(その機能を持たない理由)で動作しないため、条件付きの更新については言及していません。原子増分操作に興味があります。

ありがとうございました。

P.S.それはすでに同じlock_key

TLと同じコマンドを受け取った場合、DBは増加しないだろうように、私は、コマンドの増加(キー、属性、デフ、lock_key)を持っているでしょう冪等の増加の場合 ; DR:

分散AP型データベースに正確なカウンタを作成する方法はありますか? 2つの問題: 1)カウンターを増やすために操作を送信しても応答が得られない場合は、その要求を再度送信しますが、カウンターを2回増やしたくありません。 2)そのカウンタが別のレプリカで同時に更新された場合、最終的にはこの値を組み合わせて値を上書きしないようにしたいと思います。 増分( "John's balance"、+ 5.67、 "sdfsdfas")のようなコマンドがあります。ここで、sdfsdfasは重複した更新を破棄するための文字列です。この種のコマンドを複製するデータベースはありますか?

+0

私はこれが役に立つと思うシナリオを理解していません。すべてのレプリカが常に同じ値を維持することが重要である場合は、同期を維持する必要があります。どのように "冪等の更新"はこれを助けるでしょうか? –

+0

レプリケーションで任意のdbを使用してから、それに相当する 'increase_operations(target_id、increase_amount、operation_id)に挿入 'し、sum()を勝利に導きますか? operation_idは、重複した操作を識別する方法です。確かに最終的に一貫している。 – goat

答えて

1

[OK]をクリックすると、問題2が解決されたことを確認します。https://issues.apache.org/jira/browse/CASSANDRA-1072 分散カウンタは増分操作を組み合わせて、すべてが一貫して終了するようにします。

問題1(冪等)が開いて問題です:私はその問題を解決する手助けしようとしますので、https://issues.apache.org/jira/browse/CASSANDRA-4775

が、少なくとも私は、人々がそれについて考えることを知って、それは私のシナリオのために非常に重要です。

私の質問を明確にするのに役立ちます。

1

あなたは2つの異なることについて話しているようです。指揮命令は、increase命令の何回か送信することができますが、カウンタは1回だけ増加することを意味します。 Atomicityは1回の操作には意味がありません(複数の場合は意味があります。例えば、カウンタを増やし、原子的に増加した日付;どちらも変更されているか、どちらもない)。

MongoDBは「ドキュメント」レベル(これは私が必要とは思わない)でアトミックな操作をサポートしていますが、インクリメント演算子は冪等ではありません。

質問を明確にすることはできますか?

また、すべてのノードがいつでも同じキーの値を持つ「最終的に一貫性のある」データベースを持つことはできません。だからこそ、彼らは「今」と同じであることを保証することができないため、「最終的に一貫して」いるのです。あなたはインクリメント演算子を維持するためにMongoDBを使用したい場合は

が答えについては、(彼らのウェブサイト、[$inc operator][1]の例から)次のパターンを使用します。あなたの場合

db.collection.update({ age: 20 }, { $inc: { age: 1 } }); 
db.collection.update({ name: "John" }, { $inc: { age: 1 } }); 

、それは次のようになりますdb.collection.update({$inc:{mycounter:1}});

+0

うん、私は更新({名前: "ジョン"}、{$ inc:{バランス:58.4}})のようなものを持っていると思います。 MongoDBで同じクエリを2回実行しないように確認しますか? それは一方的な方法です。同じことを達成するもう1つの方法は、同じ操作が2回実行されないように、等価な増加を伴う方法です。例えば、コマンドがある種類のlocking_keyを提供して、すでに更新しようとしているかどうかを知る必要がある場合。 私はAPデータベース(MongoDBはCPですよね?)のような機能を見たいですか? – user1944408

+0

私の質問に、tl; drを追加しました。 – user1944408