2013-02-04 48 views
6

我對Redis的DB一些問題:的Redis和數據完整性

  • 如何確保數據的完整性?
  • 是否有方法確保完整性?
  • Redis主鍵嗎?或替代品
  • 外鍵?
  • 參照完整性?
  • ACID屬性如何實現?

永遠感謝一個可能的反饋

問候 - SB -

回答

11

Redis的是類固醇一鍵/值存儲,而不是一個關係數據庫。

如何確保數據的完整性? 有沒有方法確保完整性?

Redis支持從「非安全但非常高效」直到「安全但不是非常高效」的不同持久性選項。在詳細信息請參閱:

Redis的也支持一個主從複製機制來保護所述數據在完全節點故障的情況下。

單個Redis實例總是提供數據一致性(在CAP定理的意義上,而不是ACID意義上)。

Redis主鍵?或替代品

Redis是一個關鍵/價值商店。所有物品都有鑰匙。沒有主鍵或輔助鍵的概念。

外鍵? 參照完整性?

這些是關係概念。 Redis不是一個關係數據庫。 外鍵意味着什麼(Redis沒有表概念)。 參照完整性不由Redis維護,必須由客戶端應用程序強制執行。

如何實現ACID屬性?

因爲Redis不是事務數據庫,所以不應該實現它們。 Redis沒有回滾機制。然而,在ACID屬性的術語:

  • 原子性和一致性可以被保證的一組與服務器側的Lua腳本
  • 隔離總是在命令級保證命令的,並且還可以保證一個使用MULTI/EXEC塊或一個Lua腳本命令的組
  • 當AOF被激活(以系統FSYNC)耐用性可以得到保證
+0

'耐久性時AOF被激活(以系統FSYNC)'<被保證 - 是你的來源,antirez鏈接(偉大的鏈接感謝那btw) 你知道這對性能有什麼影響嗎?即它是否將redis帶回到與SQL/Mongo相同的聯盟? – wal

+0

對性能的影響是災難性的。在此配置中,任何帶有預寫日誌的RDBMS或NoSQL引擎都將比Redis表現得更好。這是因爲Redis是單線程的。在這個配置中,fsync直接在事件循環中完成。所以任何fsync系統地阻塞所有的連接。 –

+0

'這是因爲Redis是單線程的。在這個配置中,fsync直接在事件循環中完成,你確定嗎? Redis持久性鏈接說:「AOF也需要fork(),但是你可以調整你想重寫日誌的頻率,而不必在耐久性方面進行任何折衷。」 –