商城商品3層選項演算法再優化
速度提高几百倍,記一次資料結構在實際工作中的運用
上文描述了商品3層選項 尺碼-顏色-性別,實現的效能優化過程。
原文實現了選擇第一層以後,第二層選項開放,選擇第二層以後,第三層選項開放。
我在知乎看到其轉載,發現有可以繼續改進的方案。
以下方案能實現,任意選擇某個選項以後,遮蔽其他層無法選擇的專案。
商品各選項分別編碼,然後hashcode = a * B * C + b * C + c。
可以建立一個表F,其元素值為二進位制位的集合,可以用數值或字串(因為這是js所以資料結構上不大方便)實現
對於所有(a,b,c)元素,其位標誌位
f = (1<<(a+B+C)) | (1<< (b+C)) | (1<<c);
F[hash(a,0,0)] |= f; F[hash(0,b,0)] |= f; F[hash(0,0,c)] |= f;
F[hash(a,b,0)] |= f; F[hash(0,b,c)] |= f; F[hash(a,0,c)] |= f;
另外使F[hash(0,0,0)] |= 全集;
如此,當前任意(a,b,c) (任意項可以未選,只要非全選),查詢F[hash(a,b,c)]可得知其可選集合,把相應選項亮起即可。
此方案可選項總數<=31的都很好實現,>=31用陣列或字串代替標量數值。總共ABC個選項如果只有1000多,那簡直就是秒殺。
假如資料由後端下發或儲存於本地快取,那麼,任意兩選擇F的元素共有ab + bc + ac, 按9,10,11可選項即服務端傳送1011 + 1112 + 1012=232【稀疏】陣列即可。232的陣列,可以對應990種商品過濾,不過因為每個商品還是需要單獨發價格等其他資料。
如果不希望載入網頁後立刻要求後端傳輸所有可能商品,則可以在第一次選擇後由後端查詢其F(hash(0,b,0)]後將可選位及商品價格傳輸給前端。
作為後端,可能因商品庫存原因要動態刪除某個具體商品,上述資料結構並不合適反向刪除,但可以改為,F[hash(0,b,0)] = { 選項0被選次數 | 選項1被選次數 | …… }
某具體商品庫存不足時,減少其若干個hash的對應選項的次數,將位擴充到數量,即可實現增刪。
此方案可儲存於資料庫(欄位型別用pg的原生陣列)或json。
相關文章
- 選擇排序-演算法及優化排序演算法優化
- 28-Beego優選刪除商品Go
- 記錄一下商城商品多規格演算法!演算法
- 移動spa商城優化記(一)---首屏優化篇優化
- 【智慧優化演算法】遺傳演算法的精英選擇策略、期望選擇策略優化演算法
- 硬核實力,再獲嘉獎,RestCloud入選CIO優選數字化服務商RESTCloud
- 移動商城第三篇(商品管理)【查詢商品、新增商品】
- 「GAN優化」如何選好正則項讓你的GAN收斂優化
- jQuery點選滑出層效果程式碼例項jQuery
- 再添獎項!騰訊安全入選IPv6國家級優秀案例名單
- (mysql優化-3) 系統優化MySql優化
- 圖解選擇排序及演算法優化(Java實現)圖解排序演算法優化Java
- Android開商品屬性篩選與商品篩選Android
- MySQL優化--IO排程演算法優化MySql優化演算法
- 再議包含DBLINK的查詢優化優化
- 用 symfony/options-resolver 優雅的校驗類初始化選項
- 層次和約束:專案中使用vuex的3條優化方案Vue優化
- Web 頁面優化專項 > Lighthouse > 效能分數優化Web優化
- 直播商城原始碼如何實現資料的單項選擇原始碼
- CSP201403-3:命令列選項命令列
- 【乾貨分享】研效優化實踐:AI演算法助力深層BUG挖掘優化AI演算法
- 157首選項→想法→隱藏標籤提示, 15首選項, 8快捷鍵,15首選項,5選項,T3選單欄,4919....
- 【Dijkstra演算法】未優化版+優先佇列優化版演算法優化佇列
- 國民優選新零售商城開發原理
- CSS3圖層陰影程式碼例項CSSS3
- 優化演算法總結優化演算法
- iOS冒泡演算法優化iOS演算法優化
- iOS網路層詳解和優化iOS優化
- linux核心引數優化重要項Linux優化
- 表空間OFFLINE的3種選項。
- 手撕商城體系之產商品系統
- Spark SQL 效能優化再進一步 CBO 基於代價的優化SparkSQL優化
- CSS 選擇器效能優化CSS優化
- 載入速度優化專項 > 體積優化分享優化
- 搜尋引擎核心技術與演算法 —— 詞項詞典與倒排索引優化演算法索引優化
- 雙層 for 例項
- 系統優化總結——系統層面優化
- 梯度下降優化演算法概述梯度優化演算法