我想建立一個高可用性非常高的音量購物車應用程序卡桑德拉。該應用程序將有一個卷如此之高,我正在考慮使用cassandra而不是mysql的數據庫。用於存儲支付信息
現在,在購物車系統中,大多數數據庫操作必須100%一致,而其他人不必一定是。
100%一致行動示例: 保存付款確認。 保存已購買的物品清單。
不需要100%一致行動的事例: 保存客戶的地址(如果在付款時,沒有地址保存在數據庫中,假設它已丟失並再次詢問客戶) 。 其他類似的事情。
現在,如果我在同一區域(亞馬遜EC2)中運行服務器羣集,是否存在任何作爲最大一致事務執行所有事務的主要障礙。這是否會提供與mySQl關係數據庫相同的可靠性。請記住,我們正在處理這裏的金融交易。
是在卡桑德拉我的數據一般「安全」。我的意思是完全意外停電,隨機光盤失敗,等等,等等
感謝您提供大量明確的信息。爲了彌補缺乏交易可以做到以下幾點:我創建一個名爲「鎖」的cassandra表。當我想要在數據庫上執行事務時,我將代表要寫入的行的uuid添加到鎖表中。在我用QUORUM寫完感興趣的行之後,我從鎖表中刪除uuids。如果同時嘗試了一個獨立查詢,它將首先檢查相關的uuids是否存在於鎖表中,如果它們是不允許的話。這會允許交易嗎?只有非常慢的? –
不幸的是,這仍然容易出現競爭狀況,方法如下:1.客戶端A檢查鎖定表並且什麼也找不到。 2.客戶A讀取購物籃。 3.客戶端B寫入鎖表。 4.客戶B更新購物籃和總成本。 5.客戶端B清除鎖定。 6.客戶A讀取總成本,現在與先前閱讀的購物籃不一致。如果不使用更強大的分佈式協議(如Zookeeper提供的分佈式協議)(由@sdolgy提到),則不能解決此問題 –
我認爲您跳過了其中一個步驟。最初的步驟將是:1.客戶端A檢查鎖定表並且什麼也找不到。 2.客戶端A在其打算讀取或寫入的每個項目上插入一個鎖。 3.客戶A讀取購物籃。 3.客戶端B檢查鎖定表並找到它感興趣的項目的鎖,因此它停止。 4.客戶A完成其操作。 –