我需要創建不同供應商和不同商店區域的產品目錄。
供應商的一種產品在每個商店區域中可以有不同的價格。
在簡歷中:提供商 - 區域 - 產品
我有大約 20 個提供者,每個提供者最多可以有大約 50 或 60 個區域。每個區域最多可以有大約 20.000 個產品。每個區域的產品相同,但價格可能不同。
我對如何存盤資訊有疑問。我需要每天更新供應商和每個區域的價格,但不是同時更新所有區域。另外,我需要搜索產品或類別并僅顯示其商店的價格。最常見的查詢是:列出一個類別的產品以及所選區域的價格,或者給出一個產品的資訊以及所選區域的價格。
我正在考慮存盤資料的不同方案。
場景 A - 索引提供者 X
為每個供應商創建一個索引,在嵌套物件中包含每個產品的檔案和每個區域的價格。
"id" : 53457,
"categories": [5563,5686],
"description": "bla bla bla",
....,
"zones": [ {"id": 259, "price": 4.55}, {"id": 260, "price": 4.45}]
好處:
- 幾個指標。
- 沒有存盤冗余資訊
- 更輕松的資訊維護。
缺點:
- 更新和價格搜索更復雜,可能性能更低。
場景 B - Provider zone X 的索引
為每個區域創建一個索引。
"id" : 53457,
"categories": [5563,5686],
"description": "bla bla bla",
....,
"price": 4.55
好處:
- 更新價格和獲取商店產品目錄的簡單方法。
缺點:
- 每個索引中的冗余資訊。
- 復雜的資訊維護。
- 許多指數
有人可以推薦我選擇哪種方案或提出替代方案嗎?
uj5u.com熱心網友回復:
在一般的 NoSQL 世界中,特別是在 Elasticsearch 中,“冗余”不一定(如果有的話)被視為劣勢,因為非規范化是關鍵。所以這將有利于選項 B,但這不是全部,實用主義應該占上風,因為你知道......這取決于。
此外,索引少或多也不一定是問題,如果設計正確,則始終取決于用例以及在資料架構設計中投入了多少努力。使用選項 A,您將擁有 20 個索引,每個索引包含 120 萬個檔案,使用選項 B,您將擁有約 1K 個索引和 20K 檔案。不確定您的平均檔案大小和集群架構,但考慮到您可能會運行的常見查詢,選項 B 的效率似乎會稍低一些。
您的查詢需要一直在所有索引上運行,因此索引越少越好,除非您有一個擁有充足資源的巨大集群,但對于只有 25M 的檔案,我認為情況并非如此。因此,鑒于您在上面分享的資訊,我會選擇第一個選項 A。
另請記住,您的首要任務是讓用戶更容易找到產品,而不是讓您更新檔案,因此更快的搜索比更快的索引更重要,特別是如果您只更新一次或兩次檔案一天。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467154.html
