整理自知乎高票回答,涵蓋 B2B2C 平台後台統計模組設計、PHP+MySQL 千萬級架構演進、商品多規格/多價格/多庫存建模、商品詳情頁非結構化資料儲存演進、對賬與權限體系等核心主題,適合產品經理、架構師、後端工程師參考。
王於萍: 先設計需求與流程,再定資料表。供應商管理產生地區、類目資料,可用於推薦統計。
PalmWong: 三大角色三套統計視角:
1. 消費者 (C端): 個人消費統計 (訂單、收藏、足跡)。
2. 平台運營: 全站 GMV、轉化率、留存、商家經營健康度、類目結構分析。
3. 商家 (B端): 店鋪流量、轉化、客單價、復購、庫存周轉、推廣 ROI。
關鍵提醒: BBC 業務極複雜,角色變化導致資料交互極多,對賬、權限、異常情況多,不可照搬天貓模式。
Dion: 語言非關鍵,架構為王。
分層架構:
- 前端/CDN: 靜態資源 (圖片、JS、CSS) 走 CDN,Nginx 做負載均衡、靜態快取、限流。
- 應用層集群: PHP-FPM 無狀態水平擴展,Session 存 Redis/資料庫、或 JWT 無狀態。
- 資料層: MySQL 主從 + 讀寫分離,熱點資料 Redis/Memcached 集群。百萬級以上考慮 NoSQL (Cassandra/DynamoDB) 存寬表/日誌。
socici 細化資料流:
- 靜態檔 → 獨立域名 static.xxx.com → Nginx 直接服務。
- 讀請求:大數據查詢 (訂單) → Slave;公共頁面 (排行榜、商品資訊) → Cache。
- 寫請求:即時生效 (用戶資料) → Master 同步寫;低即時/高併發 (發文、私信) → 隊列異步寫。
提問者原始設計: 規格表、規格值表、規格庫存表 (用規格值 ID 組合字串做主鍵),順序固定,統計痛苦。
socici 改良方案 (規範化):
-- 1. 商品分類
category (id, name, parent_id)
-- 2. 商品主表 (SPU)
product (id, name, price, status, category_id, ...)
-- 3. 規格定義 (屬性名)
spec (id, name) -- 如: 顏色、尺碼、運營商
-- 4. 規格值 (屬性值)
spec_value (id, spec_id, value, type, default_value) -- 如: 紅/藍、S/M/L、電信/移動
-- 5. 分類-規格關聯 (決定該分類下商品可用哪些規格)
category_spec (category_id, spec_id)
-- 6. 商品-規格值關聯 (SKU 定義)
product_spec (product_id, spec_id, spec_value_id, actual_value)
-- actual_value 允許商家自定義顯示值 (如 "寶藍色" 而非標準 "藍")
-- 7. 庫存/價格表 (SKU 級別)
sku_stock (product_id, spec_value_combination, price, stock, sku_code)
-- spec_value_combination 可存 JSON: [{"spec_id":1,"value_id":10},{"spec_id":2,"value_id":20}]
-- 或維度表: sku_spec (sku_id, spec_id, spec_value_id)
關鍵優勢: 規格與值解耦、支援動態新增規格、統計時可按 spec_id 聚合、SKU 級別價格庫存獨立、前端渲染規格選擇器邏輯清晰。
劉傳雙/子柳 歷史演進:
description CLOB 存 HTML 片段,查詢效率極差。item_desc (item_id, content),大幅降低主表壓力。<img src> 寫入前替換為 TFS 路徑。核心原則: 結構化資料 (價格、庫存、屬性) 留 RDBMS/NoSQL;非結構化 (圖片、富文本、交易快照) 存檔案系統/物件存儲,DB 存引用 ID。
| 階段 | 關鍵動作 |
|---|---|
| 需求澄清 | 畫出完整業務流程圖、角色權限矩陣、資料流向圖 |
| 資料建模 | SPU/SKU 規範化、規格/值解耦、非結構化資料外移 |
| 架構演進 | CDN → Nginx → PHP 集群 → Redis → MySQL 主從 → 隊列異步 → NoSQL 擴展 |
| 核心保障 | 對賬體系、冪等設計、分散式鎖、限流降級、全鏈路追蹤 |
| 持續優化 | 慢查詢治理、快取命中率、資料歸檔、讀寫分離比例調整 |