CN104572995A - 一种分布式实时数据快速处理方法 - Google Patents

一种分布式实时数据快速处理方法 Download PDF

Info

Publication number
CN104572995A
CN104572995A CN201510005234.XA CN201510005234A CN104572995A CN 104572995 A CN104572995 A CN 104572995A CN 201510005234 A CN201510005234 A CN 201510005234A CN 104572995 A CN104572995 A CN 104572995A
Authority
CN
China
Prior art keywords
data
processing method
fast
distributed real
function
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN201510005234.XA
Other languages
English (en)
Inventor
谢吉慧
王奕荣
刘畅
张景川
朱熙
王晶
郄殿福
陈金明
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Beijing Institute of Spacecraft Environment Engineering
Original Assignee
Beijing Institute of Spacecraft Environment Engineering
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Beijing Institute of Spacecraft Environment Engineering filed Critical Beijing Institute of Spacecraft Environment Engineering
Priority to CN201510005234.XA priority Critical patent/CN104572995A/zh
Publication of CN104572995A publication Critical patent/CN104572995A/zh
Pending legal-status Critical Current

Links

Abstract

本发明提出了一种分布式实时数据快速处理方法。该方法利用类环形的数据结构进行数据存储,存储文件大小可通过变量调整,并能自动进行新旧数据的自动覆盖,支持不同数据源或同一数据源采集数据的分批接收,通过内存索引技术,数据查询速度比传统数据快7倍以上,通过多线程和数据锁技术,实现大量数据的可靠、快速访问,同时采用特殊的数据压缩算法和Zip压缩算法,减少数据存储量,实现提高数据存储速度。

Description

