年前一段時間,在內存數據庫選型上,還在Aerospike與Redis兩者間游移不定。因為Redis畢竟業界已經有很多成功案例,而且國內互聯網大佬們BAT也在使用,網上資源也很豐富;而Aerospike剛剛開源,在應用案例與技術資源這兩方面是一窮二白。
在游移的這段時間,也看了不少Redis的網上技術文檔和一些ORM開源實現,對關系數據庫(RDBMS)表與Redis模型間的映射方式簡單總結了下,記錄在這裡備忘。
由於Redis只是簡單的Key-Value(鍵-值)存儲系統,沒有RDBMS中表與索引概念,要在Redis中實現原有數據庫表模型的訪問方式,必須有一種模型的轉換方法,即模型間的映射方式,將RDBMS中的表與索引概念轉成Redis Key-Value對象。
後面的映射方式說明中,有個前提假設是:關系數據庫模型使用非業務含義數值序列做為主鍵。這可能與實際不符合,需根據情況進行調整。采用數值做為主鍵,主要目的是節省Redis模型索引數據的內存占用,內存能省點是點兒,地主家也沒有余糧啊。
Redis模型中所有Key-Value的創建維護,包括對應RDBMS表索引的Key-Value創建和維護,以及唯一索引的唯一性保證,都是由應用程序自身完成,Redis只負責數據保存。
表模型
另外,Redis模型中所有Key-Value的創建和維護,包括對應於RDBMS庫表索引的Key-Value創建和維護,以及唯一索引的唯一性保證,都要由應用程序自身來完成,Redis只負責數據的存儲。
表模型
RDBMS表模型
Redis模型
上圖中的RDBMS模型轉換成Redis模型,各Key-Value鍵值說明如下:
舉例
例如:表emp的數據及轉換成Redis模型的數據如下:
非唯一單列索引模型
RDBMS表模型
表在列col_idx上建有非唯一索引。
Redis模型
上圖模型中的RDBMS索引轉換成Redis模型,索引相關Key-Value鍵值說明如下:
舉例
例如:表emp在mgr_id上建有非唯一索引,表數據及轉換成Redis模型的數據如下:
唯一單列索引模型
RDBMS表模型
表在列col_uniq上建有唯一索引。
Redis模型
上圖模型中的RDBMS索引轉換成Redis模型,索引相關Key-Value鍵值說明如下:
舉例
例如:表emp在email上建有唯一索引,表數據及轉換成Redis模型的數據如下:
(非)唯一多列組合索引模型
RDBMS表模型
表在列col_idx1、col_idx2上建有非唯一組合索引,
在列col_uniq1、col_uniq2上建有唯一組合索引。
Redis模型
上圖模型中的索引轉換成Redis模型,索引相關Key-Value鍵值說明如下:
Key
Value
備注
類型
取值說明