最近多次被人问到项目开发的要点、难点,本身一直没作整理,一切的偷懒都要偿还:前端
【图片库管理】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了,给用户体验很糟糕;
另外一个层面也警示咱们数据库约束要慎用,程序来控制就好;