在开发工业系统的数据采集功能相关的系统时,由于数据都是定时上传的,如每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. PAT天梯赛L2-025 分而治之

    题目链接:点击打开链接 分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题就请你编写程 ...

  2. php魔术常量、超全局变量、魔术方法

    一.魔术常量(魔术变量) 概念:所谓的魔术常量就是PHP预定义的一些常量,这些常量会随着所在的位置而变化. 1.__LINE__  获取文件中的当前行号. 2.__FILE__  获取文件的完整路径和 ...

  3. 黑马SSM项目练习中的Oracle操作

  4. Duff and Meat(贪心)

    Duff is addicted to meat! Malek wants to keep her happy for n days. In order to be happy in i-th day ...

  5. lecture-9-hashmap

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

  6. Python 添加模块

    一.方法1: 单文件模块直接把文件拷贝到 $python_dir/Lib 二.方法2: 多文件模块,带setup.py 下载模块包,进行解压,进入模块文件夹,执行:python setup.py in ...

  7. Sqoop概述

    sqoop Sqoop 是传统数据库与 Hadoop 之间数据同步的工具,它是 Hadoop 发展到一定程度的必然产物,它主要解决的是传统数据库和Hadoop之间数据的迁移问题.这节课我们将详细介绍 ...

  8. 汇编语言版本的HelloWorld

    平台 macOS 工具 nasm clang 文件 main.asm extern _printf ; 这里调用系统的一个系统调用函数, _printf, 使用extern告诉链接器该label在其他 ...

  9. 经典SQL语句集锦(收藏版)

    文章来源:http://www.cnblogs.com/herbert/archive/2010/07/02/1770062.html SQL分类: DDL—数据定义语言(CREATE,ALTER,D ...

  10. OO 第三单元总结

    1. JML梳理 根据JML LEVEL 0手册梳理常用条目 1.1 JML 理论基础 \result表达式 : 表示方法返回值 \old( expr )表达式:表示方法执行之前expr表达式取值,若 ...