我一直在閱讀關於MongoDB和Cassandra。 MongoDB是一個主/從,Cassandra是無主的(所有節點都是平等的)。我的疑問是關於數據如何存儲在這兩者中。Mongodb和Cassandra數據存儲機制
比方說,一個用戶正在向MongoDB寫一個請求(一個主站和不同的從站在一個單獨的機器上)。這意味着主人將決定(或通過某些應用程序實現)此更新應寫入哪個從屬。這是相同的數據將不會在MongoDB的所有節點中可用。每個節點的大小可能不同。我對嗎 ?另外,在查詢時,主人是否知道該請求應發送給哪個節點?
在cassandra的情況下,相同的數據將被寫入所有的節點,即有效地如果一個節點大小是10GB,那麼其他節點大小也是10GB。因爲如果只有這種情況,那麼當一個節點發生故障時,用戶不會通過在另一個節點中查詢而丟失任何數據。我在這裏嗎?如果我是對的,所有節點都有相同的數據,那麼在Cassandra中使用map/reduce函數有什麼優勢?如果我錯了,那麼Cassandra中的可用性如何維護,因爲相同的數據在其他節點中不可用?
我正在搜索關於MongoDB vs cassandra的stackoverflow,並且已經閱讀了大約10篇文章,但是我的問題無法通過這些文章中的答案清除。請清除我的疑惑,如果我錯誤地假設了,也糾正我。
那麼Cassandra如何保持可用性。假設我有兩個節點,並且基於密鑰哈希(數據1-50到節點1和數據51-100到節點2)寫入數據。所以如果node1發生故障,數據如何提供?我能想到的一種解決方法是每個節點都有一個備份(節點1具有節點11,節點2具有節點21),並且當主節點關閉時,輔助節點出現。我對嗎 ? – PSathiya
我想它比這更微妙一點。在Cassandra中,您可以指定「複製因子」和「一致性級別」。複製因子表示有多少節點應最終接收數據的副本。您可以指定所有節點都應該獲取數據,然後最終在整個網絡中複製。一致性級別允許您指定有多少節點必須在更新時成功寫入/更新數據,以便更新被視爲成功。所以在2節點系統中,在它們之間複製可能是有意義的 – pedorro