一个分销系统当中,基本有几个要点,我以商品二级分销模型为例子。
1.销售人员发展客户,自己和上级能够获得奖励。
2.当客户购买产品的时候,销售人员和上级也能获得奖励。
3.发展用户或者销售人员时,需要绑定他们的关系。
4.销售人员能够看自己下级的人员并查看自己的销售业绩。
That's all.
当时刚接触这个需求的时候,由于本来用户表有一个 pid(parent_id) 的字段,来表示自己的上级销售人员。我当时竟然可怕的是用了 ppid,pppid来表示更上级的人员。。。。。。我的天,居然有人会做出这种事。多么可怕的一段黑历史。
目前在维护一个有上千亿行数据的文件系统,分表分8192张。表结构里面有一个字段,专门维护文件夹层级,里面的值遵循一定的数据格式,长得很像linux的文件系统层级结构(例如:/usr/bin/local/),可以说是一模一样。突然,这不就是树结构吗?然后想到了分销系统的树结构
用户表字段设计:user_id,parent_id,tree,level,money
这里涉及到一些家喻户晓的人,分别是,A,B和Cn
他们有相关从属的关系。
用表来表示:
A进了某养生品公司,注册了会员。
于是A成为了这个系统的第一个用户
| user_id| parent_id | tree| level| money|
| ------------- |:-------------:| -----:|
|A|没有爸爸|/|1|0|
这时A走在大街上,看到B,说:“你听说过安利吗? blablabla”
然后B扫码成为了A的下级会员,A获得一块钱的发展会员奖励,并告诉他,你可以告诉你的新朋好友哦,卖出这么好的产品,可以分成哦。
| user_id| parent_id | tree| level| money|
| ------------- |:-------------:| -----:|
|A|没有爸爸|/|1|1|
|B|A|/A/|2|0|
那么B开始努力推广安利这个产品
给认识的熟人(C1,C2,C3)安利了一发
| user_id| parent_id | tree| level| money|
| ------------- |:-------------:| -----:|
|A|没有爸爸|/|1|4(1+3)|
|B|A|/A/|2|3(0+3)|
|C1|B|/A/B/|3|0|
|C2|B|/A/B/|3|0|
|C3|B|/A/B/|3|0|
这个表设计的优点
1.可以通过 tree 很快的找到 C1 用户的所有上级用户进行相关 *** 作
2.可以通过 like tree *** 作,利用索引,查询 A 用户所有的下级进行相关计数 *** 作,可以提高 A 的推广积极性
3.通过用 tree 属性去关联订单表,给上级返利或者查询自己的推广所得,也是很方便。
其实这个分销的树形结构像极了文件系统的标识符,我也是在做相关mysql存储文件关系的业务当中类比出如此高效快速的查询方法。
这个设计模式的缺点也很明显,一旦关系转移(类似文件夹移动),就会产生大量的tree字段修改。所幸的是:关系转移可以异步处理,但查询关系就必须同步。鉴于这种 *** 作特点,也就可以采取这种模式。
select sum(count) from (--一级
select count(*) as count from table_name where pid= 'id'
union all
--二级
select count(*) as count from table_name t1
inner join table_name t2
on t1.pid = t2.id
where t2.pid= 'id'
union all
--三级
select count(*) as count from table_name t1
inner join (
select id,pid from table_name t1
inner join table_name t2
on t1.pid = t2.id
where t2.pid= 'id'
) t2 on t1.pid = t2.id
)
我们看看现在世界上一流的互联网公司,前20强中的Yahoo(MySQL用户)、Google(MySQL用户)、Youtube(MySQL用户)、WIN Live(MS SQL Server)、Facebook(MySQL用户)、MSN(MS SQL Server)、Wikipedia(MySQL用户)、Blogger(MySQL用户)、MySpace(不知道)、Yohoo.co.jp(MySQL用户)、Baidu(MySQL用户)、Google.co.in(MySQL用户)、google.de(MySQL用户)、Microsoft(MS SQL Server)、Rapidshare(MySQL用户)、QQ.com(MySQL用户)、Google.fr(MySQL用户)、Sina.com.cn(MySQL用户)、Ebay(MySQL用户)、Fc2.com(MySQL用户),看看这些著名的公司吧。国内的大的互联网公司,找不到没有用MySQL数据库的。前段时间,很多猎头公司找MySQL的高手都很难。MySQL的确已成为全球最受欢迎的开源数据库,Oracle收购后也必须顺应市场的潮流、顺应客户的需求,因此,这个产品的前途无量啊。
试想,QQ每天巨大的业务量,还涉及Q币、充值等等交易系统,MySQL完全胜任了它所有的业务。
Oracle不仅对MySQL产品做出了十大承诺,事实上,最近一系列的具体措施也证明Oracle将会使MySQL更美好!Oracle is now making MySQL better!
九月份在美国举行的Open OneWorld上有MySQL专场,今年12月份该活动在北京举行,也有MySQL活动的专场。
在产品发展路线上,Oracle预计在今年年底推出MySQL 5.5版本,其默认存储引擎将变为性能更加突出的Innodb,据初步评测,性能有近10倍的提升。Oracle增强了一系列MySQL企业级特性和工具,包含MySQL Monitor、Workbench GUI Tools、Cluster产品等等。
在市场竞争定位上,MySQL产品被主要定位于三大领域:Web、Telecom和Embed,事实上,这些也并不是原有Oracle的突出优势市场。目前,在大中国区,Oracle对MySQL产品已经成立了独立的销售团队,在国内有上海爱可生成为本地化服务和总分销支持。
一切看来,这个产品是符合市场需求的,Oracle这家市场运营的高手,会把一个很有市场前景的产品雪藏吗?答案是肯定不会的。
去精通MySQL吧,未来一定前途无量;阿里云、盛大云、中移动云、虚拟化等等有太多新的技术与MySQL相关;移动互联网、三网融合应用不断发展创造着越来越多的MySQL新机会。
还担心什么呢?大胆采用开源理念,选择最专业的合作伙伴去创新你的系统和业务吧!选择开源MySQL作为数据库平台是符合未来的发展趋势的,其跨平台、开放性、易用性和低的总体拥有成本TCO都是符合企业应用需求的。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)