2010-01-21 45 views
2

http://www.infoq.com/presentations/newport-evolving-key-value-programming-model是一個關於KV存儲的視頻,整個前提是redis提供了一種基於列的樣式,用於將對象的屬性存儲在單獨的鍵下,而不是串行化對象並將其存儲在單鍵。可擴展對象的關鍵值存儲區

(這個問題 Redis的特異性,但更多的是一般的風格和一般KV存儲最佳實踐。)

相反,比如說,一個「人」一個斑點,Redis的鼓勵一基於列的樣式,其中對象中的屬性存儲爲單獨的鍵,例如

R.set("U:123:firstname","Billy") 
R.set("U:123:surname","Newport") 
... 

我很好奇,如果這是最佳實踐,並且人們採取不同的方法。

  • 例如,你可以在一個鍵下「醃」一個物體。這樣做的優勢的被獲取或設置在一個請求

  • 或者一個人可能是一個列表與第一項作爲一個字段名索引或這樣?

這讓我想 - 我想要一個分級密鑰存儲,例如

R.set(["U:123","firstname"],"Billy") 
R.set(["U:123","surname"],"Newport") 
R.get(["U:123"]) returns [("firstname","Billy"),("surname","Newport")] 

然後在交易補充:

with(R.get(["U:132"]) as user): 
    user.set("firstname","Paul") 
    user.set("lastname","Simon") 

從比例的角度來看,獲取並設置將是重要的配料?

有沒有支持這個或有其他適用的方法的關鍵商店?

回答

1

通過使用額外的Set來跟蹤對象的單個成員,您可以在Redis中獲得類似的行爲。

SET U:123:firstname Billy 
SADD U:123:members firstname 
SET U:123:surname Cobin 
SADD U:123:members surname 

GET U:123:firstname => Billy 
GET U:123:firstname => Cobin 
SORT U:123:members GET U:123:* -> [Billy, Cobin] 
or 
SMEMBERS U:123:members -> [firstname, surname] 
MGET U:123:firstname U:123:firstname 

不完美的匹配,但在許多情況下足夠好。有一個interesting article關於hurl如何與Redis一起使用此模式