最近多次被人問到項目開發的要點、難點,本身一直沒作整理,一切的偷懶都要償還:前端
【圖片庫管理】java
一開始把用戶上傳的圖片和管理員配置的系統級圖片放在tomcat下項目目錄下,作過的朋友都知道這樣不合理:數據庫
一、項目從新部署的時候每每形成用戶圖片覆蓋丟失;tomcat
二、作了一個自動升級代碼的程序,也要求用戶每次更新項目要首先備份圖片文件夾,不然後果嚴重,圖片丟失壓根兒沒法找回;服務器
——改進的思路:數據結構
一、專門的圖片服務器,與項目代碼分離,數據庫存儲訪問路徑,這樣也方便向分佈式圖片服務器優化;分佈式
二、圖片訪問能夠用ftp或者rest API的形式訪問;oop
三、升級自動備份、恢復,將大幅提高用戶的體驗;要容災應該設定同步數據備份同步,可是這樣要增長一套服務器成本;性能
【搜索分詞】優化
你不會還在用like吧?作搜索引擎,創建分詞索引,那麼是用lucene+hadoop仍是solr 的分佈式功能?
Lucene是一個由java編寫的高性能、全方位的單詞搜索引擎庫。
【商品SKU設計】
所謂「SKU」即Stock Keeping Unit(庫存量單位),是物理上不可分割的最小存貨單元。通俗點說就是咱們常說的商品單品,是商品的最小粒度,做爲惟一標示綁定訂單。
這裏涉及到店鋪前臺用戶選擇商品規格的效果,你們想一想應該怎麼實現?
這裏,咱們設計了從「商品分類表」、「商品規格表」到「商品表」,商品表綁定規格屬性,一個商品多個規格,這張表的值,能夠理解成sku;
當數據結構設計好以後,前端的展現,這個js的級聯效果也挺有意思的,不信能夠試試!
附:什麼是SPU、SKU、ARPU? http://bbs.paidai.com/topic/34852
SPU是標準化產品單元,區分品種;SKU是庫存量單位,區分單品;商品特指與商家有關的商品,可對應多個SKU。
【子帳號設計與解耦】
因爲管理端能夠隨意修改tuser或者刪除tuser,形成的會員表tmember和商城用戶表shop_user找不到對應的tuserId,須要命令行清理數據庫:
/*#刪除會員表Tmember廢棄的tuser數據*/
select id, tuserId from tmember where tuserId not in (select id from tuser);
delete from tmember where tuserId not in (select id from tuser);
/*#刪除商城用戶表shop_user廢棄的tuser數據*/
select id, t_user_id from shop_user where t_user_id not in (select id from tuser);
delete from shop_user where t_user_id not in (select id from tuser);
——因爲起初設計的耦合,又沒有適時解耦,形成維護上的麻煩,咱們在之後的設計中應以此爲界,儘可能規避;
另外,現有的商城異常機制不完善,在找不到tuser的時候沒有拋自定義的異常,而是直接404了,給用戶體驗很糟糕;
另外一個層面也警示咱們數據庫約束要慎用,程序來控制就好;