一种分布式实时数据快速处理方法
技术领域
本发明涉及大型分布式工业控制或试验测试技术领域,尤其涉及一种分布式实时数据快速处理方法。
背景技术
目前,许多领域的软件都涉及到大量的实时数据,在实时数据增量的获取和处理上,虽然当今大多数的数据库可以存储并查询到某两个时间戳的数据并计算出增量,但是存储并查询的过程耗时很长,往往无法满足客户对软件处理速度的要求。例如,目前广泛使用的行式数据库,在面对大量实时数据的增量的获取和处理时,其速度较慢,无法满足客户的需求。还有其他现有的数据库如列式数据库、键值数据库均无法满足客户对处理速度的需求。
因此,提高面对大量实时数据的增量的获取和处理速度具有非常重要的意义,已成为急需解决的技术问题。
发明内容
本发明的目的在于提供一种分布式实时数据快速处理方法,通过该方法不仅确保数据的快速查询、存储和读取,也可对分批传送数据进行自动化整合。
为实现上述目的,本发明采用的技术方案是:
一种分布式实时数据快速处理方法,其特征在于:建立并利用类环形的数据结构对实时数据进行存储。
优选的,建立的类环形数据结构时可使用变量控制存储文件的大小,当写入数据超过存储文件大小时,写入的数据从该存储文件头部继续写入,覆盖原来的数据。
优选的,采用指定压缩算法和Zip压缩算法共同对数据进行压缩,减少数据的存储量以提高数据读写速度。
优选的,在内存中建立并利用索引查找数据,可以快速查找某个时间戳的数据,以便于快速计算任意一个时间戳的数据到其他任意一个时间戳数据的增量。
优选的,在对数据进行读写时分别使用lock关键字锁定来保证当一个线程位于代码的临界区时,另一个线程不会进入该临界区。
本发明中所提出的分布式实时数据快速处理方法,至少可以达到以下有益效果:
1)采用环形存储结构可以使一个周期后到达的数据直接覆盖旧数据,方便、快捷,而传统的数据库存储方式则需要查找数据点进行覆盖,浪费了时间;
2)而面对实时的海量大数据,考虑实际网络传输的情况,为了避免网络数据传输时发生阻塞,该方法可以使同一时间戳的数据分批传送,因此提供两种形式的数据更新方式,追加数据和新增数据;
3)该方法提供的以索引方式查询和读取大数据时所耗费的时间大约是传统数据库查询和读取大数据时间的七分之一。
附图说明
为了更清楚的说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做简单的介绍,显而易见,下面描述中的附图仅仅是本发明中记载的一些实例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为该分布式实时数据快速处理方法中的各功能组成的示意图;
图2为该处理方法中功能1的流程图;
图3为该处理方法中功能2的流程图;
图4为该处理方法中功能3的流程图;
图5为该处理方法中功能4的流程图;
图6为该处理方法中功能7的数据压缩的流程图;
图7为该处理方法中功能7的数据反压缩的流程图。
具体实施方式
为了使本技术领域的人员更好的理解本发明实施例中的技术方案,并使本发明上述的目的、特征和优点能够更加明显易懂,下面结合附图对本发明技术方案作进一步详细说明。
该分布式实时数据快速处理方法中的各功能组成如图1所示,其中包括:功能1,建立存储数据的文件索引;功能2,将数据写入文件;功能3,查询某个时间戳的数据;功能4,计算某两个时间戳的数据增量;功能5,打开文件;功能6,关闭文件;功能7,数据压缩和反压缩。
上述这些功能分别由三个模块来实现。
其中,操作模块实现的功能包括:
1)打开文件;
2)关闭文件;
3)采用特殊的压缩算法和Zip压缩算法同时对数据进行压缩,以及反压缩。
读写模块实现的功能包括:
1)建立存储数据的文件索引;
2)将数据写入文件;
查询模块实现的功能包括:
1)查询某个时间戳数据;
2)计算某两个时间戳数据增量。
在以上对分布式实时数据快速处理方法中,操作模块执行的功能3)提供特殊的数据压缩算法,减少数据的存储量以提高数据的存储速度。
(一)读写模块
读写模块执行的功能1)所述的建立存储数据的文件索引,当检测到某个路径的文件已存在索引时,不再新建一个索引,而是将原文件的索引读取于内存中,同时读取配额。
读写模块执行的功能2)所述的将数据写入文件,此功能首先需要判断将要写入的此时间戳是否已经存在于文件之中;若此时间戳已经存在,则进行追加新数据,读取当前数据字节,写入新增后的数据字节,写入新数据;若不存在,则进行新增数据,计算新增数据行的位置,写入新数据,最后更新索引。
在上述分布式实时数据快速处理方法中,读写模块执行的功能1)和功能2),进行读写操作时,分别使用关键字lock锁定来保证当一个线程位于代码的临界区时,另一个线程不会进入该临界区。
功能1创建索引中首先要使用函数File.Exists()判断要打开的路径上是否已经存在文件,若文件已存在,则读取已存在文件的索引,具体过程:
最终将已存在的索引装入m_indexes中等待查询使用;
若文件不存在,则进行新建索引,具体函数如下:
var aTimeSpanBuf=BitConverter.GetBytes(m_maxTimeMaxTimeSpan.Ticks/TimeSpan.TicksPerSecond);
var aMaxSupportedPointsBuf=BitConverter.GetBytes(m_maxSupportedItems);
m_indexWriter=new FileStream(strIdxFile,FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.Read);
m_indexReader=new FileStream(strIdxFile,FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
m_indexWriter.Write(aTimeSpanBuf,0,5);
m_indexWriter.Write(aMaxSupportedPointsBuf,0,aMaxSupportedPointsBuf.Length);
m_indexWriter.Flush();
最终新建的索引保存在m_indexes中等待查询使用,工作流程图如图2所示。
在功能2写入数据中,首先要判段要写入的时间戳是否已存使用索引进行快速判断,m_indexes.TryGetValue(ITicks,out iPos),ITicks为写入的时间戳。
若该时间戳已存在于索引中,则进行追加新数据,其具体步骤是:
(1)读取当前字节数
var aTotalSizeBuf=new byte[4];
m_dataWriter.Seek(iPos+5,SeekOrigin.Begin);
m_dataWriter.Read(aTotalSizeBuf,0,aTotalSizeBuf.Length);
var iTotalSize=BitConverter.ToInt32(aTotalSizeBuf,0);
(2)写入新增后的数据字节数
var iNewTotalSize=iTotalSize+6*dataArray.Length;
Debug.Assert(5+4+iNewTotalSize<=m_dataRowSize);
aTotalSizeBuf=BitConverter.GetBytes(iNewTotalSize);
m_dataWriter.Seek(iPos+5,SeekOrigin.Begin);
m_dataWriter.Write(aTotalSizeBuf,0,aTotalSizeBuf.Length);
(3)写入新数据
m_dataWriter.Seek(iPos+5+4+iTotalSize,SeekOrigin.Begin);
var aDatBuf=MakeDatBuffer(dataArray);
m_dataWriter.Write(aDatBuf,0,aDatBuf.Length);
m_dataWriter.Flush();
若该时间戳不存在,则进行新增数据,其具体步骤是:
(1)计算新增数据行的位置
(2)写入新时刻数据
var aDatRowBuf=new byte[m_dataRowSize];
var aTimeSpanBuf=BitConverter.GetBytes(lTicks);
Buffer.BlockCopy(aTimeSpanBuf,0,aDatRowBuf,0,5);
var aDatBuf=MakeDatBuffer(dataArray);
var aDatLenBuf=BitConverter.GetBytes(aDatBuf.Length);
Buffer.BlockCopy(aDatLenBuf,0,aDatRowBuf,5,aDatLenBuf.Length);
Buffer.BlockCopy(aDatBuf,0,aDatRowBuf,9,aDatBuf.Length);
m_dataWriter.Write(aDatRowBuf,0,aDatRowBuf.Length);
m_dataWriter.Flush();
(3)更新索引
var iIdxOffset=(1+iPos/m_dataRowSize)*9;
m_indexWriter.Seek(iIdxOffset,SeekOrigin.Begin);
var aPosBuf=BitConverter.GetBytes(iPos);
m_indexWriter.Write(aTimeSpanBuf,0,5);
m_indexWriter.Write(aPosBuf,0,aPosBuf.Length);
m_indexWriter.Flush();
m_indexes.Add(lTicks,iPos);
具体工作流程图如图3所示。
(二)查询模块
查询模块执行的功能1)提供查询某个时间戳数据的方法,所述方法利用索引能快速的查找某个时间戳,并获取该时间戳的数据,使用泛型结构Dictionary<key,value>作为返回值,返回被查找时间戳的数据;若该时间戳不存在,则返回空值。
查询模块执行的功能2)提供计算某两个时间戳数据增量的方法,所述方法的步骤是:利用该模块执行的功能1)分别得到某两个时间戳的数据并计算差值进行返回。
此外,可以创建如下的类来更好的实施该分布式实时数据快速处理方法:
其中C_INDEX_ROW_SIZE为索引行的大小,值为9,其中5字节相对时间刻度,4字节数据位置。其余变量下述会用到,在此不在赘述。
功能3查询数据中可利用索引进行快速匹配查询,将查询的结果用Dictionary<key,value>返回,得到被查时间戳的数据。若被查时间戳不在索引中,则返回空值。具体工作流程如图4所示。
功能4计算两个时间戳数据的增量,利用功能3中中返回的两个时间戳的数据计算其增量。具体工作流程如图5所示。
图2为较为完整的使用一次实时数据增量处理方法的流程,帮助理解此方法。
(三)操作模块
操作模块所执行的功能5中,分别有两种方式打开文件:
方式一:以读写方式打开文件
其中filePath表示文件路径,maxTimeSpan表示最大时间间隔;maxSupportedItems表示配额;
方式二:以只读方式打开文件
public static TimeVariantCache OpenRead(string filePath)
{
return new TimeVariantCache(filePath,TimeSpan.Zero,0);
}
操作模块所执行的功能6中,除了关闭文件的操作,还要释放索引和文件所占内存的资源。
操作模块所执行的功能7数据压缩的流程图如图6所示。例如要求测点的温度、电流、电压的数值并精确到三位小数,且温度通常的变化范围在-150.000~150.000℃之间,电流的变化范围在0.000~4.000A之间,电压的变化范围在0.000~100.000V之间先前的存储方法考虑到数值精确到小数点后三位而各用一个占用四字节的浮点型数来存储每一个测点的温度、电流、电压数据。通过观察发现,温度的变化范围是最大的,最大最小值的差值最大可以达到300.000,如果把这个最大变化差值乘以1000变成一个整型的数字得到的结果是300000,一个字节可以表示的整型的数值的范围是0~2^8-1即0~255,两个字节可以表示的整型的数值范围是0~2^16-1即0~65535,三个字节可以表示的整型的数值的范围是0~2^24-1,即0~16777215,可以看出当把测点的温度、电流、电压数据都转换成整型之后只需要三个字节就可以存储所需要的每个数据,和原来的利用四个字节的浮点型存储每个数据的方法比较起来,新型的算法将原有的海量数据压缩到了原来的3/4,这不仅节约了存储空间,而且加快了可视化展示平台读取数据的速度。具体的操作步骤如图6
例如测点在某个周期采集的温度数据的数值是123.345,那么将123.345乘以1000得到结果123345,然后定义字节数组byte[]dataArray=newbyte[3];dataArray[0]=(byte)((123345&0x00FF0000)>>16);dataArray[1]=(byte)((123345&0x0000FF00)>>8);dataArray[2]=(byte)((123345&0x000000FF));然后字节数组中就把当前的数值信息存储了起来。dataArray中的信息为11110000111010001。
倘若采集到的温度数据的数值是-147.987,取N=400.000,那么将-147.987加上400.000得到结果252.013,将252.013乘以1000,得到结果252013,然后定义字节数组byte[]dataArray=new byte[3];dataArray[0]=(byte)((252013&0x00FF0000)>>16);dataArray[1]=(byte)((252013&0x0000FF00)>>8);dataArray[2]=(byte)((252013&0x000000FF));然后字节数组中就把当前的数值信息存储了起来。dataArray中的信息为111101100001101101。
操作模块所执行的功能7的数据反压缩的具体方法如图7所示。
例如测点在某个周期采集的温度数据的数值被压缩后是dataArray=11110000111010001,那么定义临时浮点型变量floattempValue=(float)((((int)dataArray[0])<<16)+(((int)dataArray[1])<<8)+(int)dataArray[2]);得到结果tempValue=123345,定义另一个浮点型变量anotherValue=tempValue/1000,得到anotherValue=123.345,因其不大于150.000,所以其原始值就是123.345。
倘若测点在某个周期采集的温度数据的数值被压缩后是dataArray=111101100001101101,那么定义临时浮点型变量floattempValue=(float)((((int)dataArray[0])<<16)+(((int)dataArray[1])<<8)+(int)dataArray[2]);得到结果tempValue=252013,定义另一个浮点型变量anotherValue=tempValue/1000,得到anotherValue=252.013,因其大于150.000,所以其原始值等于252.013-N结果等于252.013-400=-147.987。
每个测点的所有数据进行二进制压缩并且拼接之后将得到一个长度是该测点所有数据个数三倍的字节数组可将该拼接数组命名为binaryDataArray。然后将再利用Zip压缩算法对其进行进一步压缩,经过二进制压缩和Zip压缩之后,测点的采集数据的存储大小达到原来的0.375,大大节省了存储空间,大大加快了可视化数据读取的时间。
本发明的保护范围并不限于上述的实施例,显然,本领域的技术人员可以对本发明进行各种改动和变形而不脱离本发明的范围和精神。倘若这些改动和变形属于本发明权利要求及其等同技术的范围内,则本发明的意图也包含这些改动和变形在内。

