锁定老帖子 主题:淘宝下单高并发解决方案
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2012-04-28
aa87963014 写道 再怎么说。。也只是分库分表。。好歹给点怎么封装这些分库分表操作的代码之类的吧
代码不重要吧,有了怎么分,代码应该不会有什么难度吧。 |
|
返回顶楼 | |
发表时间:2012-04-28
codeone 写道 请教楼主一个问题,你说的表拆分是把一个很多字段的表拆分到多个包含少量列的表里?还是将表放到多个数据库里,表结构保持不变?
这里的拆分都是横向的或者说水平方向的拆分。不会按列拆分。谢谢。 |
|
返回顶楼 | |
发表时间:2012-04-28
montya 写道 yukaizhao 写道 订单号介绍勘误:
文中对于订单号的表述有点问题,对于16台服务器,每台服务器64张表只需要2位买家或卖家id的后两位数字就可以准确定位到具体的库和表。订单号中同时存在买家id的最后两位和卖家id的最后两位。分别在订单号的倒数第3,4位数和最后两位数。 假定买家id为123456789,那么在订单号中的最后两位就是89,通过89对16取模就可以定位到具体的库上,通过对64取模就可以定位到具体的表上。 简单靠取模来判断数据和表,不太好吧。 如果后期有新表和服务器。加入呢。 用类似memcache 中一致性hash。不知道怎么样。 这个具体的细节我也不清楚。那天牧劳在session中讲的时候确实是说的取模。 |
|
返回顶楼 | |
发表时间:2012-04-28
timefly123 写道 下单要考虑库存量, 这个不是附近功能!而是非常重要的业务前提条件,而且还是一个并发事务点。另:这里只是对订单表做了分布式拆分设计,买家和卖家应该是通过订单号来对订单表进行访问的吧?那么买、卖家ID和订单号ID之间似乎并无必然关联~
按我的理解,库存量是从其他地方取的,而没有在交易表中存在。 |
|
返回顶楼 | |
发表时间:2012-04-28
最后修改:2012-04-28
想怎么分就怎么分,但是对于架构来说如何把这个分库功能在应用层屏蔽掉
例如我的freyja http://freyja.iteye.com/blog/1412191 底层分库分表,业务代码无需改动 |
|
返回顶楼 | |
发表时间:2012-04-29
在淘宝多数情况下是采用id区模的方式进行分库分表的,并且有开发了针对分库分表数据库的访问数据源 tddlDataSource, 淘宝内部有很多技术分享课题, 有很多很好的想法,并且在淘宝里面 几乎看不到连表查询的sql语句,由于数据量较大,连表的性能就不太好了,基本都是单表查询。在淘宝学到了很多....大家可以关注下淘宝开源的一些技术。
|
|
返回顶楼 | |
发表时间:2012-05-01
hueng512 写道 三问飞絮 写道 程序新手 写道 请教一下
1)比如说你拆分了物品表,而这个表按照你说的已经分成了现在你想要对这个物品按照不同的条件进行分别的排序,怎么办? 2)另外如果有业务需求需要连表查询,怎么办? 3)个人觉得你对订单的举例,只是where条件中的一个条件,如果有其他条件怎么办? 同问,比较不理解的是如何实现关联查询。 尽量避免,甚至不用。 |
|
返回顶楼 | |
发表时间:2012-05-01
mygirl1314520 写道 在淘宝多数情况下是采用id区模的方式进行分库分表的,并且有开发了针对分库分表数据库的访问数据源 tddlDataSource, 淘宝内部有很多技术分享课题, 有很多很好的想法,并且在淘宝里面 几乎看不到连表查询的sql语句,由于数据量较大,连表的性能就不太好了,基本都是单表查询。在淘宝学到了很多....大家可以关注下淘宝开源的一些技术。
不太了解淘宝内部如何去拆分的,但貌似tddlDataSource的功能是为App提供了一个DB的Proxy,拆分的功能可以通过这个Proxy灵活配置,如果业务改变,需要多拆分几个,更改这个配置就可以了,虽然说起来比较简单,但是实现起来应该也花费不少成本吧~ 貌似现在oracle 提供了一个MysqlProxy东东 |
|
返回顶楼 | |
发表时间:2012-05-01
理解的不错 可以来淘宝上班了!
|
|
返回顶楼 | |
发表时间:2012-05-02
看完之后有收获
|
|
返回顶楼 | |