在开发工业系统的数据采集功能相关的系统时,由于数据都是定时上传的,如每20秒上传一次的时间序列数据,这些数据在经过处理和计算后,变成了与时间轴有关的历史数据(与股票数据相似,如下图的车辆行驶过程中的油量曲线、历史轨迹数据等)。当采集点多的时候,如上万个采集终端,再加上时间的累积,数据表会变得越来越大。数据库会越来越难以维护。

对历史数据操作的功能有历史数据的查询、统计图表曲线显示等等。而这些基于组合条件的历史查询功能和图表显示功能对数据库的压力可不小,如果听之任之,则海量的数据查询、统计计算会非常慢,用户体验很差。所以对于这种类型的表结构设计的时候,要制定好策略,避免以后再进行变动就麻烦了。

常规的策略就是分表。减少单一数据表的容量,通过增加合并查询和计算的逻辑的复杂度来换取减轻查询对数据库的压力。

1     表设计

1.1   设计思想

  • 减少冗余数据的存储
  • 数据写入时进行预运算
  • 通过降低记录量提高系统的响应能力
  • 降低磁盘的读操作

1.2   模型结构

GPS轨迹日志数据表保存原始的定位信息数据,索引表为日志数据表的索引信息内容,预处理模块完成新数据的预处理运算功能,保持索引表的信息与日志数据表的信息一致。

  预处理模块建议为数据库内部的存储过程,保证对数据表操作的效率性能,通讯服务器以访问存储过程的方式,完成数据保存的事务处理。

1.3   模型原理

1.3.1 数据量

  日志数据表最多保存四个月的定位信息数据,最高的记录为246亿条数据,数据量为2.3T(2012年9月-12月)。

  索引表为日志数据表的索引信息,保留三个月零一天的车辆定位信息,每车每天为一条记录,最高数据量为432万,每个车辆每天的摘要信息保存在二进制的字段里。

  摘要的数据内容包含定位时间、速度、里程、经度、纬度、角度状态信息,摘要在索引表里按规定的报文方式保存在索引表的二进制字段里,每个车辆一天产生的定位数据量为4320条,速度为0的定位信息所占比例为40%-60%左右,因此摘要里只记录有速度的定位数据,每车每天的实际摘要的数据量为2000左右。每个摘要信息量为30Bytes,因此每车每天产生的摘要为58K Bytes左右。

  注:从统计角度考虑,摘要信息里也许会包括速度为0的定位信息。

1.3.2 读取性能

  索引表根据业务操作的需要分为“最新定位索引表”、“三个月定位索引表”及“相关的统计索引表”。由于索引表里的记录量在百万级别内,可以实现毫秒级别的响应能力,所有的定位摘要数据保存在一个BLOB的二进制字段里,一次性快速读取出58K Bytes左右的数据,即可获得全天的车辆定位数据,避免数据库在磁盘上随机检索定位数据读而引起I/O性能瓶颈。

1.3.3 索引数据的写操作

  每车每天的索引信息的更新,通过预处理模块完成,如果索引表里已经存在该车该天的记录,则进行二进制字段的更新,否则自动添加新的记录。新的车辆定位摘要信息通过规定好的报文协议直接追加到二进制字段后面。

  每天通过后台作业的方式,定时删除索引表里最早一天的数据。一次删除的最大记录量为4.9万条(2012年12月31日)。

1.3.4 索引数据的读

  读取车辆在某时间段内的定位数据,会从索引表里获得到相应天数的记录数,通过对BLOB字段进行数据协议的处理,获得定位摘要的记录集。

  协议的解析工作可以由预处理模块解析,然后反转为表形式返回给web应用,也可以数据库直接交付给web应用服务器二进制数据,由web应用服务器完成数据的解析操作。

1.3.5 报表统计

  索引表里二进制数据摘要的状态可以支持8种不同的状态,每个定位数据可以同时具有8种不同的状态,比如超速、偏移路线等,可以直接通过索引表进行统计,快速实时的获取最新的报表数据。

技术支持 By 省厓 QQ:2252224326  2252224326​​​​​​​@qq.com 版权所有 http://blog.sina.com.cn/u/6029512413  

