实时数据统计方法和装置
技术领域
本发明涉及实时数据统计及数据库技术领域,特别是涉及一种实时数据统计方法和装置。
背景技术
在一些互联网应用领域,例如数据挖掘领域等,需要对实时产生的数据进行实时统计汇总,例如对实时数据进行加和运算等。现有技术中的实时数据统计系统,如图1所示,一般通过统计服务器接收一个或多个客户端产生的实时数据,从数据库存储系统中读取出对应的数据,将实时数据与从数据库存储系统中读取的对应数据进行统计汇总,进一步,将统计汇总得到的数据写入数据库存储系统中。对海量数据进行实时统计汇总需要从数据库中读取数据的次数是巨大的;而有一些数据存储系统的读性能相对较弱,成为了实时数据统计系统的瓶颈,严重影响实时数据统计系统的吞吐量和处理速度。
例如,采用LSM-Tree模式的数据库存储系统的读性能相对较弱,基于该数据库存储系统的实时数据统计系统会因此而降低整体性能。以下对数据库和LSM-Tree进行简单的介绍。
NoSQL(Not Only SQL)是一种非关系型数据库,其弱化了关系型数据库的设计范式和一致性要求,具备良好的扩展性能、并发性能和读写性能。基于NoSQL的代表性存储系统有BigTable、HBase、Cassandra等,这些NoSQL存储系统大多使用LSM-Tree模式进行数据存储。
其中,LSM-Tree(The Log-Structured Merge-Tree,日志结构合并树),是一种数据写入磁盘的方式,其主要特点是放弃部分读性能,将随机写转换为批量顺序写,减少磁盘寻道次数,提升写入速度;因此,采用 LSM-Tree模式进行数据存储的NoSQL的写性能优于读性能。
发明内容
基于此,有必要针对上述数据库存储系统的读性能影响实时数据统计系统的吞吐量和处理速度的问题,提供一种实时数据统计方法和装置。
一种实时数据统计方法,包括以下步骤:
接收实时数据的写入请求,所述实时数据所包含的记录中的数据项分为需要进行统计汇总的数据项和不需要进行统计汇总的数据项;
将所述实时数据写入数据库内存存储空间;
当所述数据库内存存储空间中的数据存储量达到阈值时,将所述数据库内存存储空间中的数据作为文件批量顺序写入数据库磁盘存储空间;
当所述数据库磁盘存储空间中的文件满足预设的文件合并条件时,合并待合并文件中键相同的记录得到新记录,在所述数据库磁盘存储空间中存储所述新记录形成的合并后的文件,其中,对同一键对应的记录进行合并的过程包括:
对该键对应的记录中需要进行统计汇总的数据项进行统计汇总,取该键对应的时间戳最新的记录中的不需要进行统计汇总的数据项,将汇总得到的数据项与时间戳最新的不需要进行统计汇总的数据项组合成该键对应的新记录。
一种实时数据统计装置,包括:
写入请求接收模块,用于接收实时数据的写入请求,所述实时数据所包含的记录中的数据项分为需要进行统计汇总的数据项和不需要进行统计汇总的数据项;
内存写入模块,用于将所述实时数据写入数据库内存存储空间;
磁盘写入模块,用于当所述数据库内存存储空间中的数据存储量达到阈值时,将所述数据库内存存储空间中的数据作为文件批量顺序写入数据库磁盘存储空间;
文件合并模块,用于当所述数据库磁盘存储空间中的文件满足预设的文件合并条件时,合并待合并文件中键相同的记录得到新记录,在所述数据库磁盘存储空间中存储所述新记录形成的合并后的文件,其中,对同一键对应的记录进行合并的过程包括:
对该键对应的记录中需要进行统计汇总的数据项进行统计汇总,取该键对应的时间戳最新的记录中的不需要进行统计汇总的数据项,将汇总得到的数据项与时间戳最新的不需要进行统计汇总的数据项组合成该键对应的新记录。
上述实时数据统计方法和装置,将实时数据写入数据库内存存储空间,当数据库内存存储空间中的数据存储量达到阈值时,才将其中的数据作为文件批量顺序写入数据库磁盘存储空间,以及当数据库磁盘存储空间中的文件满足预设的文件合并条件时,在文件合并过程中对数据进行统计汇总,从而不需要统计服务器每接收到实时数据都要从数据库中读取已有的对应数据,将实时数据与对应数据进行统计汇总后再写入数据库中,减少了从数据库中读取数据的次数,从而减少了数据库读性能对实时数据统计系统的吞吐量和处理速度的影响,尤其消除了读性能相对较弱的数据库的数据读取在实时数据统计过程中形成的瓶颈。
附图说明
图1为现有技术中统计汇总实时数据过程中各部分的交互示意图。
图2为一个实施例中运行本申请所述的实时数据统计方法的服务器的部分结构框图。
图3A为一个实施例中的实时数据统计方法的流程示意图。
图3B为图1所示的现有技术在按照本申请所述的实时数据统计方法进行改进后各部件的交互示意图。
图4为一个实施例中图3A中的步骤S304的流程示意图。
图5为一个实施例中数据查询过程的流程示意图。
图6为一个实施例中实时数据统计装置的结构示意图。
图7另一实施例中实时数据统计装置的结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本申请文件中的实时数据统计方法是对数据库存储系统的数据处理过程的限定。
图2为一个实施例中运行本申请所述的实时数据统计方法的服务器的部分结构框图。如图2所示,在一个实施例中,该服务器包括通过系统总线连接的处理器、存储介质、内存和网络接口。其中,网络接口用于网络通信;存储介质中存储有操作系统、数据库存储系统以及用于实现本申请所述的实时数据统计方法的软件指令,内存用于缓存数据;处理器协调各个部件之间的工作并执行这些指令以实现本申请所述的实时数据统计方法。图2中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的服务器的限定,具体的服务器可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
如图3A所示,一种实时数据统计方法,包括以下步骤:
步骤S302,接收实时数据的写入请求,实时数据所包含的记录中的数据项分为需要进行统计汇总的数据项和不需要进行统计汇总的数据项。
在一个实施例中,统计汇总的计算类型包括计算次数、求和、取最大值、取最小值和去除重复值中的一种或几种。
步骤S304,将实时数据写入数据库内存存储空间。
步骤S306,当数据库内存存储空间中的数据存储量达到阈值时,将数据库内存存储空间中的数据作为文件批量顺序写入数据库磁盘存储空间。
在一个实施例中,可在数据库内存存储空间满载时(即数据库内存存储空间已经没有可用存储空间时),将数据库内存存储空间中的数据作为文件批量顺序写入数据库磁盘存储空间。
步骤S308,当数据库磁盘存储空间中的文件满足预设的文件合并条件时,合并待合并文件中键相同的记录得到新记录,在数据库磁盘存储空间中存储新记录形成的合并后的文件,其中,对同一键对应的记录进行合并的过程包括:
对该键对应的记录中需要进行统计汇总的数据项进行统计汇总,取该键对应的时间戳最新的记录中的不需要进行统计汇总的数据项,将汇总得到的数据项与时间戳最新的不需要进行统计汇总的数据项组合成该键对应的新记录。
在一个实施例中,可按照预设的文件合并触发机制触发文件合并过程。例如,采用分层合并机制,预设多个层次,不同的层次对应不同的文件大小范围以及文件数量阈值,某一文件的文件大小属于某一个层次对应的文件大小范围,则该文件属于该层次上的文件,当某一层次上的文件数量达到该层次的文件数量阈值时,则合并该层次上的文件。例如,第一层的文件大小范围为0~5M(不包括0M,而包括5M),文件数量阈值为5;第二层的文件大小范围为5~25M(不包括5M,而包括25M),文件数量阈值为5;则当0~5M(不包括0M,而包括5M)的文件的数量达到5个时,合并该5个文件,而当5~25M(不包括5M,而包括25M)的文件的数量达到5个时,合并该5个文件。
在一个实施例中,可将合并后的文件按照键的大小进行排序。在数据库磁盘存储空间中存储合并后的文件后,可删除原始的待合并文件。
以下举一个具体的示例说明在文件合并过程中对同一键对应的记录进行合并的过程。如下表1所示,同一键(key)0001对应3条记录,每条记录包括除键外的分别表示最新签到人员、签到人员和签到人次的3个数据项。其中表示签到人员的数据项为需要进行去除重复值运算的数据项,表示签到人次的数据项为需要进行加和运算的数据项,时间戳的前8位表示年月日、后6位表示时分秒。
表1
键(key) |
最新签到人员 |
签到人员 |
签到人次 |
时间戳 |
0001 |
A |
A,B |
2 |
20150119155501 |
0001 |
B |
B,D |
2 |
20150119155602 |
0001 |
C |
C,E |
2 |
20150119155703 |
可将0001对应的三条记录中表示签到人员的数据项所包含的元素进行去除重复值运算,得到数据项( A,B ,D, C,E ),并将0001对应的三条记录中表示签到人次的数据项进行加和运算,求得和为6,以及获取最新的时间戳20150119155703对应的记录中表示最新签到人员的数据项C,并将数据项C、数据项( A,B ,D, C,E )和数据项6分别作为表示最新签到人员、签到人员和签到人次的数据项组合成0001对应的新记录:{0001,C,( A,B ,D,C,E ),6},且设置该记录的时间戳为20150119155703。
上述实时数据统计方法,将实时数据写入数据库内存存储空间,当数据库内存存储空间中的数据存储量达到阈值时,才将其中的数据作为文件批量顺序写入数据库磁盘存储空间,以及当数据库磁盘存储空间中的文件满足预设的文件合并条件时,在文件合并过程中对数据进行统计汇总,从而不需要统计服务器每接收到实时数据都要从数据库中读取已有的对应数据,将实时数据与对应数据进行统计汇总后再写入数据库中,减少了从数据库中读取数据的次数,从而减少了数据库读性能对实时数据统计系统的吞吐量和处理速度的影响,尤其消除了读性能相对较弱的数据库的数据读取在实时数据统计过程中形成的瓶颈。图3B为图1所示的现有技术在按照本申请所述的实时数据统计方法进行改进后各部件的交互示意图。如图3B所示,改进后,统计服务器接收一个或多个客户端产生的实时数据,向数据库存储系统发出实时数据的写入请求,数据库存储系统将实时数据缓存到数据库内存存储空间;当数据库内存存储空间中的数据存储量达到阈值时数据库存储系统将数据库内存存储空间中的数据批量写入数据库磁盘存储空间。数据库存储系统在文件合并过程中对数据进行统计汇总。相对于现有技术,本申请的实时数据统计方法减少了从数据库中读取数据的次数,从而减少了数据库读性能对实时数据统计系统的吞吐量和处理速度的影响,尤其消除了读性能相对较弱的数据库的数据读取在实时数据统计过程中形成的瓶颈。
在一个实施例中,步骤S304可将实时数据直接添加到数据库内存存储空间,而不基于数据库内存存储空间中的已有数据对实时数据进行统计汇总,也不将实时数据覆盖数据库内存存储空间的已有数据。
在另一个实施例中,步骤S304可以基于数据库内存存储空间中的已有数据对实时数据进行统计汇总。本实施例中,如图4所示,步骤S304包括以下步骤:
步骤S402,合并实时数据与数据库内存存储空间中键相同的记录,得到新记录,其中,对同一键对应的记录进行合并的过程包括:
对该键对应的记录中需要进行统计汇总的数据项进行统计汇总,取该键对应的时间戳最新的记录中的不需要进行统计汇总的数据项,将汇总得到的数据项与时间戳最新的不需要进行统计汇总的数据项组合成该键对应的新记录。
步骤S404,将数据库内存存储空间中与新记录的键相同的记录替换为新记录。
本实施例中,接收到实时数据后,基于数据库内存存储空间中的已有数据对实时数据进行统计汇总,进一步的,将统计汇总得到的新记录覆盖对应的旧记录,从而在数据库内存存储空间中一个键只对应一条记录,可减少数据库内存存储空间的占用。由于内存数据的读写速度都非常快,该过程虽然会增加数据库内存存储空间的读写次数,但几乎不会影响整体的处理性能。
在一个实施例中,上述实时数据统计方法还包括数据查询过程,如图5所示,该数据查询过程包括以下步骤:
步骤S502,接收数据查询请求,数据查询请求中包含查询键。
查询键为本申请对数据查询请求中包含的键的称呼,但该称呼不应作为对本申请的限制。
步骤S504,从数据库内存存储空间和数据库磁盘存储空间中读取出查询键对应的记录。
步骤S506,对查询键对应的记录中需要进行统计汇总的数据项进行统计汇总,取查询键对应的时间戳最新的记录中的不需要进行统计汇总的数据项,将汇总得到的数据项与时间戳最新的不需要进行统计汇总的数据项组合成查询键对应的新记录。
步骤S508,输出该新记录为查询结果。
由于本申请在当数据库内存存储空间中的数据存储量达到阈值时,才将数据库内存存储空间中的数据作为文件批量顺序写入数据库磁盘存储空间,且在文件合并过程中才对数据进行统计汇总,因此,针对一个数据表写入的数据可能存储在数据库磁盘存储空间的多个文件中,而且部分数据还有可能缓存在数据库内存存储空间中没有写入到数据库磁盘存储空间中,从而同一键可能对应分布在数据库内存存储空间和数据库磁盘存储空间中的多条记录。本实施例中,从数据库内存存储空间和数据库磁盘存储空间中读取出查询键对应的记录,对这些记录进行相应的数据项统计汇总处理以及获取其中时间戳最新的对应数据项得到新记录,输出该新记录为查询结果,可确保查询到查询键对应的最新的准确数据。
在一个实施例中,在将实时数据写入数据库内存存储空间之前,若实时数据中包含的数据项为需要进行去除重复值的数据项,则将该数据项转换为集合对象。在对多个数据项进行去除重复值的过程中,例如在上述的步骤S308、S402和S506中对多个数据项进行去除重复值的过程中,合并该多个数据项对应的集合对象得到新的集合对象,将该新的集合对象作为该多个数据项去除重复值后得到的数据项,例如,在上述的步骤S308、S402和S506中以新的集合对象作为该多个数据项去除重复值后得到的数据项形成新记录。
集合对象即为set对象,set对象具有只保留唯一元素的特性,在往set对象中添加新元素时,set对象可将重复的元素自动去除。
将数据项转换为集合对象包括以下步骤:以数据项作为集合所包含的元素生成集合对象,并在实时数据中以该集合对象替换该数据项。
在一个实施例中,合并该多个数据项对应的集合对象得到新的集合对象包括以下步骤:将该多个数据项对应的集合对象所包含的元素全部添加到其中一个数据项对应的集合对象中,以该数据项对应的集合对象作为新的集合对象。例如,需要进行去除重复值处理的数据项对应的集合对象包括set1、set2和set3,可将set1和set2所包含的元素添加到set3中,该set3即成为新的集合对象。
在另一个实施例中,合并该多个数据项对应的集合对象得到新的集合对象包括以下步骤:分配一个新的集合对象,将该多个数据项对应的集合对象所包含的元素全部添加到新分配的集合对象中。
由于内存存储空间和磁盘存储空间中的数据都是以二进制形式存在的,因此,在将数据写入存储空间之前都需要将数据转换为二进制序列,有些处理计算可直接以数据的二进制形式进行计算,例如加运算等,而有些处理计算则不行,例如set对象的合并等。
因此,在上述实施例中,在将实时数据写入数据库内存存储空间之前,若实时数据中包含的数据项为需要进行去除重复值的数据项,则将该数据项转换为集合对象,在实时数据中将该数据项替换为该集合对象,然后再将实时数据转换为二进制序列写入数据库内存存储空间。在对多个数据项进行去除重复值的过程中,由于合并set对象不能直接以二进制形式进行计算,则需先将数据项的集合对象的二进制序列还原成set对象,进一步合并该多个数据项的集合对象得到新的集合对象,进一步将新的集合对象转换为二进制序列,以该二进制序列作为该多个数据项去除重复值后得到的数据项形成新记录。
本实施例中,步骤S508输入新记录为查询结果的过程中,需要将以二进制序列形式表示的新记录还原成具有原始数据类型的数据项组成的新记录,例如,记录中包含的两个数据项中其中一项为字符串类型、另一项为set对象类型,则需要将以二进制序列形式表示的新记录还原成由字符串类型的数据项和set对象类型的数据项组成的新记录。并且,进一步的,需要将新记录中的set对象替换该set对象所包含的元素,然后才能将该记录作为查询结果输出。因为,将数据项转换为set对象是为了方便去除重复值这一特殊处理过程,所以在输出查询结果前需要将set对象还原成其所对应的数据项。
上述实施例中,将数据项转换成set对象,并且通过合并多个数据项的set对象来完成该多个数据项的去除重复值的处理过程,由于合并set对象是简单易行的操作,因此可提高多个数据项的去除重复值的处理过程的处理速度。
在一个实施例中,上述的数据库存储系统为NoSQL存储系统,相应的,上述数据库内存存储空间为NoSQL内存存储空间,数据库磁盘存储空间为NoSQL磁盘存储空间,该NoSQL存储系统采用LSM-Tree模式进行数据存储。本实施例中实时数据统计方法是对采用LSM-Tree模式的NoSQL存储系统的数据处理过程的限定。
由于采用LSM-Tree模式的NoSQL存储系统每次批量顺序写都生成一个有序文件,文件数目增多会严重影响读性能,因此,采用LSM-Tree模式的NoSQL存储系统会将针对同一数据表写入的小文件合并成大文件,控制文件数量和数据规模,以提升系统读性能,该过程可被称为文件合并(Compaction)过程,该文件合并过程为采用LSM-Tree模式的NoSQL存储系统所固有的重要环节。现有的采用LSM-Tree模式的NoSQL存储系统文件合并过程会进行以下操作:清理已删除数据、将相同key的新记录覆盖旧记录、将记录按照key进行排序。若对于同一数据表的数据已全部写入完成,可将该数据表的所有文件进行全局Compaction成一个文件,从而最大可能的优化读性能。
本实施例中的实时数据统计方法,统计服务器不需要从NoSQL存储系统中读取已有的对应数据,将实时数据与对应数据进行统计汇总后再写入NoSQL存储系统中,而是对采用LSM-Tree模式的NoSQL存储系统的文件合并过程进行了改进,将对实时数据的统计汇总逻辑融入到固有的文件合并过程中,从而不需要额外的计算环节和计算资源,而且消除了采用LSM-Tree模式的NoSQL存储系统的相对较弱的读性能在实时数据统计过程中形成的瓶颈。
如图6所示,一种实时数据统计装置,包括写入请求接收模块602、内存写入模块604、磁盘写入模块606和文件合并模块608,其中:
写入请求接收模块602用于接收实时数据的写入请求,实时数据所包含的记录中的数据项分为需要进行统计汇总的数据项和不需要进行统计汇总的数据项。
在一个实施例中,统计汇总的计算类型包括计算次数、求和、取最大值、取最小值和去除重复值中的一种或几种。
内存写入模块604用于将实时数据写入数据库内存存储空间。
磁盘写入模块606用于当数据库内存存储空间中的数据存储量达到阈值时,将数据库内存存储空间中的数据作为文件批量顺序写入数据库磁盘存储空间。
在一个实施例中,磁盘写入模块606可在数据库内存存储空间满载时(即数据库内存存储空间已经没有可用存储空间时),将数据库内存存储空间中的数据作为文件批量顺序写入数据库磁盘存储空间。
文件合并模块608用于当数据库磁盘存储空间中的文件满足预设的文件合并条件时,合并待合并文件中键相同的记录得到新记录,在数据库磁盘存储空间中存储新记录形成的合并后的文件,其中,对同一键对应的记录进行合并的过程包括:
对该键对应的记录中需要进行统计汇总的数据项进行统计汇总,取该键对应的时间戳最新的记录中的不需要进行统计汇总的数据项,将汇总得到的数据项与时间戳最新的不需要进行统计汇总的数据项组合成该键对应的新记录。
在一个实施例中,文件合并模块608可采用分层合并机制合并文件得到合并后的文件。具体的,文件合并模块608可预设多个层次,不同的层次对应不同的文件大小范围以及文件数量阈值,某一文件的文件大小属于某一个层次对应的文件大小范围,则该文件属于该层次上的文件,当某一层次上的文件数量达到该层次的文件数量阈值时,则合并该层次上的文件。例如,第一层的文件大小范围为0~5M(不包括0M,而包括5M),文件数量阈值为5;第二层的文件大小范围为5~25M(不包括5M,而包括25M),文件数量阈值为5;则当0~5M(不包括0M,而包括5M)的文件的数量达到5个时,合并该5个文件,而当5~25M(不包括5M,而包括25M)的文件的数量达到5个时,合并该5个文件。
在一个实施例中,文件合并模块608还用于将合并后的文件按照键的大小进行排序。在数据库磁盘存储空间中存储合并后的文件后,可删除原始的待合并文件。
上述实时数据统计装置,将实时数据写入数据库内存存储空间,当数据库内存存储空间中的数据存储量达到阈值时,才将其中的数据作为文件批量顺序写入数据库磁盘存储空间,以及当数据库磁盘存储空间中的文件满足预设的文件合并条件时,在文件合并过程中对数据进行统计汇总,从而不需要统计服务器每接收到实时数据都要从数据库中读取已有的对应数据,将实时数据与对应数据进行统计汇总后再写入数据库中,减少了从数据库中读取数据的次数,从而减少了数据库读性能对实时数据统计系统的吞吐量和处理速度的影响,尤其消除了读性能相对较弱的数据库的数据读取在实时数据统计过程中形成的瓶颈。
在一个实施例中,内存写入模块604可将实时数据直接添加到数据库内存存储空间,而基于数据库内存存储空间中的已有数据对实时数据进行统计汇总,也不将实时数据覆盖数据库内存存储空间的已有数据。
在另一个实施例中,内存写入模块604可以基于数据库内存存储空间中的已有数据对实时数据进行统计汇总。本实施例中,内存写入模块604用于合并实时数据与数据库内存存储空间中键相同的记录,得到新记录,其中,对同一键对应的记录进行合并的过程包括:
对该键对应的记录中需要进行统计汇总的数据项进行统计汇总,取该键对应的时间戳最新的记录中的不需要进行统计汇总的数据项,将汇总得到的数据项与时间戳最新的不需要进行统计汇总的数据项组合成该键对应的新记录。
进一步的,内存写入模块604还用于将数据库内存存储空间中与新记录的键相同的记录替换为新记录。
本实施例中,接收到实时数据后,基于数据库内存存储空间中的已有数据对实时数据进行统计汇总,进一步的,将统计汇总得到的新记录覆盖对应的旧记录,从而在数据库内存存储空间中一个键只对应一条记录,可减少数据库内存存储空间的占用。由于内存数据的读写速度都非常快,该过程虽然会增加数据库内存存储空间的读写次数,但几乎不会影响整体的处理性能。
如图7所示,在一个实施例中,上述实时数据统计装置还包括查询请求接收模块702、查询模块704和结果输出模块706,其中:
查询请求接收模块702用于接收数据查询请求,数据查询请求中包含查询键。
查询模块704用于从数据库内存存储空间和数据库磁盘存储空间中读取出查询键对应的记录,对查询键对应的记录中需要进行统计汇总的数据项进行统计汇总,取查询键对应的时间戳最新的记录中的不需要进行统计汇总的数据项,将汇总得到的数据项与时间戳最新的不需要进行统计汇总的数据项组合成查询键对应的新记录。
结果输出模块706用于输出该新记录为查询结果。
由于本申请的实时数据统计装置在当数据库内存存储空间中的数据存储量达到阈值时,才将数据库内存存储空间中的数据作为文件批量顺序写入数据库磁盘存储空间,且在文件合并过程中才对数据进行统计汇总,因此,针对一个数据表写入的数据可能存储在数据库磁盘存储空间的多个文件中,而且部分数据还有可能缓存在数据库内存存储空间中没有写入到磁盘存储空间中,从而同一键可能对应分布在数据库内存存储空间和数据库磁盘存储空间中的多条记录。本实施例中,从数据库内存存储空间和数据库磁盘存储空间中读取出查询键对应的记录,对这些记录进行相应的数据项统计汇总处理以及获取其中时间戳最新的对应数据项得到新记录,输出该新记录为查询结果,可确保查询到查询键对应的最新的准确数据。
在一个实施例中,内存写入模块604在将实时数据写入数据库内存存储空间之前,若实时数据中包含的数据项为需要进行去除重复值的数据项,则将该数据项转换为集合对象。上述实时数据统计装置在对多个数据项进行去除重复值的过程中,例如在上述的文件合并模块608、内存写入模块604和查询模块704对多个数据项进行去除重复值的过程中,合并该多个数据项对应的集合对象得到新的集合对象,将该新的集合对象作为该多个数据项去除重复值后得到的数据项,例如,文件合并模块608、内存写入模块604和查询模块704以新的集合对象作为该多个数据项去除重复值后得到的数据项形成新记录。
集合对象即为set对象,set对象具有只保留唯一元素的特性,在往set对象中添加新元素时,set对象可将重复的元素自动去除。
内存写入模块604将数据项转换为集合对象的过程包括:以数据项作为集合所包含的元素生成集合对象,并在实时数据中以该集合对象替换该数据项。
在一个实施例中,文件合并模块608、内存写入模块604和查询模块704合并该多个数据项对应的集合对象得到新的集合对象的过程包括:将该多个数据项对应的集合对象所包含的元素全部添加到其中一个数据项对应的集合对象中,以该数据项对应的集合对象作为新的集合对象。例如,需要进行去除重复值处理的数据项对应的集合对象包括set1、set2和set3,可将set1和set2所包含的元素添加到set3中,该set3即成为新的集合对象。
在另一个实施例中,文件合并模块608、内存写入模块604和查询模块704合并该多个数据项对应的集合对象得到新的集合对象的过程包括:分配一个新的集合对象,将该多个数据项对应的集合对象所包含的元素全部添加到新分配的集合对象中。
由于内存存储空间和磁盘存储空间中的数据都是以二进制形式存在的,因此,在将数据写入存储空间之前都需要将数据转换为二进制序列,有些处理计算可直接以数据的二进制形式进行计算,例如加运算等,而有些处理计算则不行,例如set对象的合并等。
因此,基于上述实施例,内存写入模块604在将实时数据写入数据库内存存储空间之前,若实时数据中包含的数据项为需要进行去除重复值的数据项,则将该数据项转换为集合对象,在实时数据中将该数据项替换为该集合对象,然后再将实时数据转换为二进制序列写入数据库内存存储空间。文件合并模块608、内存写入模块604和查询模块704在对多个数据项进行去除重复值的过程中,由于合并set对象不能直接以二进制形式进行计算,因此先将数据项的集合对象的二进制序列还原成set对象,进一步合并该多个数据项的集合对象得到新的集合对象,并进一步将新的集合对象转换为二进制序列,以该二进制序列作为该多个数据项去除重复值后得到的数据项形成新记录。
本实施例中,查询模块704输入新记录为查询结果的过程中,将以二进制序列形式表示的新记录还原成具有原始数据类型的数据项组成的新记录,例如,记录中包含的两个数据项中其中一项为字符串类型、另一项为set对象类型,则将以二进制序列形式表示的新记录还原成由字符串类型的数据项和set对象类型的数据项组成的新记录。并且,进一步的,将新记录中的set对象替换该set对象所包含的元素,然后才能将该记录作为查询结果输出。因为,将数据项转换为set对象是为了方便去除重复值这一特殊处理过程,所以在输出查询结果前需要将set对象还原成其所对应的数据项。
上述实施例中,将数据项转换成set对象,并且通过合并多个数据项的set对象来完成该多个数据项的去除重复值的处理过程,由于合并set对象是简单易行的操作,因此可提高多个数据项的去除重复值的处理过程的处理速度。
在一个实施例中,上述的数据库采用日志结构合并树(LSM-Tree)模式的NoSQL数据库。
由于采用LSM-Tree模式的NoSQL存储系统每次批量顺序写都生成一个有序文件,文件数目增多会严重影响读性能,因此,采用LSM-Tree模式的NoSQL存储系统会将针对同一数据表写入的小文件合并成大文件,控制文件数量和数据规模,以提升系统读性能,该过程可被称为文件合并(Compaction)过程,该文件合并过程为采用LSM-Tree模式的NoSQL存储系统所固有的重要环节。现有的采用LSM-Tree模式的NoSQL存储系统文件合并过程会进行以下操作:清理已删除数据、将相同key的新记录覆盖旧记录、将记录按照key进行排序。若对于同一数据表的数据已全部写入完成,可将该数据表的所有文件进行全局Compaction成一个文件,从而最大可能的优化读性能。
本实施例中的实时数据统计装置,统计服务器不需要从NoSQL存储系统中读取已有的对应数据,将实时数据与对应数据进行统计汇总后再写入NoSQL存储系统中,而是对采用LSM-Tree模式的NoSQL存储系统的文件合并过程进行了改进,将对实时数据的统计汇总逻辑融入到固有的文件合并过程中,从而不需要额外的计算环节和计算资源,而且消除了采用LSM-Tree模式的NoSQL存储系统的相对较弱的读性能在实时数据统计过程中形成的瓶颈。以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。