5

スカラー値に対するべき等操作をサポートする、分散型の高可用性、最終的に一貫性のあるデータベースはありますか?

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

コマンドの増加(キー、属性[列]、差分)を送信できる分散データベースはありますか? そのようにして、2 つの異なるノードが異なる値で増加した場合でも、増加操作の結果整合性が得られます。これは、その増加が他のレプリカに伝播するためです。

Cassandraのような高可用性データベースでは機能しないため、条件付き更新については話していません(そのため、その機能はありません)。アトミックな増加操作に興味があります。

ありがとう。

PSべき等増加の場合、同じlock_keyで同じコマンドをすでに受け取った場合、dbが増加しないように、コマンドを増加させます(キー、属性、差分、ロックキー)

tl;dr:

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

4

2 に答える 2

1

わかりました。問題2はcassandraで解決されたようです。https: //issues.apache.org/jira/browse/CASSANDRA-1072 分散カウンターは増加操作を組み合わせて、最後にすべてが一貫するようにします。

問題1(べき等)は未解決の問題です:https ://issues.apache.org/jira/browse/CASSANDRA-4775

少なくとも、人々がそれについて考えていることは知っています。それは私のシナリオにとって非常に重要なので、私はその問題の解決を支援しようと思います。

これが私の質問を明確にするのに役立つことを願っています。

于 2013-01-04T05:05:32.457 に答える
1

あなたは2つの異なることについて話しているように私には思えます。冪等性は、increase命令を数回送信できることを意味しますが、カウンターは1回しか増加しません。アトミック性は、単一の操作では意味がありません (たとえば、カウンターを増加させ、増加の日付をアトミックに増加させるなど、複数の操作に対して意味があります。両方が変更されるか、いずれも変更されません)。

MongoDB は「ドキュメント」レベルでのアトミック操作をサポートしていますが (これが必要かどうかはわかりません)、明らかにインクリメント演算子は冪等ではありません (定義上! そうでなければどのようにカウンターを増やしますか?)。

あなたの質問を明確にすることができますか?

また、すべてのノードが特定のキーの値を毎回同じにする「結果整合性」データベースを持つことはできません。そのため、「現在」同じであることを保証できないため、「最終的に一貫性がある」のです。

答えとしては、インクリメント演算子を維持するために MongoDB を使用する場合は、次のパターンを使用します (彼らの Web サイトから、の例[$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}});

于 2013-01-03T02:24:38.573 に答える