2017-03-20 28 views
0

Cassandraの生成時間は、アプリリクエストの生成時間によって異なりますか?Datastax Cassandra - クエリ書き込み時間

シナリオ

は私が書き込み要求を送信し、カサンドラのノードに要求を削除する2つのアプリのノードを持っていると仮定します。実行の順序は

  1. Write要求
  2. 削除要求

App2のノードは約500ミリ秒の差によってApp1のノードの遅れです。したがって、app2側からの削除要求は、wite要求よりも早くタイムスタンプを取得し、決して発生しません。

これを解決するために、2つの要求の間にスリープ状態を引き起こしましたが、アプリケーション時間が同期していないときに、各要求に対してCassandraクロックがどのように書き込みを行うかを理解したかったのです。

TIA

+1

Cassandraはcommitlogsで動作するため、コミットログはタイムフォーワード方式でのみ実行/適用されるため、同期がとれていないサーバータイミングが問題になります。 HTH –

+0

サーバーのタイミングは、それはカッサンドラのサーバーのタイミングまたはアプリのサーバーのタイミングですか? – SaiVikas

+0

私の答えを参照してください、それはコメントのために大きすぎました。詳細が必要な場合はお知らせください。 –

答えて

1

カサンドラに関するいくつかの注目すべき事柄:

  • 書き込み 競合を解決するときにカサンドラは、最後の書き込み - 勝利のポリシーを使用していません。
  • CQLは、デフォルトではサーバー側のタイムスタンプを使用しません。
  • カサンドラ書面はクライアントのタイムスタンプに基づいており、遅れや時間のずれに対する許容度は です。

だから、直接

  1. APP2
  2. APP1は後でタイムスタンプの書き込み要求を追加し、以前のタイムスタンプ削除要求が追加されますが

カサンドラが検出し、あなたの質問に答えるために紛争は(おそらく)それは同じレコードです。したがって、クライアントタイムスタンプ検証ロジックを適用してwinnderを取得し、app1 write winsとdeleteを無視します。

遅延を1秒追加すると、エントリの順序が正しくなり、競合がなくなり、書き込みが正しく削除されます。

DataStaxからこの古い記事では、より詳細に説明します:http://www.datastax.com/dev/blog/why-cassandra-doesnt-need-vector-clocks

一番下の行はカサンドラCQLは、このような紛争決議のためのクライアントのタイムスタンプに依存しているということです。

これはイベントの非常に単純化されたバージョンであり、複雑なシナリオには適用されません。紛争解決w.r.tのより良い理解のためにブログを読んでください。カサンドラの時計。

関連する問題