Java B2B2C多用户商城架构篇之——分库分表

目前公司数据量已经上来,单表最大已经5千万,之前使用分区表,用起来有很多需要注意的地方,以及坑等。

所以就在年后准备做分库分表,筛选了N多中间件、框架,似乎都不满足。主要在以下几点。

比如用阿里的myCat,需要学习、研究,因为我们目前有点急,需要安排人去研究,而且需要深入研究,结果就是搞了几天没啥头绪。但是原理就是做代理,这个了解透了。

在看当当网提供的sharding-jdbc分库分表案例,也是同样问题,没那么多时间研究,而且这几家提供的东西,居然官网都是英文/中文,中文文档也是按照老外风格写,尽量给你增加门槛!!!

 

于是乎就萌生自己写分库分表。

废话不多说。

1、首先是老数据问题,这个是网上所有文章没有提到的,没有提到这个问题的文章,可以说99.99%没玩过分库分表。

对于5000万的数据量,做切分,一张表控制在100万,你手动去复制粘贴???,每隔一段时间手动建库???

据说当当是手动,应该是写的程序手动的。。。。伤不伤???

其实很简单,我用JDBC写的,查到老库所有表名,create table newTableName like oldTableName;这样可以把表结构、索引结构都拷贝过来到新库,但是不会拷贝数据,网上有另一条SQL,我想大家已经玩过了,那个索引、主键不会拷贝。。

2、如何做数据分散存储

很多人肯定看过文章,ID取模呀。那如果数据量又达到瓶颈咋搞?阿里的单表12年就已经100亿了。。。。

所以说ID取模并不是仅仅这么简单,还需要数据量控制,我这里有个更好办法,其实就是简单数据量控制。

达到100万就Next,ID是自增的,出去100万,余数为0则Next。当然ID取模这么流行的方法都是阿里、58、京东这些架构师出来讲培训说的,其实你实际去操作,有其他N多方法,没有必要照搬。。。。

3、多表、关联关系如何建立?

你怎么知道User表包含哪些Order表呢?,如果一个user出的订单既有在N库,也有在N+1、N+2库里面呢?

通过user_id查询order。一般单库做关联查询,其实多库也可以,只是索引会失效而已了。然后2千万*5千万扫描。。。。

我看过唯品会的解决方案,他们是Order_id中间一段是user_id,完美不,很完美。。。。

但是,我们已经有5000万数据了,人家唯品会有的是钱,拉500人团队搞呗。。。2个月搞完。

我们几个人?就是我一个人。。。。伤不伤吧。。

所以这个方案不行,唯品会文章中丢弃的一个方案就是建立中间对应关系。

就是user_id和order_联合加上order_id所在库。他们丢弃的原因是中间表会巨大,确实。

但是如果放在redis缓存中就没有这个问题了,redis缓存只要空间足够大,性能2~3个亿没问题。

redis缓存还可以做切分啊,也算是完美符合我们这种小公司了吧。

 

4、如何取数据?

对于一对一查询,以前关联查询、子查询,现在都用子查询,分为两次查询。这个时间上只是毫秒差异。不用联合多库查询。(题外话,做互联网公司项目,几乎不会需要用外键、关联查询的。。。一般都是分多次查询,或者通过缓存系统拿空间换时间,怎么玩?比如微博一个用户发文章,不做文章表,所有文章放在user的下面,每个user下面都是自己的,那么查询起来就是查user就OK。)

对于一对多查询,就是2里面提到的,已经知道库了,那么具体查询方案我们还是多次查询。

对于多对多,更简单了,中间关系建立好,比以前多对多查询更简单了。这会还是一对多查询。

 

以上就是我们对于分库分表的解决方案。其实分库分表非常简单。我一个人搞了一个月吧。。。

 

 

其实有N多解决方案,最好是团队讨论,更方便沟通,文章也不能全部说出来,我写的过程遇到过N多有意思的事情以及各个框架急需提供对于扩展大数据量的问题。。。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
汉潮B2B2C多用户商城系统是一个以PHP+MySQL进行开发的PHP多用户商城网站系统源码。 汉潮多用户商城系统后台基础功能介绍: 一、商品管理 1、商品列: ① 根据商品ID、名称、分类、品牌、供货商筛选及导出商品信息 ② 支持单独设置商品结算价、市场价、本店价、属性价及会员等级折扣 ③ 商品标签、是否推荐,是否免运费、参与分佣、参与积分抵现 ④ 单品seo关键词优化 2、商品分类: ① 支持三级分类 ② 分类绑定商品类型、类目使用费、价格分级 ③ seo关键词优化 3、商品属性: ① 单类型支持单行文本、单选按钮 ② 支持自定义价格、自定义图片、是否作为搜索项 4、商品审核、商品标签、商品回收站 5、品牌管理:品牌、品牌分类的的增删改查 6、供货商管理:供货商信息列的增删改查 二、会员管理 1、会员列: ① 根据会员ID、名称、手机号、等级、注册时间筛选及导出会员信息 ② 设置会员登录/注册、消费、评价等的奖励机制 ③ 支持会员等级的添加修改,设置不同等级会员享受的商品折扣率 ④ 支持信任登录(qq、微信、新浪微博)、查询会员操作日志 2、推荐管理: ① 设置三级消费返佣比例 ② 查看会员间的上下级关系 ③ 查看会员的分成状况,以及取消某个会员的分成 3、短信接口:支持短信宝 三、营销管理 1、红包类型:绑定活动红包、线下发红包、红包有效期、红包到期提醒 2、限时促销:设置促销活动时间、是否允许店铺参与 3、积分商城:支持“积分”、“积分+现金”两种兑换方式 四、订单/财务/统计 1、订单管理: ① 根据订单号、关键字、分类、状态、支付状态、发货状态筛选订单 ② 不同配送方式的打印模板的设置、不同配送区域的运费设置 ③ 查看发货、退款、退货、评论 2、支付方式:余额支付、微信支付、支付宝、网银转账 3、售后服务:投诉、咨询信息管理 4、报统计: ① 站长统计、供应商销售额统计、会员购买量统计、 ② 平台总销售额统计、平台订单概况统计、销售明细、客户统计 五、前端管理 1、文章管理:平台简介、文章资讯、文章分类 2、广告管理:首页楼层广告只支持多种排版样式、其他推荐广告位 3、友情链接 六、系统设置 1、系统设置:系统设置、地区管理、计划任务、链接规则、数据库管理、类别管理、url设置、插件管理、配置管理 2、权限管理:添加管理员、管理员组,设置管理员组权限 七、店铺管理 1、店铺列:对店铺的基本信息、供货商、商品分类、运费、动态进行修改删除的操作 2、店铺权限:店铺权限信息及申请加入各项促销活动权限的记录 3、经营类目:店铺经营类目信息查看、审核及佣金设置 4、店铺商品:商品查看、审核 八、移动端管理 1、基本配置:基本配置、简介管理、导航管理、楼层管理 2、微信管理:微信公众号添加、首次关注、关键词、菜单管理 3、抢红包:微信抢红包活动添加及奖品设置 汉潮B2B2C多用户商城系统 更新日志: v2.1.6 更新内容: 微信绑定及自动回复、后台模板功能优化、优化审核店铺、修复评论的问题、修复后台部分列无法删除的问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员一灯

请给我打钱!!!谢谢,不客气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值