2014-04-26 39 views
2

從我的理解來看,在noSQL中,數據應該是重複的。因此,例如,如果您有用戶表和帖子表,您可以像往常一樣將用戶的信息存儲在用戶表中,但是您可以將相關用戶數據存儲在帖子表中。來自MySQL的NoSQL(Cassandara),重複的數據db設計

問題1:我的理解是否正確?

問題2:如果是這樣,那意味着如果我更改用戶的詳細信息,我將更新所有受影響的帖子條目?

+0

對於這兩個問題是的! – ftrujillo

回答

5

從Cassandra的角度來看,它主要取決於您需要有效支持的查詢。當你查詢帖子時,你是否也需要用戶數據?如果是這樣,那麼在存儲帖子的地方包含所需的數據通常會更高效。

因此,對於問題1,在很多情況下,您所描述的是常見做法,但取決於應用程序的需求。

對於問題2,這也是一個應用問題。如果您預見用戶數據會定期更改,那麼您的應用程序可能應該在顯示帖子時對用戶表執行查找。但是,如果引入太多的讀取以及時顯示所需的帖子,那麼在帖子數據中包括用戶數據意味着對用戶數據的改變將需要在兩個地方改變。但是詢問歷史數據是否需要更改很重要。例如,如果您在Twitter上更改您的用戶名,則它不會返回並將您以前的所有引用更新爲新用戶名。這是應用程序的選擇。您預計可能會更改哪些用戶數據?在用戶名變化的情況下,您希望新值能夠反映在以前的所有帖子中,這種變化有多及時?它應該立即反映出來,還是等待批處理來處理?

需要了解的重要一點是如何執行高效的查詢以及瞭解在反規範化以實現高性能應用程序時所做的參照完整性折衷。設計數據模型時始終考慮應用程序查詢模式。