mars 数据库历史文件结构

4 篇文章 0 订阅
3 篇文章 0 订阅
本文详细介绍了Mars数据库历史文件的结构设计,包括数据量计算、数据库文件的拆分依据、单文件内的数据存储结构以及数据检索流程。通过时间与点的数量作为拆分因素,确保文件的合理组织,并便于数据查询。
摘要由CSDN通过智能技术生成

前一章节“Mars 数据库的由来”中介绍了,Mars数据库文件的设计思路,这里详细描述下,历史文件的结构。

数据量计算

我们考虑一下,一个点需要记录哪些内容:时间,值,质量(表示值得好坏)。对于一个Double型的值,一共需要:8+8+1 =17 byte.我们设计的数据库要支持值按秒进行变化,故一个点一天的数据量有:
17*60*60*24/1024/1024=1.4 Mb
一台机器如果支持100万点,则一天的数据量有:
1.4 * 1000000 /1024/1024 = 1.336 Tb
如果是一年的数据量有:
1.336 * 365 = 487.6 Tb

数据库文件结构设计

根据上一节内容可以看出,这个数据量是分成庞大的,如果我们把所有数据都存成一个文件,显然是不合适的。32位Window操作系统中,单个文件最大只能是2GB。所以我们需要将这个文件进行拆分,具体怎么拆分,拆分的依据是什么,将是我们下面讨论的。

由于我们要记录的点的值的时间特性,所以我们可以将时间作为我们拆分文件的一个因素。根据上面的计算,一个100万点的数据量和一个点数据量明显也是不一样,所以变量的个数也是我们差分文件的一个因素。最后我确定的格则如下:

一个文件保存10万点4个小时历史数据,文件的名称格式:数据库名称+TagBlockIndex+日期(yyyyMMdd)+ TimeBlockCount + TimeBlockIndex

在进行数据检索查询时,可以快速确定某个点在某个时间上的历史值所在的文件。

单文件内数据存储结构

单个文件里记录的内容包括,点的信息+点的值信息。在一个文件内点的信息,可能会有多次变动。所以我将整个文件拆分成多个数据区(DataRegion),一个数据区包括点的基础信息+值。一个数据区内,一个点的值又被查分成一个小的块,这个块叫做数据块(DataBlock),每个数据块是独立的个体,可以对数据块进行整体的压缩。

数据检索

通过上面描述的结构,我们在执行数据查询时,具体工作流程如下:

  • 获取点的ID编号以及要查询的时间,根据这些确定所在的文件
  • 在文件内部,再次根据时间确定所在的数据区
  • 根据时间以及ID读取相应的数据块
  • 读取整个数据库,对数据块进行解压
  • 对解压后的数据进行查询,确定某个时间点上的值

具体可以参考开源Mars实时物联数据库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值