我正在學習卡桑德拉,我知道我應該爲每個查詢製作一張表格。我不確定何時應該製作單獨的表格或物化視圖。例如,我有用戶和帖子以下查詢:何時使用物化視圖?
users_by_id users_by_email users_by_session_key
posts_by_id posts_by_category posts_by_user
我就應該總是用物化視圖?
在我看來,如果你想保持郵件或用戶在查詢中保持一致,那麼我必須使用物化視圖。但是我讀到的物化視圖有一個read before write
延遲。另一方面,如果我使用不同的表格,每次創建新帖子時我應該製作3個插入點嗎?我注意到我得到了錯誤batch with conditions cannot span multiple tables
,這意味着我必須一次將它插入到每個單獨的表中,如果其中一個查詢失敗,會導致一致性問題。 (批處理語句,如果其中一個失敗,將全部失敗3)。
因此,由於它具有一致性是有意義的,那麼在我看來,我總是希望使用物化視圖,並且必須採取懲罰措施。
我想我的另一個問題是數據何時會不一致?
所以希望有人能夠爲我提供更多的清晰度,以便如何在用戶或帖子這樣的'理論模型'上的cassandra中處理多個查詢。我應該使用物化視圖嗎?如果我爲每個模型使用3個不同的表格,我如何保持它們一致?只希望所有3插入不失敗?看起來不正確。
在你的第一段中,你提到你提到的權衡是時間vs性能。我有時間讓id喜歡使這3個不同的表而不是物化視圖。然而,我仍然困惑什麼是保持3 Posts表中的數據一致的正確方法。 (順便說一下,當我說一致性時,我不是指複製品間的一致性,而是3 posts表中數據的一致性)。我的擔心是,我的服務器使3插入創建一個帖子,但在一次我的服務器失敗。現在我有'posts_by_id'但沒有'posts_By_category'表。那麼我將如何處理3個表格的數據一致性呢? –
您可以做兩件事:使用QUOURUM或創建批量修復過程。第一個很容易實現:https://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_config_consistency_c.html 對於第二個,您需要像kafka一樣的Message Queue System。您創建一個快速流處理應用程序。第二個應用程序在您的批處理流中只做一件事:修復損壞的表。第二種解決方案非常快速,適用於實時分析,但第一種解決方案更安全。我認爲,就你而言,第一個是更好的選擇。 –