海量数据GPS定位数据库表设计的更多相关文章

  1. Innodb IO优化 — 数据库表设计 转

    数据库表设计这块学问比较多,我这里单从互联网角度出发同时结合Innodb的特性给出一些设计方法供大家参考.本文构建大概分两分部分:Innodb的特性及设计中如何利用这种特性. Innodb特性: In ...

  2. Oracle数据库表设计时的注意事项

    表是Oracle数据库中最基本的对象之一.万丈高楼从平地起,这个基础对象对于数据库来说,非常重要.因为其设计是否合理,直接跟数据库的性能相关.从Oracle数据库菜鸟到数据库专家这个过程中,在表设计与 ...

  3. springmvc 项目完整示例01 需求与数据库表设计 简单的springmvc应用实例 web项目

    一个简单的用户登录系统 用户有账号密码,登录ip,登录时间 打开登录页面,输入用户名密码 登录日志,可以记录登陆的时间,登陆的ip 成功登陆了的话,就更新用户的最后登入时间和ip,同时记录一条登录记录 ...

  4. 数据库表设计时一对一关系存在的必要性 数据库一对一、一对多、多对多设计 面试逻辑题3.31 sql server 查询某个表被哪些存储过程调用 DataTable根据字段去重 .Net Core Cors中间件解析 分析MySQL中哪些情况下数据库索引会失效

    数据库表设计时一对一关系存在的必要性 2017年07月24日 10:01:07 阅读数:694 在表设计过程中,我无意中觉得一对一关系觉得好没道理,直接放到一张表中不就可以了吗?真是说,网上信息什么都 ...

  5. ERP开发分享 1 数据库表设计

    这是我的ERP设计经验分享系列,今天讲的是数据库的表设计(1),主要阐述: 1.单字段的主键:2.使用int32作为主键类型:3.使用版本字段处理乐观锁定:4.生效字段标明是否允许“被使用”:5.锁定 ...

  6. Acitiviti数据库表设计(学习笔记)

    ACT_ID_*:与权限,用户与用户组,以及用户与用户组关系相关的表 ACT_RU_*:代表了流程引擎运行时的库表,RU表示Runtime ACT_HI_*:HI表示History当流程完成了节点以后 ...

  7. 抽屉之Tornado实战(2)--数据库表设计

    经过我们上次分析,数据库要有最基本的四张表,用户表,消息表,类型表,点赞表,评论表,接下来我们看着怎么设计吧 首先我们要清楚,表设计的代码是写在models下的 用户表 #一张表对应一个类 class ...

  8. 测试用数据库表设计和SessionFactory

    本篇为struts-2.5.2和spring-3.2.0以及hibernate-4.2.21的整合开篇. 一.测试的数据库表. 用户.角色和权限关系表.数据库是Mysql5.6.为了考虑到一些特殊数据 ...

  9. Tornado之抽屉实战(2)--数据库表设计

    经过我们上次分析,数据库要有最基本的四张表,用户表,消息表,类型表,点赞表,评论表,接下来我们看着怎么设计吧 首先我们要清楚,表设计的代码是写在models下的 用户表 ? 1 2 3 4 5 6 7 ...

随机推荐

  1. 移动Web开发规范概述

    以下规范建议,均是Alloyteam在日常开发过程中总结提炼出的经验,规范具备较好的项目实践,强烈推荐使用. 字体设置 使用无衬线字体 body { font-family: "Helvet ...

  2. PowerDesigner如何将字段的注释显示出来

    选定一个编辑的表,右键- >Properties- >Columns- >Customize Columns and Filter(或直接用快捷键Ctrl+U)- >Comme ...

  3. P1067 多项式输出(模拟水题)

    题目描述 一元nn次多项式可用如下的表达式表示: 其中,a_ix^iai​xi称为ii次项,a_iai​ 称为ii次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该多项式: ...

  4. 线段树模板(单点更新,区间更新,RMQ)

    Bryce1010模板 1.单点更新 说明 单点更新,区间求和(你问我单点求和??你就不会把区间长度设为0啊?) • sum[]为线段树,需要开辟四倍的元素数量的空间. • build()为建树操作 ...

  5. Problem D. Dwarf Tower spfa

    http://codeforces.com/gym/100269/attachments 首先建图,然后图中每条边的权值是会变化的,是由dis[x] + dis[y]  --->   dis[m ...

  6. lecture-9-hashmap

    1.hashmap基本操作 2.hash function,equals函数,hashCode 3.练习题 1)Two Sum Given an array of integers, return i ...

  7. SpringBoot | 第十二章:RabbitMQ的集成和使用

    前言 上节讲了缓存数据库redis的使用,在实际工作中,一般上在系统或者应用间通信或者进行异步通知(登录后发送短信或者邮件等)时,都会使用消息队列进行解决此业务场景的解耦问题.这章节讲解下消息队列Ra ...

  8. Java学习笔记--关于面向对象的思考

    1.不可改变的类生成对象以及变量的范围 2. 关键词this的使用 3.用类抽象的思想制作软件 4.通过关系模型建立类 5.使用面向对象的范例来设计程序,遵循类设计指导. 已经学习了:怎么定义类已经创 ...

  9. ssm(Spring、Springmvc、Mybatis)实战之淘淘商城-第十天(非原创)

    文章大纲 一.课程介绍二.单点登录系统分析三.单点登录系统代码实战四.项目源码与资料下载五.参考文章   一.课程介绍 一共14天课程(1)第一天:电商行业的背景.淘淘商城的介绍.搭建项目工程.Svn ...

  10. Vue汇总(搬砖)

    掘金: https://juejin.im/ Element: http://element-cn.eleme.io/#/zh-CN 验证码GEETEST---极验 : https://docs.ge ...