Claims (5)

1.一种分布式实时数据快速处理方法,其特征在于:建立并利用类环形的数据结构对实时数据进行存储。
2.根据权利要求1所述的方法,其特征在于:建立的类环形数据结构时可使用变量控制存储文件的大小,当写入数据超过存储文件大小时,写入的数据从该存储文件头部继续写入,覆盖原来的数据。
3.根据权利要求1所述的方法,其特征在于:采用指定压缩算法和Zip压缩算法共同对数据进行压缩,减少数据的存储量以提高数据读写速度。
4.根据权利要求1所述的方法,其特征在于:在内存中建立并利用索引查找数据,可以快速查找某个时间戳的数据,以便于快速计算任意一个时间戳的数据到其他任意一个时间戳数据的增量。
5.根据权利要求1所述的方法,其特征在于:在对数据进行读写时分别使用lock关键字锁定来保证当一个线程位于代码的临界区时,另一个线程不会进入该临界区。
CN201510005234.XA 2015-01-06 2015-01-06 一种分布式实时数据快速处理方法 Pending CN104572995A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201510005234.XA CN104572995A (zh) 2015-01-06 2015-01-06 一种分布式实时数据快速处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201510005234.XA CN104572995A (zh) 2015-01-06 2015-01-06 一种分布式实时数据快速处理方法

Publications (1)

Publication Number Publication Date
CN104572995A true CN104572995A (zh) 2015-04-29

Family

ID=53089057

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510005234.XA Pending CN104572995A (zh) 2015-01-06 2015-01-06 一种分布式实时数据快速处理方法

Country Status (1)

Country Link
CN (1) CN104572995A (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105069140A (zh) * 2015-08-19 2015-11-18 中国科学院自动化研究所 基于高阶用户偏好的推荐方法
CN107678856A (zh) * 2017-09-20 2018-02-09 苏宁云商集团股份有限公司 一种处理业务实体中增量信息的方法及装置
CN109460303A (zh) * 2018-09-11 2019-03-12 阿里巴巴集团控股有限公司 一种数据处理方法及装置、一种计算设备及存储介质
CN109740630A (zh) * 2018-12-06 2019-05-10 中科恒运股份有限公司 异常数据处理方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5438509A (en) * 1991-02-07 1995-08-01 Heffron; Donald J. Transaction processing in a distributed data processing system
CN101183387A (zh) * 2007-12-14 2008-05-21 沈阳东软软件股份有限公司 一种增量数据捕获方法和系统
US7548921B1 (en) * 2000-08-29 2009-06-16 The Directv Group, Inc. Method and apparatus for transmitting files
CN102760126A (zh) * 2011-04-26 2012-10-31 阿里巴巴集团控股有限公司 一种分布式系统中的数据同步方法和分布式系统

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5438509A (en) * 1991-02-07 1995-08-01 Heffron; Donald J. Transaction processing in a distributed data processing system
US7548921B1 (en) * 2000-08-29 2009-06-16 The Directv Group, Inc. Method and apparatus for transmitting files
CN101183387A (zh) * 2007-12-14 2008-05-21 沈阳东软软件股份有限公司 一种增量数据捕获方法和系统
CN102760126A (zh) * 2011-04-26 2012-10-31 阿里巴巴集团控股有限公司 一种分布式系统中的数据同步方法和分布式系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
LHZSTUDIO: "循环队列", 《360DOC个人图书馆,HTTP://WWW.360DOC.COM/CONTENT/12/0507/10/992979_209197788.SHTML》 *
江红等: "《C#程序设计教程》", 30 June 2014 *

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105069140A (zh) * 2015-08-19 2015-11-18 中国科学院自动化研究所 基于高阶用户偏好的推荐方法
CN105069140B (zh) * 2015-08-19 2018-07-27 中国科学院自动化研究所 基于高阶用户偏好的推荐方法
CN107678856A (zh) * 2017-09-20 2018-02-09 苏宁云商集团股份有限公司 一种处理业务实体中增量信息的方法及装置
CN109460303A (zh) * 2018-09-11 2019-03-12 阿里巴巴集团控股有限公司 一种数据处理方法及装置、一种计算设备及存储介质
CN109740630A (zh) * 2018-12-06 2019-05-10 中科恒运股份有限公司 异常数据处理方法及装置

Similar Documents

Publication Publication Date Title
US11003642B2 (en) Mutations in a column store
US8359316B2 (en) Database table look-up
Mattson et al. Demonstrating the BigDAWG Polystore System for Ocean Metagenomics Analysis.
CN102214176B (zh) 超大维表的切分与表连接方法
CN104572995A (zh) 一种分布式实时数据快速处理方法
CN101551818B (zh) 一种单向多映射文件匹配方法
CN104573022A (zh) 一种HBase的数据查询方法及装置
Lott et al. The FCC integrated surface hourly database: A new resource of global climate data
CN104346384A (zh) 一种小文件处理方法及装置
CN102375827A (zh) 一种对版本化的电网模型数据库进行快速加载的方法
CN104778182A (zh) 基于HBase的数据导入方法和系统
CN116627972B (zh) 一种覆盖指标的结构化数据离散存储系统
CN108563715A (zh) 一种分布式的趋同行为挖掘方法与系统
Nguyen et al. A multi-perspective approach to interpreting spatio-semantic changes of large 3D city models in CityGML using a graph database
CN101963993A (zh) 一种数据库单表记录快速查找的方法
CN110309166B (zh) 一种可溯源的地理高程数据补齐方法
CN106126644A (zh) 基于NoSQL数据库的录波文件存储方法
Navarro Carrión et al. Should eu land use and land cover data be managed with a Nosql document store?
Furqon et al. Graph Database Modelling on Malay Architecture IFC Data
Han et al. A distributed in-situ analysis method for large-scale scientific data
CN116610383B (zh) 一种部分加载目标文件的方法
CN116627974B (zh) 一种覆盖率存储系统
CN116627973B (zh) 一种数据定位系统
CN116954745B (zh) 一种目标文件部分加载系统
Zhang et al. HG-Bitmap join index: A hybrid GPU/CPU bitmap join index mechanism for OLAP

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20150429