商城商品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
- 記錄一下商城商品多規格演算法!演算法
- SQL SERVER 日期相關性優化選項SQLServer優化
- 【MySQL】再說order by 優化MySql優化
- 通過使用Showplan SET選項執行優化優化
- 效能優化-合成層優化
- 移動spa商城優化記(一)---首屏優化篇優化
- 移動商城第三篇(商品管理)【查詢商品、新增商品】
- 硬核實力,再獲嘉獎,RestCloud入選CIO優選數字化服務商RESTCloud
- iOS圖層效能優化iOS優化
- Chrome 渲染優化 - 層模型Chrome優化模型
- 【智慧優化演算法】遺傳演算法的精英選擇策略、期望選擇策略優化演算法
- 使用 BoringSSL 優化 HTTPS 加密演算法選擇優化HTTP加密演算法
- 鳥瞰前端 , 再論效能優化前端優化
- 再添獎項!騰訊安全入選IPv6國家級優秀案例名單
- SQL優化例項SQL優化
- MySQL 優化例項MySql優化
- (mysql優化-3) 系統優化MySql優化
- 「GAN優化」如何選好正則項讓你的GAN收斂優化
- 圖解選擇排序及演算法優化(Java實現)圖解排序演算法優化Java
- Android開商品屬性篩選與商品篩選Android
- jQuery點選滑出層效果程式碼例項jQuery
- MySQL優化--IO排程演算法優化MySql優化演算法
- 群體智慧優化演算法之粒子群優化演算法優化演算法
- node模組載入層級優化優化
- 層次和約束:專案中使用vuex的3條優化方案Vue優化
- (轉)MySQL優化例項MySql優化
- 點選彈出鎖屏層例項程式碼
- 點選彈出半透明層程式碼例項
- 【SQL優化】SQL優化的10點注意事項SQL優化
- 【乾貨分享】研效優化實踐:AI演算法助力深層BUG挖掘優化AI演算法
- 手撕商城體系之產商品系統
- 國民優選新零售商城開發原理
- 社交網路再戰電商:這次主打個性化商品推薦
- 直播商城原始碼如何實現資料的單項選擇原始碼
- 再議包含DBLINK的查詢優化優化