前一章节“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 + Tim