2017-03-20 61 views
0

Cassandra生成的時間會因應用程序請求生成時間而異?Datastax Cassandra - 查詢寫入時間

情景

假設我有它發送寫請求和刪除請求卡桑德拉節點的兩個應用節點。執行的順序是

  1. 寫請求
  2. 刪除請求

App2的節點通過約500毫秒的差滯後App1的節點。因此,從app2端刪除請求會比請求請求提前得到一個時間戳,並且它永遠不會發生。

在兩次請求之間引入睡眠1秒來解決此問題,但想了解卡桑德拉時鐘如何針對每個請求寫入數據,而應用程序時間不同步。

TIA

+1

Cassandra致力於commitlogs,因此任何服務器計時不同步都會產生問題,因爲commitlogs只能以時間正向方式執行/應用。 HTH –

+0

服務器時間u指的是Cassandra服務器時間或應用服務器時間嗎? – SaiVikas

+0

看到我的回答,這太大了,無法發表評論。讓我知道你是否需要更多細節。 –

回答

1

一些著名的關於卡桑德拉的事情:

  • 卡桑德拉不使用解決寫 衝突時,最後寫贏的策略。
  • CQL不默認使用服務器端時間戳。
  • Cassandra寫道是基於客戶端的時間戳與一些 容差滯後和時間位移。

因此,要回答你的問題直接

  1. APP 2增加了一個較早的時間戳的刪除請求
  2. APP1添加後時間戳的寫請求

卡桑德拉檢測衝突(假定)是相同的記錄。因此它應用客戶端時間戳驗證邏輯來​​獲取winnder,並且app1寫入勝和刪除被忽略。

當您添加1秒的延遲時,您的輸入按正確順序排列,並且沒有衝突,確保正確刪除寫入。

這從DataStax舊文章會更詳細解釋:http://www.datastax.com/dev/blog/why-cassandra-doesnt-need-vector-clocks

的底線是卡桑德拉CQL依賴於這種解決衝突客戶端時間戳。

這是一個非常簡化的事件版本,不適用於複雜的場景。請閱讀博客,以更好地瞭解衝突解決w.r.t.時鐘在卡桑德拉。

相關問題