1. 程式人生 > >NoSQL:鍵值資料庫

NoSQL:鍵值資料庫

鍵值資料庫(key-value store)是一張簡單的雜湊表(hash table),主要用在所有資料庫訪問均通過主鍵(primary key)來操作的情況下。

應用程式可以提供鍵和值,並將這一鍵值對持久化。假如鍵已存在,就用新值覆蓋當前值,否則就新建一條資料。

下表是關係型資料庫Oracle和鍵值資料庫Riak的術語對比:

Oracle Riak
資料庫例項(database instance) Riak叢集(Riak cluster)
表(table) 儲存區(bucket)
行(row) 鍵值對(key-value)
偽列(rowid) 鍵(key)

什麼是鍵值資料庫

從API的角度來看,簡直資料庫是最簡單的NoSQL資料庫。客戶端可以根據鍵查詢值,設定鍵所對應的值,或從資料庫中刪除鍵。“值”只是資料庫儲存的一塊資料而已,它並不關心也無需知道其中的內容;應用程式負責理解所存資料的含義。由於鍵值資料庫總是通過主鍵訪問,所以它們一般效能較高,且易於擴充套件。

在Redis等鍵值資料庫中,所儲存的聚合不一定非要是領域物件(domain object),任何資料結構都可以。Redis能夠儲存list、set、hash等資料結構,而且支援“獲取某個範圍內的數值(range)”、“求差集(diff)”、“求並集(union)”、“求交集(intersection)”等操作。


鍵值資料庫特性

  • 一致性:只有針對單個鍵的操作才具備“一致性”。對於Riak這種分散式鍵值資料庫,用“最終一致性模型”實現“一致性”。(參考:NosQL分散式模型:放寬一致性約束

  • 事務:Riak採用“仲裁”這一概念來實現事務功能。(參考:NosQL分散式模型:仲裁

  • 查詢:由於需要根據鍵值查詢,所以可以根據時間戳等資料庫之外的值來生成鍵名,所以鍵值資料庫非常適合儲存會話(會話ID為主鍵)、購物車資料、使用者配置等資訊。還可以使用expiry_secs屬性指定關鍵字的過期時間,這對會話或購物車物件特別有用。

  • 資料結構:鍵值資料庫並不關心鍵值對裡的值,可以是二進位制塊、文字、JSON、XML等。

  • 可擴充套件性:很多鍵值資料庫都可用“分片”技術。(參考:NosQL分散式模型:分片


適用案例

  • 存放會話資料
  • 使用者配置資訊
  • 購物車資料

不適用案例

  • 需要在不同資料集之間建立關係,或是將不同的關鍵字集合聯絡起來。
  • 需要執行含有多項操作的事務,而又需要復原或回滾。
  • 需要根據鍵值對的某部分來查詢關鍵字。
  • 需要同時操作多個關鍵字。

想了解更多關於NoSQL資料庫:NoSQL資料庫專欄