2018-02-13

作者: cloudzhou | 来源:发表于2018-02-13 16:52 被阅读23次

针对目前业务的高并发高数据量需求解决方案

场景描述

  • 5s 时间间隔推送坐标
  • 在坐标序列中计算时间,轨迹

目前遇到的问题

  • 数据量巨大,关系数据库不适用
  • 并发量,需要上万并发支持
  • 流量比较大

数据量估计

假设 100 在线,5s 推送一次,一天 10 小时预估,一个月数据量:
100 * 10 * 60 * 60 * 30 / 5 = 21600000
按照这个设计,一年达到 2.5 亿
如果终端并发量 1w,那么两天数据量达到亿级别

目前我的解决方法

  • Mysql 分库分表
  • 使用新数据库替代 Mysql
  • 基于文件中间件开发
  • 数据冷热分离

1. Mysql 分库分表

如果数据量还在我们的可控范围,那么数据库的分表分库是最为明显的,这里能否分表分库的一个关键是维度问题

  • 以终端作为查询维度
  • 以人员作为查询维度

不同的人员可以持有不同的终端,必要的时候,需要做数据 merge
即使如此,Mysql 单表也尽量控制在 1 亿级别

2. 新数据库支持

这里提供如下的几个存储组件:

  • Pingcap 的 TiDB
  • MongoDB
  • ELK 家族的 Elasticsearch

我建议是在构建大量测试数据情况下,做一个 qps 测试

3. 基于文件的中间件开发

这个对技术要求比较高,在目前信息有限下的设想:

  • 使用文件顺序写,记录终端坐标文件,Append 方式写
  • 每一个已经产生的数据,都是不可修改
  • 业务数据,比如操作者,作为 Meta 数据记录在数据库
  • 使用 Merge 等方式,合并多个终端的数据输出

数据冷热分离

从目前的数据量来看,挑战在于行记录,和流量

  • 在有限硬件下,及时查询,和报表式结果输出需要分开
  • 把数据切分成冷热数据,尽量把好的硬件条件分配到热数据
  • 离线生成报表,可以在低峰时期生成,比如凌晨 0-6 点间

我的建议

如果确实按照目前的数据量,关系数据库基本不可行
确定需求,以便决定分库分表,或者新数据库是否支持
生成大量数据测评,以便确定是否可行

相关文章

网友评论

    本文标题:2018-02-13

    本文链接:https://www.haomeiwen.com/subject/vbbjtftx.html