[英]Grouping Data in a Key/Value Database Like Redis
我正在嘗試在Redis數據庫中對類似於amazon.com類別(例如,書籍,電影,電子產品等)的數據進行建模。 訂單在HTML頁面上呈現時對我很重要,因此向用戶呈現一致的用戶界面。 因此,我將類別存儲在排序集中:
ZADD categories 0 "Books"
ZADD categories 1 "Movies"
ZADD categories 2 "Electronics"
然后,我為每個子類別創建了另一個排序集。
ZADD categories:books 0 "Fiction"
ZADD categories:books 1 "Non-Fiction"
ZADD categories:movies 0 "Horror"
[...]
從這里開始,我想我可以將產品存儲在哈希中。
HMSET product:1000 category 0 subcategory 0 title "Redis Cookbook"
HMSET product:1001 category 1 subcategory 0 title "Nightmare on Elm Street"
[...]
我對Redis和Key / Value數據庫商店都很陌生,所以我對自己的方法充滿信心。 這種模式對我來說是長期的嗎? 我應該注意更好/替代的方法嗎? 我擔心的一個問題是保持名稱“同步”。 例如,如果我將頂級類別從“書籍”更改為“文獻”(可怕的例子,我知道), 還應更新“參考”書籍的子類別的所有鍵。
讓我們向后回答你的問題。
將產品存儲在哈希中
那是一個好主意。 通常,您希望將實體存儲在散列映射中。
更改類別名稱
您應該為每個類別使用內部標識符。 然后將類別顯示名稱存儲在散列映射中,就像存儲產品一樣。 這種間接是有用的 - 因為它允許您存儲類別的附加信息。 例如,如果您稍后決定為每個類別顯示“最受歡迎產品”,則此類架構將非常有用。
在類別中存儲產品
您可以創建category:books:products
等密鑰,然后存儲每個產品的ID。 這可以是列表,集合或排序集 - 取決於您要對數據執行的操作。
使用Set
或SortedSet
可以執行交叉點。 當你想要一些項目的子集時,這些就派上用場了,例如“O'Reilly出版的書籍”。要做到這一點,你必須維護另一套包含書籍ID的“publisher:preilly”。
存儲類別集合
現在,您建議使用SortedSet
,這是一種可能的解決方案。 但如果類別的順序不會動態變化,您也可以使用列表。 例如,如果您總是希望按升序顯示類別,則列表就足夠了。
如果訂單將動態更改,則SortedSet會很有用。 例如,如果要根據每個類別中的產品數顯示類別 - 那么將它們存儲在SortedSet中是個好主意。
另外,請記住,您可以使用多個列表或排序集 - 每個集合可以表示不同的用例。 讓我們假設你不想向海外客戶出售書籍。 在這種情況下,您可以擁有其他關鍵categories:overseas
並存儲您要顯示的類別。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.