系統設計-電商排名

銷售排名:大型電子商務公司但願列出最暢銷的產品,總體和類別。例如,一款產品多是總體銷量排名第1056位的產品,但在「運動器材」一欄中排名第13位,在「安全:·」一欄中排名第24位。描述你將如何設計這個系統。數據庫

1.分析步驟安全

  • 步驟1: 肯定問題的範圍
    • 首先,咱們須要定義咱們正在構建什麼
      • 咱們假設只要求咱們設計與此問題相關的組件,而不是整個電子商務系統。
      • 咱們還應該定義銷售排名的含義。
        • 它是全部時間的總銷售額嗎?
        • 上個月的銷售額是多少?
        • ...
  • 步驟2:作出合理的假設
    • 咱們假設統計數據不須要是100%最新的。
    • 對於最受歡迎的項目,精度是很重要的,可是對於不太受歡迎的項目,有必定程度的偏差也是能夠的。
    • 咱們假設數據應該每小時更新一次(對於最流行的項目),可是數據的時間範圍不須要精確到最後七天(168小時)。若是有時超過150個小時,也不要緊。
    • ...
  • 步驟3:繪製主要組件


  • 步驟4: 肯定關鍵問題
    • 若是查詢和寫很是昂貴,咱們能夠考慮徹底放棄數據庫,只使用日誌文件。這將容許咱們利用MapReduce之類的東西。設計

      • 咱們將運行頻繁的做業,根據產品ID和時間範圍將文件合併在一塊兒,以便最終將給定一天(或可能一個小時)內的全部購買組合在一塊兒
    • 要得到每一個類別中最暢銷的產品,只需對每一個目錄進行排序
    • 咱們將運行頻繁的做業,根據產品ID和時間範圍將文件合併在一塊兒,以便最終將給定一天(或可能一個小時)內的全部購買組合在一塊兒
      • 咱們如何獲得總體排名?有兩種很好的方法:
        • 咱們能夠將通常類別視爲另外一個目錄,並將每次購買寫入該目錄。
        • 或者,由於咱們已經按照每一個類別的銷售量順序對產品進行了排序,因此咱們還能夠進行N-way merge來得到總排名

2.問題延伸日誌

  • 你認爲你會在哪裏遇到下一個瓶頸?你會怎麼作?
  • 若是還有子類別呢?因此項目能夠列在「體育」和「體育器材」下面(甚至「運動」>「運動器材」>「網球」>「球拍」)?
  • 若是須要更準確的數據怎麼辦?若是全部產品都須要在30分鐘內準確無誤,該怎麼辦?
相關文章
相關標籤/搜索