簡體   English   中英

像Redis一樣在鍵/值數據庫中對數據進行分組

[英]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。 這可以是列表,集合或排序集 - 取決於您要對數據執行的操作。

  1. 如果產品有固有的訂單,例如最近添加的產品,那么使用List是有意義的。 這樣,列表中的第一個元素就是最新的產品。
  2. 如果您希望按照某些條件(例如“已下載最多”或“查看次數最多”)對產品進行排序,則應使用有序集。
  3. 如果類別中的產品之間沒有其他關系,請使用Set。

使用SetSortedSet可以執行交叉點。 當你想要一些項目的子集時,這些就派上用場了,例如“O'Reilly出版的書籍”。要做到這一點,你必須維護另一套包含書籍ID的“publisher:preilly”。

存儲類別集合

現在,您建議使用SortedSet ,這是一種可能的解決方案。 但如果類別的順序不會動態變化,您也可以使用列表。 例如,如果您總是希望按升序顯示類別,則列表就足夠了。

如果訂單將動態更改,則SortedSet會很有用。 例如,如果要根據每個類別中的產品數顯示類別 - 那么將它們存儲在SortedSet中是個好主意。

另外,請記住,您可以使用多個列表或排序集 - 每個集合可以表示不同的用例。 讓我們假設你不想向海外客戶出售書籍。 在這種情況下,您可以擁有其他關鍵categories:overseas並存儲您要顯示的類別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM