根据业务初步预估订单业务量,每天500万的数据。我们将订单数据划分为了2大类型:分别为热数据和冷数据。

热数据:1个月内的订单数据,查询实时性较高;

冷数据:归档订单数据,查询频率不高;

根据实际业务场景,用户基本不会操作或查询2个星期以上的数据,如果这部分数据存储在DB中,那么成本会非常高,而且也不方便维护。另外,如果有特殊情况需要访问归档数据,可以走离线数据查看。

对于这2类数据,规划如下:

热数据:使用MySQL进行存储,分库分表;

冷数据:ES 或 TiDB或Hive存储;

按业务垂直拆分

按照订单使用者拆分为3个数据库,客户端、商家端、渠道端,目的是分散压力,提高吞吐量,互不影响

业务分库

有人会问,下单的时候该怎么办呢?

下单时只写客户库,写成功后,往消息队列里面发送两个消息,一个是写商家库、一个是写渠道库

分表策略

在订单表中,可以将uid(用户ID)字段作为sharding key。假设单个库需要分配 10 张表可以满足业务需要,可以简单地取模计算出订单分配到哪张表。

一旦确定sharding key,就只能根据sharding key定位到子表进而查询该子表下的数据;如果确实想根据user_id 去查询相关订单,那么需要先根据user_id 查询映射到的order_id list,然后再根据order_id list 再查询。

分库策略

数据库分表能够解决单表数据量很大的时候数据查询的效率问题,但是无法给数据库的并发操作带来效率上的提高,因为分表的实质还是在同一个数据库Server上进行的操作,很容易受数据库Server IO 性能的限制。

因此, 可以将数据进行分库操作,可以解决单台数据库Server的性能瓶颈。

分库策略与分表策略的实现很相似,最简单的都是可以通过取模的方式进行路由。

uid % 数据库数量,如:109005 % 16 = 13,分配到第13个数据库

分库分表结合使用策略

数据库分表可以解决单表海量数据的查询性能问题,分库可以解决单台数据库的并发访问压力问题。有时候,我们需要同时考虑这两个问题,因此,我们既需要对单表进行分表操作,还需要进行分库操作,以便同时扩展系统的并发处理能力和提升单表的查询性能,就是我们使用到的分库分表。

如果分库和分表都使用同一个拆分键进行 Sharding 时,根据拆分键的键值按总的分表数(分库数x分表数)取余。

分库分表

整体架构

图片发自简书App

将订单请求分为查询和更新请求,更新请求比较简单,就是根据分库分表规则写入db即可。

对于查询请求,我们需要计算出查询的是热数据还是冷数据,根据查询的时间范围计算出查询的是热数据还是冷数据。或者无法确定热数据、冷数据,就都走ES 或TiDB。

另外架构图中的冷数据指的是近期1年的数据,如果是查询一年前的数据,建议直接离线查hive即可。

图中有一个定时Job,主要用来定时迁移订单数据,需要将冷数据分别迁移到ES和hive中。

mysql 多维度分表_亿级订单数据分库分表设计方案(满足多维度查询:订单号、用户、商家、渠道)...相关推荐

  1. mysql 客户无感知迁移_亿级账户数据迁移,不用数据库工具还能怎么搞?

    原标题:亿级账户数据迁移,不用数据库工具还能怎么搞? 背景 在阿里巴巴内部"大中台,小前台"的组织和业务体制,使前线业务更加敏捷,赋能业务积极迎接未来挑战和机遇,在阿里大中台能力建 ...

  2. oracle表分区--亿级的数据在oracle表中存储,表分区的一个真实应用场景

    我从来没有操作处理过如此大量的真实数据. 我的一个任务,通过kafka流式处理消息框架 消费 整个城市 其中一种手机网络的信号接入信息. 千万级人口,只要有人使用手机网络,就会产生一条数据,可想而知, ...

  3. mysql 亿级高并发_亿级流量系统架构之如何设计每秒十万查询的高并发架构.md

    亿级流量系统架构之如何设计每秒十万查询的高并发架构 一.前情回顾 上篇文章(亿级流量系统架构之如何设计承载百亿流量的高性能架构)聊了一下系统架构中,百亿流量级别高并发写入场景下,如何承载这种高并发写入 ...

  4. mybatis+mysql分库分表_一种简单易懂的 MyBatis 分库分表方案

    数据库分库分表除了使用中间件来代理请求分发之外,另外一种常见的方法就是在客户端层面来分库分表 -- 通过适当地包装客户端代码使得分库分表的数据库访问操作代码编写起来也很方便.本文的分库分表方案基于 M ...

  5. 用python做透视表_用Python实现数据的透视表的方法

    用Python实现数据的透视表的方法 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  用Python实现数据的透视表的方法.txt ] (友情提示:右键点上行tx ...

  6. arcengine遍历属性表_小程序导出数据到excel表

    老规矩,先看效果图 上图就是我们保存用户数据到excel生成的excel文件. 实现思路 1,创建云函数 2,在云函数里读取云数据库里的数据 3,安装node-xlsx类库(node类库) 4,把云数 ...

  7. 再见,数据库!MySQL千亿数据分库分表架构,堪称惊艳!

    孙玄,江湖人称"玄姐",前58集团技术委员会主席,前转转二手交易平台首席架构师.今天想跟你聊点儿企业里那些年薪百万的架构师,他们的架构设计思维是如何升级的. 话不多说,咱们直接来聊 ...

  8. 数据库查询某一列大写转化小写字母表示_基于MySQL数据库下亿级数据的分库分表...

    每天给你诚意满满的干货 本文来自程序之心知乎专栏收到的投稿 作者:恒生研究院 移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方 ...

  9. 基于MySQL数据库下亿级数据的分库分表

    来自:www.cnblogs.com/jpfss/ 移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方面的优化显得不太重要,一旦 ...

最新文章

  1. 2019 Multi-University Training Contest 4 - K-th Closest Distance
  2. linux基础-网络基础知识篇
  3. java jdbc in list_javaweb_JDBC
  4. 频频转型的蘑菇街,能讲好直播这个“老故事”吗?
  5. Java开源权限管理中间件
  6. printf 地址_C程序显示主机名和IP地址
  7. java导致native非法指令,Java代码引起的NATIVE野指针问题(上)
  8. 阶段1 语言基础+高级_1-3-Java语言高级_09-基础加强_第3节 注解_15_注解_自定义注解_属性定义...
  9. Cannot detect Web Project version. Please specify version of Web Project through Maven project ...报错
  10. 学习github的网站
  11. 抓阄 计算机代表什么东西,周岁抓阄准备哪些东西
  12. 解决qt.qpa.plugin: Could not load the Qt platform plugin “xcb“ in ““ even though it was found.问题
  13. MYSQL (关系型数据库管理系统)的基础知识详解
  14. in memory computing 存内计算是学术圈自娱自乐还是真有价值?
  15. 三 网络数据分析(1)R语言简单操作
  16. HTML,CSS,JS实现网页聊天窗口
  17. 双休和单休区别大吗?
  18. 服务器制作raid,实战案例——服务器制作raid磁盘阵列并管理
  19. 我爱你用计算机怎么表示,特殊密码表示我爱你
  20. 小红书app复制链接转换为可直接访问链接

热门文章

  1. 在Windows下搭建SVN服务器并且集成到 Eclipse 开发环境中
  2. python startswith
  3. CLR Via CSharp读书笔记(26) - 计算限制的异步操作
  4. 删除SQL Server注册
  5. SAP库存解析(MC.9)
  6. 浅谈MES与SAP PP模块的集成应用
  7. 用dwz+springmvc出现这个问题Http status: 200 OK ajaxOptions: parsererror thrownError
  8. 2015各地高温补贴发放标准时间一览表
  9. MRP区域“MRP Area”的定义以及作用
  10. conscience ['kɔnʃəns]