CN106326305A - 一种数据文件的存储和查询方法及设备 - Google Patents
一种数据文件的存储和查询方法及设备 Download PDFInfo
- Publication number
- CN106326305A CN106326305A CN201510386678.2A CN201510386678A CN106326305A CN 106326305 A CN106326305 A CN 106326305A CN 201510386678 A CN201510386678 A CN 201510386678A CN 106326305 A CN106326305 A CN 106326305A
- Authority
- CN
- China
- Prior art keywords
- data
- metamessage
- bunch
- data file
- tables
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/221—Column-oriented storage; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Abstract
本申请的目的是提供一种数据文件的存储和查询方法及设备,存储时,创建数据文件的元信息,元信息包含数据文件在数据表中的存储位置;将数据文件与该数据文件对应的元信息分别写入数据表中第一列簇和第二列簇的同一行中;根据第二列簇中的元信息建立指向数据文件在数据表中的存储位置的索引;查询时,获取查询条件,并在第二列簇中查找符合查询条件的元信息;根据索引,确定符合查询条件的元信息所对应的数据文件在数据表的第一列簇中的存储位置;由第一列簇中的存储位置获取数据文件。与现有技术相比,存储时数据一致性好,数据库的复杂度和维护难度较低,查询时处理的数据量较小,查询速度快。
Description
技术领域
本申请涉及计算机领域,尤其涉及一种数据文件的存储和查询技术。
背景技术
现有的分布式存储方案中,对于较大的数据文件进行存储时,其存储及维护的复杂度较高。以Hbase(Hadoop Database,Hadoop数据库)为例,现有的存储方案中,一般将数据文件本身保存于独立的存储区域中,同时在Hbase的数据表(table)中将这些数据文件的地址信息作为某一单元(cell)的值(Value)进行保存。用户在查询这些数据文件时,首先在数据表中通过行键(Rowkey)、列(Column)以及时间戳(Timestamp)来找到特定的单元,然后根据单元内的值表示的地址信息由存储区域中找到数据文件。由于在存储数据时,需要分别向存储区域内写入数据文件以及向数据表中写入数据文件在存储区域中的地址信息,使得数据库的复杂性较高。由于两者的写入过程会存在一定的先后顺序,若在写入过程中,发生失电等状况,可能导致数据文件已经写入存储区域而数据表中还未写入地址信息,因此数据的一致性无法得到保证。
申请内容
本申请的一个目的是提供一种数据文件的存储和查询方法及设备,以解决现有技术中数据一致性无法保证的问题。
为实现上述目的,本申请提供了一种数据文件的存储方法,所述方法包括:
创建数据文件的元信息,所述元信息包含所述数据文件在数据表中的存储位置;
将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中;
根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引。
进一步地,将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之前,包括:
对所述元信息进行排序;
将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中,包括:
根据所述排序将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中。
进一步地,所述元信息包括所述数据文件在所述数据表中的行键、列和时间戳。
进一步地,包括:依次根据所述元信息的行键、列和时间戳对所述元信息进行排序。
进一步地,根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引,包括:
根据所述元信息建立指向所述数据文件在所述数据表中的存储位置的倒排索引。
进一步地,所述数据文件包括多个子文件;
创建数据文件的元信息,包括:
创建数据文件的各个子文件对应的元信息;
将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中,包括:
将包含所述子文件的所述数据文件写入所述数据表的第一列簇中,并将所述子文件对应的元信息写入所述数据表的第二列簇的同一行中。
进一步地,将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之后,还包括:
当所述第二列簇的数据量达到设定阈值后,将所述数据表分裂为多个数据域,分别保存于多个服务器中。
本申请还提供了一种数据文件的查询方法,用于对采用前述存储方法存储的数据文件进行查询,其中,所述方法包括:
获取查询条件,并在所述第二列簇中查找符合所述查询条件的元信息;
根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置;
由所述第一列簇中的存储位置获取所述数据文件。
进一步地,当所述元信息包括所述数据文件中的行键、列和时间戳,所述查询条件至少包括所述元信息中行键的全部或者部分信息。
进一步地,当所述数据文件与该数据文件对应的元信息为分别根据元信息的排序写入所述数据表中时,
在所述第二列簇中查找符合所述查询条件的元信息,包括:
根据所述排序在所述第二列簇中查找符合所述查询条件的元信息。
进一步地,当所述元信息依次根据所述元信息的行键、列和时间戳进行排序时,
根据所述排序在所述第二列簇中查找符合所述查询条件的元信息,包括:
根据所述元信息的行键、列和时间戳的依次排序在所述第二列簇中查找符合所述查询条件的元信息。
进一步地,当所述查询条件至少包含所述元信息中行键的起始部分的信息时,
根据所述排序在所述第二列簇中查找符合所述查询条件的元信息,包括:
根据所述排序以及所述元信息中行键的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查询条件的元信息。
进一步地,当所述索引为倒排索引时,
根据所述索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置,包括:
根据所述倒排索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置。
进一步地,当所述数据表包含多个保存于不同服务器中的数据域时,
根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置,包括:
根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表中的数据域的第一列簇中的存储位置。
进一步地,当所述数据文件包括多个子文件,所述第一列簇中保存有包含所述子文件的所述数据文件,所述第二列簇的同一行中保存有所述子文件的元信息时,
根据所述索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置,包括:
根据所述索引确定所述符合所述查询条件的元信息所对应的子文件在所述数据表的第一列簇中的存储位置;
由所述第一列簇中的存储位置获取所述数据文件,包括:
由所述第一列簇中的存储位置获取所述数据文件的子文件。
根据本申请的另一方面,还提供了一种数据文件的存储设备,其中,该设备包括:
第一装置,用于创建数据文件的元信息,所述元信息包含所述数据文件在数据表中的存储位置;
第二装置,用于将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中;
第三装置,用于根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引。
进一步地,该设备还包括:
第四装置,用于在将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之前,对所述元信息进行排序;
所述第二装置,用于根据所述排序将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中。
进一步地,所述元信息包括所述数据文件在所述数据表中的行键、列和时间戳。
进一步地,所述第一装置,用于依次根据所述元信息的行键、列和时间戳对所述元信息进行排序。
进一步地,所述第三装置,用于根据所述元信息建立指向所述数据文件在所述数据表中的存储位置的倒排索引。
进一步地,所述数据文件包括多个子文件;
所述第一装置,用于创建数据文件的各个子文件对应的元信息;
所述第二装置,用于将包含所述子文件的所述数据文件写入所述数据表的第一列簇中,并将所述子文件对应的元信息写入所述数据表的第二列簇的同一行中。
进一步地,该设备还包括:
第五装置,用于在将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之后,当所述第二列簇的数据量达到设定阈值后,将所述数据表分裂为多个数据域,分别保存于多个服务器中。
本申请还提供了一种数据文件的查询设备,用于对采用前述存储设备存储的数据文件进行查询,其中,包括:
第六装置,用于获取查询条件,并在所述第二列簇中查找符合所述查询条件的元信息;
第七装置,用于根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置;
第八装置,用于由所述第一列簇中的存储位置获取所述数据文件。
进一步地,当所述元信息包括所述数据文件中的行键、列和时间戳,所述第六装置获取的查询条件至少包括所述元信息中行键的全部或者部分信息。
进一步地,当所述数据文件与该数据文件对应的元信息为分别根据元信息的排序写入所述数据表中时,
所述第六装置,用于获取查询条件,根据所述排序在所述第二列簇中查找符合所述查询条件的元信息。
进一步地,当所述元信息依次根据所述元信息的行键、列和时间戳进行排序时,
所述第六装置,用于获取查询条件,根据所述元信息的行键、列和时间戳的依次排序在所述第二列簇中查找符合所述查询条件的元信息。
进一步地,当所述查询条件至少包含所述元信息中行键的起始部分的信息时,
所述第六装置,用于获取所述查询条件,根据所述排序以及所述元信息中行键的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查询条件的元信息。
进一步地,当所述索引为倒排索引时,
所述第七装置,用于根据所述倒排索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置。
进一步地,当所述数据表包含多个保存于不同服务器中的数据域时,
所述第七装置,用于根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表中的数据域的第一列簇中的存储位置。
进一步地,当所述数据文件包括多个子文件,所述第一列簇中保存有包含所述子文件的所述数据文件,所述第二列簇的同一行中保存有所述子文件的元信息时,
所述第七装置,用于根据所述索引确定所述符合所述查询条件的元信息所对应的子文件在所述数据表的第一列簇中的存储位置;
所述第八装置,用于由所述第一列簇中的存储位置获取所述数据文件的子文件。
与现有技术相比,由于在存储数据文件时会创建包含所述数据文件在数据表中的存储位置的元信息,并且在写入数据表时将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中,由于在列式数据库中对于数据表中同一行的操作为原子操作,无论对行进行访问的事务有多少列,对该行的数据的更新都会是原子操作,即全部成功或者全部失败,不会存在部分成功的情况,因此不会存在数据文件写入成功而元信息写入不成功的情况,从而保证了数据的一致性。并且由于数据文件以及该数据文件对应的元信息在一张数据表中,后续进行维护时仅需要对一张数据表进行相关操作即可,降低了数据库的复杂度和维护难度。
在查询时,由于数据文件的大小往往会远大于其对应的元信息,若在第一列簇中查询需要的数据文件,往往需要处理较大的数据量。本实施例提供的查询方法中,首先根据查询条件查询数据文件对应的元信息,在查找到元信息后,在根据预先建立的索引确定数据文件在数据表中的存储位置,然后在由保存数据文件的第一列簇中的对应存储位置获取数据文件,由于元信息数据量相对较小,因此处理的速度相对于直接查询数据文件更加快速。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1为本申请实施例提供的数据文件的存储方法的流程图;
图2为本申请实施例提供的数据文件的查询方法的流程图;
图3为本申请实施例提供的第一种数据文件的存储设备的结构示意图;
图4为本申请实施例提供的第二种数据文件的存储设备的结构示意图;
图5为本申请实施例提供的第三种数据文件的存储设备的结构示意图;
图6为本申请实施例提供的一种数据文件的查询设备的结构示意图;
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
下面结合附图对本申请作进一步详细描述。
在本申请一个典型的配置中,终端、服务网络的设备和可信方均包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
图1示出了本申请实施例提供的一种数据文件的存储方法的流程图,该方法具体包括以下步骤:
步骤S101,创建数据文件的元信息,所述元信息包含所述数据文件在数据表中的存储位置;
步骤S102,将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中;
步骤S103,根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引。
在此,本领域技术人员应能理解,所述第一列簇及第二列簇分别用来指代用于写入所述数据文件与该数据文件对应的元信息的两个列簇(Column Family),所述第一、第二仅用于区分两个列簇,并不表示对两个列簇在数据表中位置的限定。
由于在存储数据文件时会创建包含所述数据文件在数据表中的存储位置的元信息,并且在写入数据表时将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中,由于在列式数据库中对于数据表中同一行的操作为原子操作,无论对行进行访问的事务有多少列,对该行的数据的更新都会是原子操作,即全部成功或者全部失败,不会存在部分成功的情况,因此不会存在数据文件写入成功而元信息写入不成功的情况,从而保证了数据的一致性。并且由于数据文件以及该数据文件对应的元信息在一张数据表中,后续进行维护时仅需要对一张数据表进行相关操作即可,降低了数据库的复杂度和维护难度。
其中,所述元信息至少包括所述数据文件在所述数据表中的行键、列和时间戳,通过所述行键、列和时间戳可以确定所述数据文件在数据表中的存储位置,由此可以根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引,为便于查询这些存储的数据文件。以Hbase为例,假设需要保存的数据文件为交通卡口摄像头拍摄的经过车辆的图片数据文件,其行键的形式可以应用场景的不同需求进行自定义,例如为了便于查询,可以将本例中的行键设置为卡口编号+拍摄时间+车牌,例如ABC123201506031455FG5709,其中ABC123表示卡口编号,201506031455表示拍摄时间是2015年6月3日14点55分,FG5709为车牌,在获取到该数据文件时即可以得到该数据文件的行键。该数据文件的列和时间戳则会在向数据表写入时获得,其中,列表示该数据文件在第一列簇中的所在列,时间戳表示该数据文件写入数据表的时间。获取到上述三种信息后,即可以创建数据文件的元信息。
除上述三种信息外,所述元信息还可以包括所述数据文件的文件大小(size),通过将所述文件大小的信息作为元信息的一部分,可以进一步地方便后续的数据查询,使得根据元信息建立的索引更加准确,例如根据文件大小对需要查找的数据文件进行过滤等。在此,本领域技术人员应能理解上述关于行键形式和元信息的内容描述仅为举例,其他现有的或今后可能出现行键形式和元信息的内容如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,在步骤S102,将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之前,还包括:对所述元信息进行排序。此时,步骤S102具体包括:根据所述排序将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中。通过对写入第二列簇的元信息进行排序,在后续查询时可以根据该排序进行快速查找,提高查询的效率。
进一步地,对所述元信息进行排序,具体包括:依次根据所述元信息的行键、列和时间戳对所述元信息进行排序。即先根据行键来排序,在行键相同时,按照列来排序,在行键和列都相同时,按照时间戳来排序。例如,三个数据文件(D1、D2和D3)及其对应的元信息(M1、M2、M3)分别如表1所示:
表1
若按照元信息M1、M2、M3中行键、列和时间戳的字典序对所述元信息进行排序,其排序的顺序为M3、M1、M2。通过依次根据行键、列和时间戳对所述元信息进行排序,可以方便查询时通过一定的查询算法(如二分查找)对来查找特定的元信息,以减少查询时数据读写的次数,加快查询速度。此外,由于数据文件对应的元信息中的行键、列和时间戳不可能完全一致,因此无论所述元信息是否还包含所述数据文件的文件大小,均无需以文件大小作为排序的依据。
优选地,在步骤S103中,建立的索引为倒排索引,即根据所述元信息建立指向所述数据文件在所述数据表中的存储位置的倒排索引。由此,通过元信息的内容,可以快速地定位到所述数据文件在所述数据表中的存储位置,便于数据文件的查询。
在某些应用场景下,所述数据文件包括多个子文件,所述步骤101中,创建数据文件的元信息,具体包括:创建数据文件的各个子文件对应的元信息。所述步骤102中,将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中,具体包括:将包含所述子文件的所述数据文件写入所述数据表的第一列簇中,并将所述子文件对应的元信息写入所述数据表的第二列簇的同一行中。例如,需要存储的数据文件包含的子文件为同一网页上多张相关的图片,创建元信息时分别创建这些图片对应的元信息,并将所述子文件对应的元信息写入所述数据表的第二列簇的同一行中。在实际的数据写入过程中,图片数据首先会写入内存中,当内存满或达到其它触发条件触发后将内存中的图片数据聚合为一个文件进行保存。以Hbase为例,其采用的文件系统为HDFS(HadoopDistributed File System,Hadoop分布式文件系统),假设实际保存的每个文件的大小为1GB,内存的大小为64MB。当每隔一段时间内存满了之后,内存中的所有数据会保存为一个64MB的文件,该文件内包含最近一段时间内的所有新插入的数据,以及这些数据对应的时间戳范围,由于这些数据时连续插入的,因此其时间戳范围是连续的。当这类文件的数量达到预设值时,预设数量的文件会合并成一个1GB的文件,同样地,这个1GB的文件中包含的数据所对应的时间戳范围也应当是连续的。由于数据表中的元信息包含时间戳,在查询时可以根据时间戳过滤掉大量前述1GB的文件,提高了查询的效率。
由于采用了分布式的存储方式,在将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之后,还包括:当所述第二列簇的数据量达到设定阈值后,将所述数据表分裂为多个数据域(region),分别保存于多个服务器中。在一般情况下,数据文件的大小往往会远大于其对应的元信息,如前述例子中数据文件为交通卡口摄像头拍摄的经过车辆的图片数据文件,每个图片数据文件的大小可能是1MB左右,而对应的元信息可能只有1KB甚至不到1KB,如果采用第一列簇中数据文件的大小作为分裂数据域的依据,可能会造成数据域的过多。因此,本实施例中采用第二列簇中元信息的数据量作为分裂数据域的依据,可以有效避免数据域的数量多个这一问题。
此外,本申请实施例还提供了一种数据文件的查询方法,用于对采用上述存储方法存储的数据文件进行查询,其具体流程如图2所示,包括以下步骤:
步骤S201,获取查询条件,并在所述第二列簇中查找符合所述查询条件的元信息;
步骤S202,根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置;
步骤S203,由所述第一列簇中的存储位置获取所述数据文件。
由于数据文件的大小往往会远大于其对应的元信息,若在第一列簇中查询需要的数据文件,往往需要处理较大的数据量。本实施例提供的查询方法中,首先根据查询条件查询数据文件对应的元信息,在查找到元信息后,在根据预先建立的索引确定数据文件在数据表中的存储位置,然后在由保存数据文件的第一列簇中的对应存储位置获取数据文件,由于元信息数据量相对较小,因此处理的速度相对于直接查询数据文件更加快速。
由于在存储时,其元信息包括所述数据文件中的行键、列和时间戳,为了较为准确地查找元信息,查询条件至少包括所述元信息中行键的全部或者部分信息。例如,数据表中保存有前述表1中的数据文件D1~D3及其元信息M1~M3,查询条件可以包含行键的全部,例如ABC123201506031455FG5709,此时查找到的元信息为M1和M2,若查询条件中还包括其他内容,例如时间戳,则可以根据时间戳再进一步筛选,得到需要的元信息。此外,所述查询条件也可能不包含完整的行键信息,例如仅知道是卡口ABC123或者仅知道是在2015年6月3日拍摄的照片,那么查询条件可以是ABC123******************或******20150603**********,其中“*”表示可以是任意值。此外,除上述三钟信息外,所述元信息还可以包括所述数据文件的文件大小,对应地,在查询时,可以在查询条件中加入数据文件的文件大小,根据文件大小对需要查找的数据文件进行过滤,使得查找更加准确。
在实际应用中,对于用户来说其在应用层通过UI(User Interface,用户界面)输入查询指令时,可以直接输入更加具体化的指令,例如在实际场景中卡口位置与卡口编号是对应的,那么用户可以直接的查询指令可以是卡口位置:AA区BB路口,运行该查询方法的设备在收到指令后,能够自动转化为设备容易识别的查询条件,例如用户可以直接输入AA区BB路口,而设备能够据此自动获取到的查询条件为ABC123。
在存储时所述数据文件对应的元信息可以根据元信息的排序写入所述数据表中,那么在所述第二列簇中查找符合所述查询条件的元信息时,可以根据所述排序在所述第二列簇中查找符合所述查询条件的元信息。当所述元信息有序排列时,可以在查找时可以根据排序使用设定的查找算法来进行元信息的查找,以提高查找的效率。
优选地,当第二列簇中的元信息依次根据所述元信息的行键、列和时间戳进行排序时,步骤S201中根据所述排序在所述第二列簇中查找符合所述查询条件的元信息,具体包括:根据所述元信息的行键、列和时间戳的依次排序在所述第二列簇中查找符合所述查询条件的元信息。进一步地,当所述查询条件至少包含所述元信息中行键的起始部分的信息时,可以根据所述排序以及所述元信息中行键的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查询条件的元信息。仍以前述通卡口摄像头拍摄的经过车辆的图片数据文件为例,在查找特定的图片数据文件时,若需要采用二分查找,则用户至少需要知道拍摄该图片的卡口的编号,并且元信息是按照行键、列和时间戳进行排序的。通过采用二分查找的方式,使得查询的次数大大减少,有效提高了查询速度。
进一步地,当所述索引为倒排索引时,步骤S202具体包括:根据所述倒排索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置,通过采用倒排索引的方式,进一步提高查询的效率。
当所述数据表包含多个保存于不同服务器中的数据域时,步骤S202具体包括:根据所述索引,确定符合所述查询条件的元信息所对应的数据文件在所述数据表中的数据域的第一列簇中的存储位置。在物理上,同一个数据域的数据文件和元信息是放在一起的,例如放在一个服务器。在根据查询条件在某一数据域查找到元信息后,可以直接在该数据域内根据索引确定数据文件的存储位置,并获取该数据文件,由此数据文件的查询效率。
在前述数据文件存储方法中提及的所述数据文件包括多个子文件时的应用场景下,所述第一列簇中保存有包含所述子文件的所述数据文件,所述第二列簇的同一行中保存有所述子文件的元信息。此时,步骤S202具体包括:根据所述索引,确定所述符合所述查询条件的元信息所对应的子文件在所述数据表的第一列簇中的存储位置;而步骤S203,具体包括:由所述第一列簇中的存储位置获取所述数据文件的子文件。仍以前述同一网页上多张相关的图片写入到Hbase的HDFS为例,同一网页上多张相关的图片由于在写入时往往会保存于同一个1GB的文件中,通过元信息中的时间戳过滤掉大部分1GB的文件,可以提高查询的效率。
作为本申请的另一种实施方式,图3示出了本申请实施例提供的一种数据文件的存储设备1的结构示意图,该设备1包括第一装置310、第二装置320和第三装置330。具体地,第一装置310用于创建数据文件的元信息,所述元信息包含所述数据文件在数据表中的存储位置;第二装置320用于将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中;第三装置330用于根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引。
在此,本领域技术人员应能理解,所述第一列簇及第二列簇分别用来指代用于写入所述数据文件与该数据文件对应的元信息的两个列簇(Column Family),所述第一、第二仅用于区分两个列簇,并不表示对两个列簇在数据表中位置的限定。
在此,设备1包括但不限于网络设备、触控终端或网络设备与触控终端通过网络相集成所构成的设备。在此,所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现;或者由用户设备实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其他现有的或今后可能出现的设备1如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。
由于在存储数据文件时会创建包含所述数据文件在数据表中的存储位置的元信息,并且在写入数据表时将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中,由于在列式数据库中对于数据表中同一行的操作为原子操作,无论对行进行访问的事务有多少列,对该行的数据的更新都会是原子操作,即全部成功或者全部失败,不会存在部分成功的情况,因此不会存在数据文件写入成功而元信息写入不成功的情况,从而保证了数据的一致性。并且由于数据文件以及该数据文件对应的元信息在一张数据表中,后续进行维护时仅需要对一张数据表进行相关操作即可,降低了数据库的复杂度和维护难度。
其中,所述元信息至少包括所述数据文件在所述数据表中的行键、列和时间戳,通过所述行键、列和时间戳可以确定所述数据文件在数据表中的存储位置,由此可以根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引,为便于查询这些存储的数据文件。以Hbase为例,假设需要保存的数据文件为交通卡口摄像头拍摄的经过车辆的图片数据文件,其行键的形式可以应用场景的不同需求进行自定义,例如为了便于查询,可以将本例中的行键设置为卡口编号+拍摄时间+车牌,例如ABC123201506031455FG5709,其中ABC123表示卡口编号,201506031455表示拍摄时间是2015年6月3日14点55分,FG5709为车牌,在获取到该数据文件时即可以得到该数据文件的行键。该数据文件的列和时间戳则会在向数据表写入时获得,其中,列表示该数据文件在第一列簇中的所在列,时间戳表示该数据文件写入数据表的时间。获取到上述三种信息后,即可以创建数据文件的元信息。
除上述三种信息外,所述元信息还可以包括所述数据文件的文件大小(size),通过将所述文件大小的信息作为元信息的一部分,可以进一步地方便后续的数据查询,使得根据元信息建立的索引更加准确,例如根据文件大小对需要查找的数据文件进行过滤等。在此,本领域技术人员应能理解上述关于行键形式和元信息的内容描述仅为举例,其他现有的或今后可能出现行键形式和元信息的内容如可适用于本申请,也应包含在本申请保护范围以内,并在此以引用方式包含于此。
优选地,图4示出了本申请实施例提供的另一种数据文件的存储设备的结构示意图,除如图3所示第一装置310、第二装置320和第三装置330之外,还包括第四装置340。具体地,所述第四装置340用于在将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之前,对所述元信息进行排序;所述第二装置320具体用于根据所述排序将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中。通过对写入第二列簇的元信息进行排序,在后续查询时可以根据该排序进行快速查找,提高查询的效率。在此,本领域技术人员应当理解,第一装置310和第三装置330分别与图3实施例中对应装置的内容相同或基本相同,为简明起见,故在此不再赘述,并以引用的方式包含于此。
进一步地,所述第一装置310具体用于依次根据所述元信息的行键、列和时间戳对所述元信息进行排序。即先根据行键来排序,在行键相同时,按照列来排序,在行键和列都相同时,按照时间戳来排序。例如,三个数据文件(D1、D2和D3)及其对应的元信息(M1、M2、M3)分别如表1所示。若按照元信息M1、M2、M3中行键、列和时间戳的字典序对所述元信息进行排序,其排序的顺序为M3、M1、M2。通过依次根据行键、列和时间戳对所述元信息进行排序,可以方便查询时通过一定的查询算法(如二分查找)对来查找特定的元信息,以减少查询时数据读写的次数,加快查询速度。此外,由于数据文件对应的元信息中的行键、列和时间戳不可能完全一致,因此无论所述元信息是否还包含所述数据文件的文件大小,均无需以文件大小作为排序的依据。
优选地,所述第三装置330具体用于建立的索引为倒排索引,即根据所述元信息建立指向所述数据文件在所述数据表中的存储位置的倒排索引。由此,通过元信息的内容,可以快速地定位到所述数据文件在所述数据表中的存储位置,便于数据文件的查询。
在某些应用场景下,所述数据文件包括多个子文件,所述第一装置310具体用于创建数据文件的各个子文件对应的元信息。所述第二装置320具体用于将包含所述子文件的所述数据文件写入所述数据表的第一列簇中,并将所述子文件对应的元信息写入所述数据表的第二列簇的同一行中。例如,需要存储的数据文件包含的子文件同一网页上多张相关的图片,创建元信息时分别创建这些图片对应的元信息,并将所述子文件对应的元信息写入所述数据表的第二列簇的同一行中。在实际的数据写入过程中,图片数据首先会写入内存中,当内存满或达到其它触发条件触发后将内存中的图片数据聚合为一个文件进行保存。以Hbase为例,其采用的文件系统为HDFS(Hadoop Distributed File System,Hadoop分布式文件系统),假设实际保存的每个文件的大小为1GB,内存的大小为64MB。当每隔一段时间内存满了之后,内存中的所有数据会保存为一个64MB的文件,该文件内包含最近一段时间内的所有新插入的数据,以及这些数据对应的时间戳范围,由于这些数据时连续插入的,因此其时间戳范围是连续的。当这类文件的数量达到预设值时,预设数量的文件会合并成一个1GB的文件,同样地,这个1GB的文件中包含的数据所对应的时间戳范围也应当是连续的。由于数据表中的元信息包含时间戳,在查询时可以根据时间戳过滤掉大量前述1GB的文件,提高了查询的效率。
由于采用了分布式的存储方式,本申请实施例还提供了一种优选的数据文件的存储设备,该设备1的结构如图5所示,除如图3所示第一装置310、第二装置320和第三装置330之外,还包括第五装置350。具体地,所述第五装置350用于在将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之后,当所述第二列簇的数据量达到设定阈值后,将所述数据表分裂为多个数据域,分别保存于多个服务器中。在此,本领域技术人员应当理解,第一装置310、第二装置320和第三装置330分别与图3实施例中对应装置的内容相同或基本相同,为简明起见,故在此不再赘述,并以引用的方式包含于此。
在一般情况下,数据文件的大小往往会远大于其对应的元信息,如前述例子中数据文件为交通卡口摄像头拍摄的经过车辆的图片数据文件,每个图片数据文件的大小可能是1MB左右,而对应的元信息可能只有1KB甚至不到1KB,如果采用第一列簇中数据文件的大小作为分裂数据域的依据,可能会造成数据域的过多。因此,本实施例中采用第二列簇中元信息的数据量作为分裂数据域的依据,可以有效避免数据域的数量多个这一问题。
此外,本申请实施例还提供了一种数据文件的查询设备2,用于对采用上述存储设备1存储的数据文件进行查询,该设备2的结构如图6所示,包括第六装置360、第七装置370和第八装置380。具体地,第六装置360用于获取查询条件,并在所述第二列簇中查找符合所述查询条件的元信息;第七装置370用于根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置;第八装置380用于由所述第一列簇中的存储位置获取所述数据文件。在此,设备2包括但不限于网络设备、触控终端或网络设备与触控终端通过网络相集成所构成的设备。在此,所述网络设备包括但不限于如网络主机、单个网络服务器、多个网络服务器集或基于云计算的计算机集合等实现;或者由用户设备实现。在此,云由基于云计算(Cloud Computing)的大量主机或网络服务器构成,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其他现有的或今后可能出现的设备1如可适用于本发明,也应包含在本发明保护范围以内,并在此以引用方式包含于此。
由于数据文件的大小往往会远大于其对应的元信息,若在第一列簇中查询需要的数据文件,往往需要处理较大的数据量。本实施例提供的查询方法中,首先根据查询条件查询数据文件对应的元信息,在查找到元信息后,在根据预先建立的索引确定数据文件在数据表中的存储位置,然后在由保存数据文件的第一列簇中的对应存储位置获取数据文件,由于元信息数据量相对较小,因此处理的速度相对于直接查询数据文件更加快速。
由于在存储时,其元信息包括所述数据文件中的行键、列和时间戳,为了较为准确地查找元信息,所述第六装置360获取的查询条件至少包括所述元信息中行键的全部或者部分信息。例如,数据表中保存有前述表1中的数据文件D1~D3及其元信息M1~M3,查询条件可以包含行键的全部,例如ABC123201506031455FG5709,此时查找到的元信息为M1和M2,若查询条件中还包括其他内容,例如时间戳,则可以根据时间戳再进一步筛选,得到需要的元信息。此外,所述查询条件也可能不包含完整的行键信息,例如仅知道是卡口ABC123或者仅知道是在2015年6月3日拍摄的照片,那么查询条件可以是ABC123******************或******20150603**********,其中“*”表示可以是任意值。此外,除上述三钟信息外,所述元信息还可以包括所述数据文件的文件大小,对应地,在查询时,可以在查询条件中加入数据文件的文件大小,根据文件大小对需要查找的数据文件进行过滤,使得查找更加准确。
在实际应用中,对于用户来说其在应用层通过UI(User Interface,用户界面)输入查询指令时,可以直接输入更加具体化的指令,例如在实际场景中卡口位置与卡口编号是对应的,那么用户可以直接的查询指令可以是卡口位置:AA区BB路口,运行该查询方法的设备在收到指令后,能够自动转化为设备容易识别的查询条件,例如用户可以直接输入AA区BB路口,而设备能够据此自动获取到的查询条件为ABC123。
在存储时所述数据文件对应的元信息可以根据元信息的排序写入所述数据表中,那么所述第六装置360具体用于获取查询条件,根据所述排序在所述第二列簇中查找符合所述查询条件的元信息。当所述元信息有序排列时,可以在查找时可以根据排序使用设定的查找算法来进行元信息的查找,以提高查找的效率。
优选地,当第二列簇中的元信息依次根据所述元信息的行键、列和时间戳进行排序时,所述第六装置360具体用于获取查询条件,根据所述元信息的行键、列和时间戳的依次排序在所述第二列簇中查找符合所述查询条件的元信息。进一步地,当所述查询条件至少包含所述元信息中行键的起始部分的信息时,所述第六装置,可以根据所述排序以及所述元信息中行键的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查询条件的元信息。仍以前述通卡口摄像头拍摄的经过车辆的图片数据文件为例,在查找特定的图片数据文件时,若需要采用二分查找,则用户至少需要知道拍摄该图片的卡口的编号,并且元信息是按照行键、列和时间戳进行排序的。通过采用二分查找的方式,使得查询的次数大大减少,有效提高了查询速度。
进一步地,当所述索引为倒排索引时,所述第七装置具体用于根据所述倒排索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置,通过采用倒排索引的方式,进一步提高查询的效率。
当所述数据表包含多个保存于不同服务器中的数据域时,第七装置370具体根据所述索引,确定符合所述查询条件的元信息所对应的数据文件在所述数据表中的数据域的第一列簇中的存储位置。在物理上,同一个数据域的数据文件和元信息是放在一起的,例如放在一个服务器。在根据查询条件在某一数据域查找到元信息后,可以直接在该数据域内根据索引确定数据文件的存储位置,并获取该数据文件,由此数据文件的查询效率。
在前述数据文件存储方法中提及的所述数据文件包括多个子文件时的应用场景下,所述第一列簇中保存有包含所述子文件的所述数据文件,所述第二列簇的同一行中保存有所述子文件的元信息。此时,第七装置370具体用于根据所述索引,确定所述符合所述查询条件的元信息所对应的子文件在所述数据表的第一列簇中的存储位置;而第八装置380具体用于由所述第一列簇中的存储位置获取所述数据文件的子文件。仍以前述同一网页上多张相关的图片写入到Hbase的HDFS为例,同一网页上多张相关的图片由于在写入时往往会保存于同一个1GB的文件中,通过元信息中的时间戳过滤掉大部分1GB的文件,可以提高查询的效率。
综上所述,由于在存储数据文件时会创建包含所述数据文件在数据表中的存储位置的元信息,并且在写入数据表时将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中,由于在列式数据库中对于数据表中同一行的操作为原子操作,无论对行进行访问的事务有多少列,对该行的数据的更新都会是原子操作,即全部成功或者全部失败,不会存在部分成功的情况,因此不会存在数据文件写入成功而元信息写入不成功的情况,从而保证了数据的一致性。并且由于数据文件以及该数据文件对应的元信息在一张数据表中,后续进行维护时仅需要对一张数据表进行相关操作即可,降低了数据库的复杂度和维护难度。
在查询时,由于数据文件的大小往往会远大于其对应的元信息,若在第一列簇中查询需要的数据文件,往往需要处理较大的数据量。本实施例提供的查询方法中,首先根据查询条件查询数据文件对应的元信息,在查找到元信息后,在根据预先建立的索引确定数据文件在数据表中的存储位置,然后在由保存数据文件的第一列簇中的对应存储位置获取数据文件,由于元信息数据量相对较小,因此处理的速度相对于直接查询数据文件更加快速。
需要注意的是,本申请可在软件和/或软件与硬件的组合体中被实施,例如,可采用专用集成电路(ASIC)、通用目的计算机或任何其他类似硬件设备来实现。在一个实施例中,本申请的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本申请的软件程序(包括相关的数据结构)可以被存储到计算机可读记录介质中,例如,RAM存储器,磁或光驱动器或软磁盘及类似设备。另外,本申请的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
另外,本申请的一部分可被应用为计算机程序产品,例如计算机程序指令,当其被计算机执行时,通过该计算机的操作,可以调用或提供根据本申请的方法和/或技术方案。而调用本申请的方法的程序指令,可能被存储在固定的或可移动的记录介质中,和/或通过广播或其他信号承载媒体中的数据流而被传输,和/或被存储在根据所述程序指令运行的计算机设备的工作存储器中。在此,根据本申请的一个实施例包括一个装置,该装置包括用于存储计算机程序指令的存储器和用于执行程序指令的处理器,其中,当该计算机程序指令被该处理器执行时,触发该装置运行基于前述根据本申请的多个实施例的方法和/或技术方案。
对于本领域技术人员而言,显然本申请不限于上述示范性实施例的细节,而且在不背离本申请的精神或基本特征的情况下,能够以其他的具体形式实现本申请。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本申请的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本申请内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。装置权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一,第二等词语用来表示名称,而并不表示任何特定的顺序。
Claims (30)
1.一种数据文件的存储方法,其中,该方法包括:
创建数据文件的元信息,所述元信息包含所述数据文件在数据表中的存储位置;
将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中;
根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引。
2.根据权利要求1所述的方法,其中,将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之前,包括:
对所述元信息进行排序;
将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中,包括:
根据所述排序将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中。
3.根据权利要求2所述的方法,其中,所述元信息包括所述数据文件在所述数据表中的行键、列和时间戳。
4.根据权利要求3所述的方法,其中,对所述元信息进行排序,包括:依次根据所述元信息的行键、列和时间戳对所述元信息进行排序。
5.根据权利要求1至4任一项所述的方法,其中,根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引,包括:
根据所述元信息建立指向所述数据文件在所述数据表中的存储位置的倒排索引。
6.根据权利要求1至5任一项所述的方法,其中,所述数据文件包括多个子文件;
创建数据文件的元信息,包括:
创建数据文件的各个子文件对应的元信息;
将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中,包括:
将包含所述子文件的所述数据文件写入所述数据表的第一列簇中,并将所述子文件对应的元信息写入所述数据表的第二列簇的同一行中。
7.根据权利要求1至6任一项所述的方法,其中,将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之后,还包括:
当所述第二列簇的数据量达到设定阈值后,将所述数据表分裂为多个数据域,分别保存于多个服务器中。
8.一种数据文件的查询方法,用于对采用权利要求1至7任一项所述方法存储的数据文件进行查询,其中,所述方法包括:
获取查询条件,并在所述第二列簇中查找符合所述查询条件的元信息;
根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置;
由所述第一列簇中的存储位置获取所述数据文件。
9.根据权利要求8所述的方法,其中,当所述元信息包括所述数据文件中的行键、列和时间戳,所述查询条件至少包括所述元信息中行键的全部或者部分信息。
10.根据权利要求8或9所述的方法,其中,当所述数据文件与该数据文件对应的元信息为分别根据元信息的排序写入所述数据表中时,
在所述第二列簇中查找符合所述查询条件的元信息,包括:
根据所述排序在所述第二列簇中查找符合所述查询条件的元信息。
11.根据权利要求10所述的方法,其中,当所述元信息依次根据所述元信息的行键、列和时间戳进行排序时,
根据所述排序在所述第二列簇中查找符合所述查询条件的元信息,包括:
根据所述元信息的行键、列和时间戳的依次排序在所述第二列簇中查找符合所述查询条件的元信息。
12.根据权利要求10或11所述的方法,其中,当所述查询条件至少包含所述元信息中行键的起始部分的信息时,
根据所述排序在所述第二列簇中查找符合所述查询条件的元信息,包括:
根据所述排序以及所述元信息中行键的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查询条件的元信息。
13.根据权利要求8至12中任一项所述的方法,其中,当所述索引为倒排索引时,
根据所述索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置,包括:
根据所述倒排索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置。
14.根据权利要求8至13中任一项所述的方法,其中,当所述数据表包含多个保存于不同服务器中的数据域时,
根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置,包括:
根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表中的数据域的第一列簇中的存储位置。
15.根据权利要求8至14中任一项所述的方法,其中,当所述数据文件包括多个子文件,所述第一列簇中保存有包含所述子文件的所述数据文件,所述第二列簇的同一行中保存有所述子文件的元信息时,
根据所述索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置,包括:
根据所述索引确定所述符合所述查询条件的元信息所对应的子文件在所述数据表的第一列簇中的存储位置;
由所述第一列簇中的存储位置获取所述数据文件,包括:
由所述第一列簇中的存储位置获取所述数据文件的子文件。
16.一种数据文件的存储设备,其中,该设备包括:
第一装置,用于创建数据文件的元信息,所述元信息包含所述数据文件在数据表中的存储位置;
第二装置,用于将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中;
第三装置,用于根据所述第二列簇中的元信息建立指向所述数据文件在所述数据表中的存储位置的索引。
17.根据权利要求16所述的设备,其中,该设备还包括:
第四装置,用于在将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之前,对所述元信息进行排序;
所述第二装置,用于根据所述排序将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中。
18.根据权利要求17所述的设备,其中,所述元信息包括所述数据文件在所述数据表中的行键、列和时间戳。
19.根据权利要求18所述的设备,其中,所述第一装置,用于依次根据所述元信息的行键、列和时间戳对所述元信息进行排序。
20.根据权利要求16至19任一项所述的设备,其中,所述第三装置,用于根据所述元信息建立指向所述数据文件在所述数据表中的存储位置的倒排索引。
21.根据权利要求16至20任一项所述的设备,其中,所述数据文件包括多个子文件;
所述第一装置,用于创建数据文件的各个子文件对应的元信息;
所述第二装置,用于将包含所述子文件的所述数据文件写入所述数据表的第一列簇中,并将所述子文件对应的元信息写入所述数据表的第二列簇的同一行中。
22.根据权利要求16至21任一项所述的设备,其中,该设备还包括:
第五装置,用于在将所述数据文件与该数据文件对应的元信息分别写入所述数据表中第一列簇和第二列簇的同一行中之后,当所述第二列簇的数据量达到设定阈值后,将所述数据表分裂为多个数据域,分别保存于多个服务器中。
23.一种数据文件的查询设备,用于对采用权利要求16至22任一项所述设备存储的数据文件进行查询,其中,包括:
第六装置,用于获取查询条件,并在所述第二列簇中查找符合所述查询条件的元信息;
第七装置,用于根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置;
第八装置,用于由所述第一列簇中的存储位置获取所述数据文件。
24.根据权利要求23所述的设备,其中,当所述元信息包括所述数据文件中的行键、列和时间戳,所述第六装置获取的查询条件至少包括所述元信息中行键的全部或者部分信息。
25.根据权利要求23或24所述的设备,其中,当所述数据文件与该数据文件对应的元信息为分别根据元信息的排序写入所述数据表中时,
所述第六装置,用于获取查询条件,根据所述排序在所述第二列簇中查找符合所述查询条件的元信息。
26.根据权利要求25所述的设备,其中,当所述元信息依次根据所述元信息的行键、列和时间戳进行排序时,
所述第六装置,用于获取查询条件,根据所述元信息的行键、列和时间戳的依次排序在所述第二列簇中查找符合所述查询条件的元信息。
27.根据权利要求25或26所述的设备,其中,当所述查询条件至少包含所述元信息中行键的起始部分的信息时,
所述第六装置,用于获取所述查询条件,根据所述排序以及所述元信息中行键的起始部分的信息,采用二分查找的方式在所述第二列簇中查找符合所述查询条件的元信息。
28.根据权利要求23至27中任一项所述的设备,其中,当所述索引为倒排索引时,
所述第七装置,用于根据所述倒排索引确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表的第一列簇中的存储位置。
29.根据权利要求23至28中任一项所述的设备,其中,当所述数据表包含多个保存于不同服务器中的数据域时,
所述第七装置,用于根据所述索引,确定所述符合所述查询条件的元信息所对应的数据文件在所述数据表中的数据域的第一列簇中的存储位置。
30.根据权利要求23至29中任一项所述的设备,其中,当所述数据文件包括多个子文件,所述第一列簇中保存有包含所述子文件的所述数据文件,所述第二列簇的同一行中保存有所述子文件的元信息时,
所述第七装置,用于根据所述索引确定所述符合所述查询条件的元信息所对应的子文件在所述数据表的第一列簇中的存储位置;
所述第八装置,用于由所述第一列簇中的存储位置获取所述数据文件的子文件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510386678.2A CN106326305A (zh) | 2015-06-30 | 2015-06-30 | 一种数据文件的存储和查询方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510386678.2A CN106326305A (zh) | 2015-06-30 | 2015-06-30 | 一种数据文件的存储和查询方法及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106326305A true CN106326305A (zh) | 2017-01-11 |
Family
ID=57727326
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510386678.2A Pending CN106326305A (zh) | 2015-06-30 | 2015-06-30 | 一种数据文件的存储和查询方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106326305A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106960020A (zh) * | 2017-03-09 | 2017-07-18 | 星环信息科技(上海)有限公司 | 一种创建索引表的方法及设备 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1790330A (zh) * | 2004-12-15 | 2006-06-21 | 国际商业机器公司 | 通过单次写入索引组织数据的系统和方法 |
US7870114B2 (en) * | 2007-06-15 | 2011-01-11 | Microsoft Corporation | Efficient data infrastructure for high dimensional data analysis |
CN102298641A (zh) * | 2011-09-14 | 2011-12-28 | 清华大学 | 一种基于键值库的文件与结构化数据统一存储方法 |
CN102521303A (zh) * | 2011-11-30 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种用于列数据库的单表多列序存储方法 |
CN103116610A (zh) * | 2013-01-23 | 2013-05-22 | 浙江大学 | 基于HBase的矢量空间大数据存储方法 |
CN103150397A (zh) * | 2013-03-26 | 2013-06-12 | 北京经纬恒润科技有限公司 | 一种数据索引创建方法、数据检索方法和系统 |
CN103703467A (zh) * | 2013-08-29 | 2014-04-02 | 华为技术有限公司 | 存储数据的方法和装置 |
CN104572723A (zh) * | 2013-10-21 | 2015-04-29 | 华为技术有限公司 | 文件的访问方法及装置 |
CN104679889A (zh) * | 2015-03-17 | 2015-06-03 | 浪潮集团有限公司 | 一种面向大数据处理的数据存储方法和装置 |
CN104715039A (zh) * | 2015-03-23 | 2015-06-17 | 星环信息科技(上海)有限公司 | 基于硬盘和内存的列式存储和查询方法及设备 |
-
2015
- 2015-06-30 CN CN201510386678.2A patent/CN106326305A/zh active Pending
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1790330A (zh) * | 2004-12-15 | 2006-06-21 | 国际商业机器公司 | 通过单次写入索引组织数据的系统和方法 |
US7870114B2 (en) * | 2007-06-15 | 2011-01-11 | Microsoft Corporation | Efficient data infrastructure for high dimensional data analysis |
CN102298641A (zh) * | 2011-09-14 | 2011-12-28 | 清华大学 | 一种基于键值库的文件与结构化数据统一存储方法 |
CN102521303A (zh) * | 2011-11-30 | 2012-06-27 | 北京人大金仓信息技术股份有限公司 | 一种用于列数据库的单表多列序存储方法 |
CN103116610A (zh) * | 2013-01-23 | 2013-05-22 | 浙江大学 | 基于HBase的矢量空间大数据存储方法 |
CN103150397A (zh) * | 2013-03-26 | 2013-06-12 | 北京经纬恒润科技有限公司 | 一种数据索引创建方法、数据检索方法和系统 |
CN103703467A (zh) * | 2013-08-29 | 2014-04-02 | 华为技术有限公司 | 存储数据的方法和装置 |
CN104572723A (zh) * | 2013-10-21 | 2015-04-29 | 华为技术有限公司 | 文件的访问方法及装置 |
CN104679889A (zh) * | 2015-03-17 | 2015-06-03 | 浪潮集团有限公司 | 一种面向大数据处理的数据存储方法和装置 |
CN104715039A (zh) * | 2015-03-23 | 2015-06-17 | 星环信息科技(上海)有限公司 | 基于硬盘和内存的列式存储和查询方法及设备 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106960020A (zh) * | 2017-03-09 | 2017-07-18 | 星环信息科技(上海)有限公司 | 一种创建索引表的方法及设备 |
CN106960020B (zh) * | 2017-03-09 | 2019-10-22 | 星环信息科技(上海)有限公司 | 一种创建索引表的方法及设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107957957B (zh) | 测试用例的获取方法和装置 | |
US10789231B2 (en) | Spatial indexing for distributed storage using local indexes | |
US10803129B2 (en) | Method and apparatus for processing online user distribution | |
CN107045531A (zh) | 一种优化hdfs小文件存取的系统及方法 | |
US20180144061A1 (en) | Edge store designs for graph databases | |
CN103440288A (zh) | 一种大数据存储方法及装置 | |
CN106970958B (zh) | 一种流文件的查询与存储方法和装置 | |
US20190236403A1 (en) | Systems and Methods for Converting Massive Point Cloud Datasets to a Hierarchical Storage Format | |
TW201923629A (zh) | 資料處理方法及裝置 | |
CN104199899A (zh) | 一种基于Hbase的海量图片存储方法及装置 | |
CN111221813B (zh) | 数据库索引以及数据库查询的处理方法、装置及设备 | |
CN106960020A (zh) | 一种创建索引表的方法及设备 | |
CN106682003A (zh) | 分布式存储命名空间的路径分割映射方法和装置 | |
CN109684402A (zh) | 一种基于大数据平台元数据血缘关系实现方法 | |
CN103279489A (zh) | 一种元数据的存储方法、装置 | |
CN105117489B (zh) | 一种数据库管理方法、装置及电子设备 | |
CN107451204B (zh) | 一种数据查询方法、装置及设备 | |
CN106354587A (zh) | 镜像服务器以及导出虚拟机镜像文件的方法 | |
CN111522892A (zh) | 地理要素的检索方法及装置 | |
CN103942301A (zh) | 一种面向多数据类型访问应用的分布式文件系统 | |
CN114372060A (zh) | 数据存储方法、装置、设备及存储介质 | |
CN111125088B (zh) | 多层级数据处理方法和装置 | |
CN104462349A (zh) | 一种文件处理方法及装置 | |
CN110457182A (zh) | 一种负载均衡集群实例运行指标监控系统 | |
CN104408128B (zh) | 一种基于b+树异步更新索引的读优化方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 200233 11-12 / F, building B, 88 Hongcao Road, Xuhui District, Shanghai Applicant after: Star link information technology (Shanghai) Co.,Ltd. Address before: Room 1902, 19th floor, block a, 391 Guiping Road, Xuhui District, Shanghai 200233 Applicant before: TRANSWARP TECHNOLOGY (SHANGHAI) Co.,Ltd. |
|
CB02 | Change of applicant information | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170111 |
|
RJ01 | Rejection of invention patent application after publication |