我有彼此相關的其他幾桌,它看起來是這樣的:最佳實踐更新大量卡桑德拉行可靠的(關係更新)
organizations:
- id
- name
- ... other fields
users:
- id
- name
- organization_id
- organization_name
- ... other fields
我一直organization_name
字段中users
表,以便它不必查找組織以獲取組織名稱
問題是,如果更改了組織名稱,則必須更新與組織相關的所有用戶以反映新名稱。在我的真實場景中,有更多的表格存儲organization_name
。
問題:目前我剛剛火起來的更新語句異步,如果中途失敗的話,我會用數據不一致
問題結束:有沒有最佳實踐如何應對這種問題?
可能的解決方案:
- 使用
BATCH
聲明。但是我發現它非常有限,因爲默認情況下它只允許50kb的查詢大小(在我的情況下,1次更新可能導致從兩個或三個不同的表中更新8,000個其他實體,並且字段值的長度不同) - 因此查詢大小相當難以預測)- 我實際上嘗試使用
BATCH
語句來更新100個項目(在需要更新的600個項目中),並且由於「批量過大」異常而失敗......
- 我實際上嘗試使用
- 重試失敗的更新
PS - 我行不是太寬,最多我每桌約20列
更新:
忘了添加,這是一個web應用程序,需要儘快反映更新,所以批量作業將不適用
更新2:
關於閱讀模式,我現在的例子過於簡單,但在任何情況下,我需要獲取用戶列表(也可以是由多個組織) - 這可能成千上萬的用戶的回報超過了數百個組織這就是爲什麼我保存organization_name
在users
表作爲我的理解是,與卡桑德拉數據的非規範化是去
你的閱讀模式是什麼?爲什麼你想避免查找用戶的組織名稱?如果要顯示有關一個用戶的信息,最好有一個附加請求來獲取組織名稱,而不是許多表之間的支持一致性。 –
@MikhailBaksheev我更新了問題以包含更多細節。我同意如果顯示給一個用戶,那麼存儲組織名稱是沒有意義的:-) – GantengX
您要通過哪些字段獲取用戶?或所有用戶? –