CN110968585B - 面向列的存储方法、装置、设备及计算机可读存储介质 - Google Patents
面向列的存储方法、装置、设备及计算机可读存储介质 Download PDFInfo
- Publication number
- CN110968585B CN110968585B CN201911326804.XA CN201911326804A CN110968585B CN 110968585 B CN110968585 B CN 110968585B CN 201911326804 A CN201911326804 A CN 201911326804A CN 110968585 B CN110968585 B CN 110968585B
- Authority
- CN
- China
- Prior art keywords
- storage
- data
- column
- stored
- metadata
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 50
- 230000006870 function Effects 0.000 claims description 62
- 238000004364 calculation method Methods 0.000 claims description 58
- 238000012545 processing Methods 0.000 claims description 14
- 238000010586 diagram Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 6
- 238000013473 artificial intelligence Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000012216 screening Methods 0.000 description 1
- 230000026676 system process Effects 0.000 description 1
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/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/90—Details of database functions independent of the retrieved data types
- G06F16/907—Retrieval characterised by using metadata, e.g. metadata not derived from the content or metadata generated manually
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Library & Information Science (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种面向列的存储方法、装置、设备及计算机可读存储介质,所述方法包括:当检测到对待存储数据的列式存储需求时,获取所述列式存储需求中的存储结构类型;根据所述存储结构类型生成所述待存储数据的元数据,其中,所述元数据中包括列式存储格式的描述信息和所述存储结构类型对应的额外记录信息;根据所述元数据对所述待存储数据进行列式存储。本发明使得列式存储能够支持不同的存储结构,支持在不同存储结构下对列式存储数据的中的存储批、列、单元格级别的顺序读写或随机读写,扩大了列式存储的应用范围。
Description
技术领域
本发明涉及数据处理技术领域,尤其涉及一种面向列的存储方法、装置、设备及计算机可读存储介质。
背景技术
行式存储方式中数据是按照行数据为基础逻辑存储单元进行存储的,一行中的数据在存储介质中以连续存储形式存在。列式存储方式则是相对于与行式存储来说的,列式存储方式中数据是按照列为基础逻辑存储单元进行存储的,一列中的数据在存储介质中以连续存储形式存在。列式存储很好地解决了行式存储在计算时需要读取多余的数据、IO性能低的问题。但是,现有的列式存储只能够支持文件这种存储结构,对于键值、队列等其他存储结构则无法支持,导致列式存储的应用非常受限。
发明内容
本发明的主要目的在于提供一种面向列的存储方法、装置、设备及计算机可读存储介质,旨在解决现有的列式存储只能够支持文件这种存储结构,导致列式存储的应用非常受限的技术问题。
为实现上述目的,本发明提供一种面向列的存储方法,所述面向列的存储方法包括:
当检测到对待存储数据的列式存储需求时,获取所述列式存储需求中的存储结构类型;
根据所述存储结构类型生成所述待存储数据的元数据,其中,所述元数据中包括列式存储格式的描述信息和所述存储结构类型对应的额外记录信息;
根据所述元数据对所述待存储数据进行列式存储。
可选地,当所述存储结构类型是文件结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的起始偏移量,
所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据对所述待存储数据按照文件结构进行列式存储,其中,将所述元数据存储在文件头部,或将所述元数据通过文件名与所述待存储数据关联后存储在关系数据库或内存中。
可选地,当所述存储结构类型是键值结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列对应的键名,
所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据对所述待存储数据按照键值结构进行列式存储,其中,将所述元数据以键值对进行存储,或将所述元数据通过键名与所述待存储数据关联后存储在关系数据库或内存中。
可选地,当所述存储结构类型是队列结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的数据长度,
所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据对所述待存储数据按照队列结构进行列式存储,其中,将所述元数据作为队列的元素进行存储,或将所述元数据通过队列名与所述待存储数据关联后存储在关系数据库或内存中。
可选地,所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
接收应用方传入的写入计算匿名函数;
遍历所述元数据依次处理所述描述信息中的各个列,其中,将当前列的列索引作为所述写入计算匿名函数的参数,执行所述写入计算匿名函数的计算逻辑对所述待存储数据进行计算处理,将所述写入计算匿名函数的返回值按照所述列索引写入所述当前列。
可选地,所述根据所述元数据对所述待存储数据进行列式存储的步骤之后,还包括:
接收应用方传入的读取计算匿名函数和读取地址;
按照所述读取地址从列式存储中读取待计算数据,将所述待计算数据作为所述读取计算匿名函数的参数,执行所述读取计算匿名函数的计算逻辑对所述待计算数据进行计算处理得到读取结果。
可选地,所述根据所述元数据对所述待存储数据进行列式存储的步骤之后,还包括:
接收应用方传入的对目标列式存储数据的虚拟行读取需求;
根据所述虚拟行读取需求确定所述目标列式存储数据中的待读取列,以及所述待读取列中的待读取单元格;
依次从所述待读取列对应的待读取单元格中读取单元格数据,获得由各个所述单元格数据组成的虚拟行数据。
此外,为实现上述目的,本发明还提供一种面向列的存储装置,所述面向列的存储装置包括:
获取模块,用于当检测到对待存储数据的列式存储需求时,获取所述列式存储需求中的存储结构类型;
生成模块,用于根据所述存储结构类型生成所述待存储数据的元数据,其中,所述元数据中包括列式存储格式的描述信息和所述存储结构类型对应的额外记录信息;
存储模块,用于根据所述元数据对所述待存储数据进行列式存储。
此外,为实现上述目的,本发明还提供一种面向列的存储设备,所述面向列的存储设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的面向列的存储程序,所述面向列的存储程序被所述处理器执行时实现如上所述的面向列的存储方法的步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有面向列的存储程序,所述面向列的存储程序被处理器执行时实现如上所述的面向列的存储方法的步骤。
本发明中,通过在检测到对待存储数据的列式存储需求时,获取列式存储需求中的存储结构类型;根据存储结构类型生成待存储数据的元数据,根据元数据对待存储数据进行列式存储;元数据中除了包括描述列式存储格式的描述信息外,还包括与存储结构类型对应的额外记录信息,使得列式存储能够支持不同的存储结构,支持在不同存储结构下对列式存储数据的中的存储批、列、单元格级别的顺序读写或随机读写;从而扩大了列式存储的应用范围,使得应用方可以根据存储系统所支持的其他存储结构,实现更多的功能,进而使得列式存储能够在更多的应用场景发挥其相对于行式存储的优势。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的结构示意图;
图2为本发明面向列的存储方法第一实施例的流程示意图;
图3为本发明实施例涉及的一种文件结构的列式存储示意图;
图4为本发明实施例涉及的一种键值结构的列式存储示意图;
图5为本发明面向列的存储装置较佳实施例的功能示意图模块图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例提供了一种面向列的存储设备,参照图1,图1是本发明实施例方案涉及的硬件运行环境的结构示意图。
需要说明的是,图1即可为面向列的存储设备的硬件运行环境的结构示意图。本发明实施例面向列的存储设备可以是PC,也可以是智能手机、智能电视机、平板电脑、便携计算机等具有显示功能的终端设备。
如图1所示,该面向列的存储设备可以包括:处理器1001,例如CPU,网络接口1004,用户接口1003,存储器1005,通信总线1002。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(Display)、输入单元比如键盘(Keyboard),可选用户接口1003还可以包括标准的有线接口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。存储器1005可以是高速RAM存储器,也可以是稳定的存储器(non-volatile memory),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
可选地,面向列的存储设备还可以包括摄像头、RF(Radio Frequency,射频)电路,传感器、音频电路、WiFi模块等等。本领域技术人员可以理解,图1中示出的面向列的存储设备结构并不构成对面向列的存储设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
如图1所示,作为一种计算机存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及面向列的存储程序。
在图1所示的面向列的存储设备中,网络接口1004主要用于连接后台服务器,与后台服务器进行数据通信;用户接口1003主要用于连接客户端(用户端),与客户端进行数据通信;而处理器1001可以用于调用存储器1005中存储的面向列的存储程序,并执行以下操作:
当检测到对待存储数据的列式存储需求时,获取所述列式存储需求中的存储结构类型;
根据所述存储结构类型生成所述待存储数据的元数据,其中,所述元数据中包括列式存储格式的描述信息和所述存储结构类型对应的额外记录信息;
根据所述元数据对所述待存储数据进行列式存储。
进一步地,当所述存储结构类型是文件结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的起始偏移量,
所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据对所述待存储数据按照文件结构进行列式存储,其中,将所述元数据存储在文件头部,或将所述元数据通过文件名与所述待存储数据关联后存储在关系数据库或内存中。
进一步地,当所述存储结构类型是键值结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列对应的键名,
所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据对所述待存储数据按照键值结构进行列式存储,其中,将所述元数据以键值对进行存储,或将所述元数据通过键名与所述待存储数据关联后存储在关系数据库或内存中。
进一步地,当所述存储结构类型是队列结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的数据长度,
所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据对所述待存储数据按照队列结构进行列式存储,其中,将所述元数据作为队列的元素进行存储,或将所述元数据通过队列名与所述待存储数据关联后存储在关系数据库或内存中。
进一步地,所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
接收应用方传入的写入计算匿名函数;
遍历所述元数据依次处理所述描述信息中的各个列,其中,将当前列的列索引作为所述写入计算匿名函数的参数,执行所述写入计算匿名函数的计算逻辑对所述待存储数据进行计算处理,将所述写入计算匿名函数的返回值按照所述列索引写入所述当前列。
进一步地,所述根据所述元数据对所述待存储数据进行列式存储的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的存储程序,执行以下操作:
接收应用方传入的读取计算匿名函数和读取地址;
按照所述读取地址从列式存储中读取待计算数据,将所述待计算数据作为所述读取计算匿名函数的参数,执行所述读取计算匿名函数的计算逻辑对所述待计算数据进行计算处理得到读取结果。
进一步地,所述根据所述元数据对所述待存储数据进行列式存储的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的存储程序,执行以下操作:
接收应用方传入的对目标列式存储数据的虚拟行读取需求;
根据所述虚拟行读取需求确定所述目标列式存储数据中的待读取列,以及所述待读取列中的待读取单元格;
依次从所述待读取列对应的待读取单元格中读取单元格数据,获得由各个所述单元格数据组成的虚拟行数据。
基于上述的硬件结构,提出本发明面向列的存储方法的各个实施例。
参照图2,本发明面向列的存储方法第一实施例提供一种面向列的存储方法,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。本发明面向列的存储方法的各个实施例的执行主体可以是PC、智能手机、智能电视机、平板电脑和便携计算机等终端设备,为便于描述,在以下各实施例以存储系统执行主体进行阐述。所述面向列的存储方法包括:
步骤S10,当检测到对待存储数据的列式存储需求时,获取所述列式存储需求中的存储结构类型;
存储系统可以是安装在终端设备中的系统程序,在操作系统基础上运行,可以与其他应用程序进行数据交互。应用方可以向存储系统传递数据存储的各种需求,其中,应用方可以是应用程序,也可以是开发人员。
当存储系统检测到对待存储数据的列式存储需求时,获取列式存储需求中的存储结构类型。其中,列式存储需求可以是应用方所传递的需求,列式存储需求中包括存储结构类型,用于指示将待存储结构按照哪种存储结构进行列式存储。具体地,存储结构类型包括但不限于文件结构(或其他类似块设备存储结构)、键值结构、队列结构(或其他类似流式存储结构)和分布式结构。
步骤S20,根据所述存储结构类型生成所述待存储数据的元数据,其中,所述元数据中包括列式存储格式的描述信息和所述存储结构类型对应的额外记录信息;
存储系统根据获取到的存储结构类型,生成待存储数据的元数据。具体地,元数据中包括列式存储格式的描述信息,如包括用于描述将待存储数据划分为几个存储批、各个存储批包含几个列、每列的数据类型或列嵌套情况等的描述信息。其中,存储系统可根据预先设置的列式存储格式或应用方传递的列式存储格式需求,将待存储数据进行组织。列式存储格式可以是:每列有多个单元格,每列可以有子列;每列(每子列)拥有相同的单元格数(即相同的行数);一列连续存储同类型的单元格,数据类型可以是int/float/double/long等基本类型,也可以是array/list/dict等复合类型;列支持一个或多个子列无限嵌套,列和子列的使用方式完全一样;存储批包括多个列,每个存储批中列的结构相同。
为支持不同的存储结构,存储系统根据获取到的存储结构类型生成的元数据中,还包括与该存储结构类型对应的额外记录信息,也即,存储结构类型不同,额外记录信息不同。例如,键值结构对应的额外记录信息可以包括各个存储批和各个列的键名。额外记录信息用于支持在不同的存储结构下,对列式存储数据中的存储批、列、单元格级别的顺序读写或随机读写,从而使得存储系统不仅能够支持文件结构,还能够支持其他的存储结构,从而扩大了列式存储的应用范围,使得应用方可以根据存储系统所支持的其他存储结构,实现更多的功能,从而使得列式存储能够在更多的应用场景发挥其相对于行式存储的优势。
步骤S30,根据所述元数据对所述待存储数据进行列式存储。
存储系统在生成待存储数据的元数据后,可根据元数据对待存储数据进行列式存储。具体地,存储系统根据元数据中的描述信息,将待存储数据分为多个存储批或多个列,根据额外记录信息,将多个存储批或多个列存储为对应存储结构。例如,当存储结构类型是键值结构时,额外记录信息包括各个存储批或列对应的键名(Key),存储系统将各个存储批或列存储其键名对应的值(Value)中。
需要说明的是,元数据可以与待存储数据按照相同的存储结构存储,也可以单独存储在其他地方,如存储在关系数据库中。元数据可以是在将待存储数据存储后再存储;也可以是先对元数据进行存储,再对待存储数据进行存储,若将待存储数据存储后,根据实际的存储情况,元数据中的某些信息有更新,则可以再更新元数据,例如按照文件结构存储时,存储批或列的起始偏移量可能会有更新。
在将待存储数据进行列式存储后,该待存储数据即是在外部存储中按照列式存储格式存储的列式存储数据;由于列式存储数据对应的元数据中除了包含各个存储批、各个列描述信息,还包括与存储结构对应的额外记录信息,从而使得读写列式存储数据时,可以按照额外记录信息来进行存储批或列的索引,如按照队列结构存储时,额外记录信息记录了各个存储批或列对应的键名,使得存储系统能够支持根据各存储批或列对应的键名,读写对应Value中的数据;进而实现了在不同存储结构下,顺序读写或随机读写列式存储数据中的存储批、列、单元格级别的数据。
在本实施例中,通过在检测到对待存储数据的列式存储需求时,获取列式存储需求中的存储结构类型;根据存储结构类型生成待存储数据的元数据,根据元数据对待存储数据进行列式存储;元数据中除了包括描述列式存储格式的描述信息外,还包括与存储结构类型对应的额外记录信息,使得列式存储能够支持不同的存储结构,支持在不同存储结构下对列式存储数据的中的存储批、列、单元格级别的顺序读写或随机读写;从而扩大了列式存储的应用范围,使得应用方可以根据存储系统所支持的其他存储结构,实现更多的功能,进而使得列式存储能够在更多的应用场景发挥其相对于行式存储的优势。
进一步的,基于上述第一实施例,本发明第二实施例提供一种面向列的存储方法。在本实施例中,当所述存储结构类型是文件结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的起始偏移量,所述步骤S30包括:
步骤S301,根据所述元数据对所述待存储数据按照文件结构进行列式存储,其中,将所述元数据存储在文件头部,或将所述元数据通过文件名与所述待存储数据关联后存储在关系数据库或内存中。
在本实施例中,当存储系统获取到的存储结构类型是文件结构时,存储系统生成的元数据中额外记录信息包括各个存储批或各个列的起始偏移量。其中,存储批的起始偏移量可以是存储批的起始地址相对于整个文件起始地址的偏移量,列的起始偏移量可以是该列的起始地址相对于其所在存储批的起始地址的偏移量。例如,存储批1存储在整个文件的最前面,则存储批1的起始偏移量为0,存储批2存储在存储批1的后面,存储批1所占的空间是100个地址单元,则存储批2的起始偏移量是100;存储批1中有4个列,每个列占25个地址单元,则第一个列的起始偏移量是0,第二个列的起始偏移量是25,以此类推。需要说明的是,文件结构的特点是数据按块存储,各个块在存储空间中是连续存储的。
存储系统根据元数据对待存储数据按照文件结构进行列式存储。具体地,存储系统按照文件结构的特点,将待存储数据的各个存储批或列按照数据块的形式连续存储。存储系统可将元数据存储在文件头部。如图3所示,为一种文件结构的列式存储示意图,元数据在文件头部,存储批1和存储批2相邻存放。存储系统也可以将元数据存储在其他地方,如存储在关系数据库或内存中,并通过文件名将元数据和列式存储数据进行关联,从而使得读写数据时,能够通过元数据对应找到外部存储中的列式存储数据。其中,关系数据库是用于存储类似元数据这种关系型数据的数据库。若将元数据存储在内存中,在对列式存储数据进行读写操作时,则可无需将元数据复制到内存中,而是直接采用内存中的元数据进行索引,从而提高了读写效率。
在对文件结构的列式存储数据进行读写时,存储系统先获取元数据,根据元数据中存储批或列的起始偏移量,对列式存储数据中的存储批或列进行按顺序读写或随机读写。例如,当需要对列式存储数据的第二个存储批中的第一列进行读取时,存储系统查找元数据中第二个存储批和第二个存储批中第一列的起始偏移量,根据起始偏移量和列式存储数据的起始存储地址,计算出第二存储批中第一列的绝对起始地址,利用操作系统层面的按地址取数操作,从外部存储中读取出第二存储批第一列的数据。
进一步地,当所述存储结构类型是键值结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列对应的键名,所述步骤S30包括:
步骤S302,根据所述元数据对所述待存储数据按照键值结构进行列式存储,其中,将所述元数据以键值对进行存储,或将所述元数据通过键名与所述待存储数据关联后存储在关系数据库或内存中。
当存储系统获取到的存储结构类型是键值结构时,存储系统生成的元数据中额外记录信息包括各个存储批或各个列对应的键名。其中,键值结构的特点是数据以键值对的形式存储,一个键名对应一个值,各个键值对在存储空间中并不是连续存储的。
存储系统根据元数据对待存储数据按照键值结构进行列式存储。具体地,存储系统按照键值结构的特点,将待存储数据的各个存储批或列按照键值对的形式存储。例如图4所示,为一种键值结构的列式存储示意图,存储系统根据元数据中的描述信息,将待存储数据划分为存储批1和存储批2,各包括两个列;根据元数据中的额外记录信息:存储批1-列1对应K1、存储批1-列2对应K2、存储批2-列1对应K3和存储批2-列2对应K4,其中,K1~K4是键名,存储系统将各个列的数据存储在各键名对应的值V1~V4中。
存储系统可将元数据以一个键值对的形式进行存储,如将元数据存储在K0对应的Value。存储系统也可以将元数据存储在其他地方,如存储在关系数据库或内存中,并通过键名将元数据和列式存储数据进行关联,从而使得读写数据时,能够通过元数据对应找到外部存储中的列式存储数据。
在对键值结构的列式存储数据进行读写时,存储系统先获取元数据,根据元数据中存储批或列对应的键名,从键名对应的值中读取数据,实现对列式存储数据中的存储批或列的顺序读写或随机读写。例如,当需要对列式存储数据的第二个存储批中的第一列进行读取时,存储系统查找元数据中第二个存储批中第一列对应的键名为K3,从K3对应的值V3中读取出第二存储批中第一列的数据。
进一步地,当所述存储结构类型是队列结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的数据长度,所述步骤S30包括:
步骤S303,根据所述元数据对所述待存储数据按照队列结构进行列式存储,其中,将所述元数据作为队列的元素进行存储,或将所述元数据通过队列名与所述待存储数据关联后存储在关系数据库或内存中。
当存储系统获取到的存储结构类型是队列结构时,存储系统生成的元数据中额外记录信息包括各个存储批或各个列的数据长度。其中,队列结构的特点是数据以队列的形式存储,队列中包括多个元素,各个元素在存储空间中是不连续存储的,队列中的元素只能够顺序读写,不支持随机获取其中的指定元素。
存储系统根据元数据对待存储数据按照队列结构进行列式存储。具体地,存储系统按照队列结构的特点,将待存储数据的各个存储批或列按照队列元素的形式存储。存储系统可将元数据作为队列的元素进行存储,如作为第一个元素。存储系统也可以将元数据存储在其他地方,如存储在关系数据库或内存中,并通过队列名将元数据和列式存储数据进行关联,从而使得读写数据时,能够通过元数据对应找到外部存储中的列式存储数据。
在对队列结构的列式存储数据进行读写时,存储系统先获取元数据,根据元数据中存储批或列的数据长度,实现对列式存储数据中的存储批或列的顺序读写,根据队列结构的特点,不支持对队列结构存储的列式存储数据随机读写指定存储批或指定列。例如,当需要对列式存储数据进行读取时,存储系统获取元数据,若元数据是按照队列的第一个元素进行存储的,第一个元素的指针指向下一个元素的起始地址,根据元数据中记录的下一个元素是第一个存储批的第一个列,数据长度是100个地址单元,则存储系统从指针指向的起始地址开始,读取100个地址单元的数据,即读取到第一个存储批的第一个列;以此类推,存储系统顺序读取出列式存储数据的各个存储批和列。
进一步地,当存储结构类型是分布式存储时,存储系统生成的元数据中额外记录信息包括各个存储批或各个列在各个分布式机中的存储信息,即记录哪些存储批存储在哪个分布式机中,从而实现对分布式存储结构存储的列式存储数据进行读写时,能够根据元数据查找到各个存储批或各个列所在的分布式机,进而在对应的分布式机中进行读写。
进一步的,基于上述第一和第二实施例,本发明第三实施例提供一种面向列的存储方法。在本实施例中,所述步骤S30包括:
步骤S304,接收应用方传入的写入计算匿名函数;
在本实施例中,存储系统可提供匿名函数接口,应用方将根据匿名函数接口编写的匿名函数传入存储系统,匿名函数中实现各种计算处理逻辑,存储系统可调用并执行匿名函数,从而实现写入时计算或读取时计算,而无需将数据复制到内存进行计算,提高了读写效率,也减少了内存资源的占用,从而提高了存储系统的存储性能。
具体地,应用方可传入写入计算匿名函数,该写入计算匿名函数可以是用于对待存储数据进行计算处理,然后将计算结果返回,用于写入列式存储,如用于计算待存储数据中各个数据的平均值,将平均值写入列式存储。根据具体的应用场景,匿名函数可实现的各种不同的计算逻辑。
步骤S305,遍历所述元数据依次处理所述描述信息中的各个列,其中,将当前列的列索引作为所述写入计算匿名函数的参数,执行所述写入计算匿名函数的计算逻辑对所述待存储数据进行计算处理,将所述写入计算匿名函数的返回值按照所述列索引写入所述当前列。
存储系统遍历元数据,依次处理描述信息中的各个列。对于当前列,存储系统将当前列的列索引作为该写入计算匿名函数的参数,然后执行该写入计算匿名函数的计算逻辑对待存储数据进行计算处理,写入计算匿名函数的返回值是计算得到的平均值,存储系统将该平均值按照参数中的列索引写入当前列。存储系统可根据额外设置的总数或其他条件停止来停止调用写入计算匿名函数。需要说明的是,写入计算匿名函数的返回值可以是多个。存储系统一次处理各个列,完成对待存储数据的写入时计算。
应用方也可以传入迭代器,存储系统调用迭代器获取一个或多个数据写入列式存储,直到迭代器完成。
进一步地,所述面向列的存储方法还包括:
步骤S40,接收应用方传入的读取计算匿名函数和读取地址;
进一步地,对于列式存储数据,应用方可传入读取计算匿名函数以及读取地址。该读取计算匿名函数可以是用于读取地址所指向的数据进行计算处理,然后将计算结果返回,如用于计算列式存储数据中指定列的各个单元格数据的平均值。
步骤S50,按照所述读取地址从列式存储中读取待计算数据,将所述待计算数据作为所述读取计算匿名函数的参数,执行所述读取计算匿名函数的计算逻辑对所述待计算数据进行计算处理得到读取结果。
存储系统按照读取地址从列式存储中读取待计算数据,将待计算数据作为读取计算匿名函数的参数,并执行读取计算匿名函数的计算逻辑,对待计算数据进行计算处理,计算结果即作为读取结构。例如,读取计算匿名函数用于分别计算列式存储数据的每个列中单元格数据的平均值,则存储系统读取一列的数据,执行读取计算匿名函数,对该列数据进行计算平均值,返回平均值,抛弃该列数据,再读取下一列的数据,对下一列的数据计算平均值,返回平均值,直到读取完所有列。
在本实施例中,通过接收应用方传入的匿名函数,并执行匿名函数的计算逻辑,对列式存储数据进行读取时计算或写入时计算,使得无需将数据复制到内存,提高了读写效率,也减少了内存资源的占用,从而提高了存储系统的存储性能。
进一步地,基于上述第一、第二和第三实施例,本发明第四实施例提供一种面向列的存储方法。在本实施例中,所述面向列的存储方法还包括:
步骤S60,接收应用方传入的对目标列式存储数据的虚拟行读取需求;
目前的列式存储只能实现一列一列的读取数据,若要实现读取一行的数据,则需要将多个列的数据都读取到内存中,再在内存中实现筛选。
在本实施例中,应用方可向存储系统传入对目标列式存储数据的虚拟行读取需求,虚拟行读取需求中可指定要读取的行索引。
步骤S70,根据所述虚拟行读取需求确定所述目标列式存储数据中的待读取列,以及所述待读取列中的待读取单元格;
存储系统根据虚拟行读取需求确定目标列式存储数据中的待读取列,以及待读取列中的待读取单元格。具体地,存储系统可根据行索引确定要读取的行数据所涉及的列,如一行数据包括5个列属性的数据,则确定这5个列是待读取列;进一步根据行索引确定一行数据中各个单元格数据在各列中的位置,如行索引是2,则确定待读取单元格是这5列中每列的第2个单元格。
步骤S80,依次从所述待读取列对应的待读取单元格中读取单元格数据,获得由各个所述单元格数据组成的虚拟行数据。
存储系统依次从待读取列对应的待读取单元格中读取单元格数据,获取到由各个单元格数据组成的虚拟行数据,也即完成了虚拟行读取。例如,存储系统依次从这5个列中读取到各个列的第2个单元格数据,跳过其他单元格,从而读取到5个单元格数据。由于元数据中记录了各个存储批、各个列的信息,因此,根据元数据能够计算得到各个待读取单元格的读取地址,从而能够实现对单元格级别的读取,从而实现按行的读取数据,以避免需要按行读取数据时,读取一整列的数据,浪费IO资源。
本实施例中,通过增强了列式存储的谓词下推功能,实现随机读取行数据,扩大了列式存储的应用范围,可应用于大数据和人工智能算法的基础架构。
此外本发明实施例还提出一种面向列的存储装置,参照图5,所述面向列的存储装置包括:
获取模块10,用于当检测到对待存储数据的列式存储需求时,获取所述列式存储需求中的存储结构类型;
生成模块20,用于根据所述存储结构类型生成所述待存储数据的元数据,其中,所述元数据中包括列式存储格式的描述信息和所述存储结构类型对应的额外记录信息;
存储模块30,用于根据所述元数据对所述待存储数据进行列式存储。
进一步地,当所述存储结构类型是文件结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的起始偏移量,所述存储模块30包括:
第一存储单元,用于根据所述元数据对所述待存储数据按照文件结构进行列式存储,其中,将所述元数据存储在文件头部,或将所述元数据通过文件名与所述待存储数据关联后存储在关系数据库或内存中。
进一步地,当所述存储结构类型是键值结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列对应的键名,所述存储模块30包括:
第二存储单元,用于根据所述元数据对所述待存储数据按照键值结构进行列式存储,其中,将所述元数据以键值对进行存储,或将所述元数据通过键名与所述待存储数据关联后存储在关系数据库或内存中。
进一步地,当所述存储结构类型是队列结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的数据长度,所述存储模块30包括:
第三存储单元,用于根据所述元数据对所述待存储数据按照队列结构进行列式存储,其中,将所述元数据作为队列的元素进行存储,或将所述元数据通过队列名与所述待存储数据关联后存储在关系数据库或内存中。
进一步地,所述存储模块30包括:
接收单元,用于接收应用方传入的写入计算匿名函数;
遍历单元,用于遍历所述元数据依次处理所述描述信息中的各个列,其中,将当前列的列索引作为所述写入计算匿名函数的参数,执行所述写入计算匿名函数的计算逻辑对所述待存储数据进行计算处理,将所述写入计算匿名函数的返回值按照所述列索引写入所述当前列。
进一步地,所述面向列的存储装置还包括:
第一接收模块,用于接收应用方传入的读取计算匿名函数和读取地址;
执行模块,用于按照所述读取地址从列式存储中读取待计算数据,将所述待计算数据作为所述读取计算匿名函数的参数,执行所述读取计算匿名函数的计算逻辑对所述待计算数据进行计算处理得到读取结果。
进一步地,所述面向列的存储装置还包括:
第二接收模块,用于接收应用方传入的对目标列式存储数据的虚拟行读取需求;
确定模块,用于根据所述虚拟行读取需求确定所述目标列式存储数据中的待读取列,以及所述待读取列中的待读取单元格;
读取模块,用于依次从所述待读取列对应的待读取单元格中读取单元格数据,获得由各个所述单元格数据组成的虚拟行数据。
本发明面向列的存储装置的具体实施方式的拓展内容与上述面向列的存储方法各实施例基本相同,在此不做赘述。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有面向列的存储程序,所述面向列的存储程序被处理器执行时实现如上所述面向列的存储方法的步骤。
本发明面向列的存储设备和计算机可读存储介质的具体实施方式的拓展内容与上述面向列的存储方法各实施例基本相同,在此不做赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
Claims (9)
1.一种面向列的存储方法,其特征在于,所述面向列的存储方法包括:
当检测到对待存储数据的列式存储需求时,获取所述列式存储需求中的存储结构类型;
根据所述存储结构类型生成所述待存储数据的元数据,其中,所述元数据中包括列式存储格式的描述信息和所述存储结构类型对应的额外记录信息,所述额外记录信息用于支持各所述存储结构类型下,对列式存储数据中的存储批、列、单元格级别的顺序读写或随机读写;
当所述存储结构类型是文件结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的起始偏移量;当所述存储结构类型是键值结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列对应的键名;当所述存储结构类型是队列结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的数据长度;
根据所述元数据对所述待存储数据进行列式存储;
其中,所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据中的描述信息,将所述待存储数据分为多个存储批或多个列,根据所述额外记录信息,将所述多个存储批或所述多个列存储为对应存储结构;
其中,所述根据所述元数据对所述待存储数据进行列式存储的步骤之后,还包括:
接收应用方传入的对目标列式存储数据的虚拟行读取需求;
根据所述虚拟行读取需求确定所述目标列式存储数据中的待读取列,以及所述待读取列中的待读取单元格;
依次从所述待读取列对应的待读取单元格中读取单元格数据,获得由各个所述单元格数据组成的虚拟行数据。
2.如权利要求1所述的面向列的存储方法,其特征在于,所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据对所述待存储数据按照文件结构进行列式存储,其中,将所述元数据存储在文件头部,或将所述元数据通过文件名与所述待存储数据关联后存储在关系数据库或内存中。
3.如权利要求1所述的面向列的存储方法,其特征在于,所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据对所述待存储数据按照键值结构进行列式存储,其中,将所述元数据以键值对进行存储,或将所述元数据通过键名与所述待存储数据关联后存储在关系数据库或内存中。
4.如权利要求1所述的面向列的存储方法,其特征在于,所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
根据所述元数据对所述待存储数据按照队列结构进行列式存储,其中,将所述元数据作为队列的元素进行存储,或将所述元数据通过队列名与所述待存储数据关联后存储在关系数据库或内存中。
5.如权利要求1所述的面向列的存储方法,其特征在于,所述根据所述元数据对所述待存储数据进行列式存储的步骤包括:
接收应用方传入的写入计算匿名函数;
遍历所述元数据依次处理所述描述信息中的各个列,其中,将当前列的列索引作为所述写入计算匿名函数的参数,执行所述写入计算匿名函数的计算逻辑对所述待存储数据进行计算处理,将所述写入计算匿名函数的返回值按照所述列索引写入所述当前列。
6.如权利要求1所述的面向列的存储方法,其特征在于,所述根据所述元数据对所述待存储数据进行列式存储的步骤之后,还包括:
接收应用方传入的读取计算匿名函数和读取地址;
按照所述读取地址从列式存储中读取待计算数据,将所述待计算数据作为所述读取计算匿名函数的参数,执行所述读取计算匿名函数的计算逻辑对所述待计算数据进行计算处理得到读取结果。
7.一种面向列的存储装置,其特征在于,所述面向列的存储装置包括:
获取模块,用于当检测到对待存储数据的列式存储需求时,获取所述列式存储需求中的存储结构类型;
生成模块,用于根据所述存储结构类型生成所述待存储数据的元数据,其中,所述元数据中包括列式存储格式的描述信息和所述存储结构类型对应的额外记录信息,所述额外记录信息用于支持各所述存储结构类型下,对列式存储数据中的存储批、列、单元格级别的顺序读写或随机读写;当所述存储结构类型是文件结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的起始偏移量;当所述存储结构类型是键值结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列对应的键名;当所述存储结构类型是队列结构时,所述额外记录信息包括所述描述信息中各个存储批或各个列的数据长度;
存储模块,用于根据所述元数据对所述待存储数据进行列式存储;
其中,所述存储模块具体用于:
根据所述元数据中的描述信息,将所述待存储数据分为多个存储批或多个列,根据所述额外记录信息,将所述多个存储批或所述多个列存储为对应存储结构;
其中,所述面向列的存储装置还用于:
接收应用方传入的对目标列式存储数据的虚拟行读取需求;
根据所述虚拟行读取需求确定所述目标列式存储数据中的待读取列,以及所述待读取列中的待读取单元格;
依次从所述待读取列对应的待读取单元格中读取单元格数据,获得由各个所述单元格数据组成的虚拟行数据。
8.一种面向列的存储设备,其特征在于,所述面向列的存储设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的面向列的存储程序,所述面向列的存储程序被所述处理器执行时实现如权利要求1至6中任一项所述的面向列的存储方法的步骤。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有面向列的存储程序,所述面向列的存储程序被处理器执行时实现如权利要求1至6中任一项所述的面向列的存储方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911326804.XA CN110968585B (zh) | 2019-12-20 | 2019-12-20 | 面向列的存储方法、装置、设备及计算机可读存储介质 |
PCT/CN2020/129253 WO2021120952A1 (zh) | 2019-12-20 | 2020-11-17 | 面向列的存储方法、装置、设备及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911326804.XA CN110968585B (zh) | 2019-12-20 | 2019-12-20 | 面向列的存储方法、装置、设备及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110968585A CN110968585A (zh) | 2020-04-07 |
CN110968585B true CN110968585B (zh) | 2023-11-03 |
Family
ID=70035690
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911326804.XA Active CN110968585B (zh) | 2019-12-20 | 2019-12-20 | 面向列的存储方法、装置、设备及计算机可读存储介质 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN110968585B (zh) |
WO (1) | WO2021120952A1 (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110968585B (zh) * | 2019-12-20 | 2023-11-03 | 深圳前海微众银行股份有限公司 | 面向列的存储方法、装置、设备及计算机可读存储介质 |
CN111752955A (zh) * | 2020-06-29 | 2020-10-09 | 深圳前海微众银行股份有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
CN111984651A (zh) * | 2020-08-21 | 2020-11-24 | 苏州浪潮智能科技有限公司 | 一种基于持久性内存的列式存储方法、装置及设备 |
CN112445801A (zh) * | 2020-11-27 | 2021-03-05 | 杭州海康威视数字技术股份有限公司 | 数据表的元信息管理方法、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104035956A (zh) * | 2014-04-11 | 2014-09-10 | 江苏瑞中数据股份有限公司 | 一种基于分布式列存储的时间序列数据存储方法 |
CN104516912A (zh) * | 2013-09-29 | 2015-04-15 | 中国移动通信集团黑龙江有限公司 | 一种动态的数据存储方法及装置 |
WO2015124042A1 (zh) * | 2014-02-24 | 2015-08-27 | 华为技术有限公司 | 分布式文件系统列式存储的元数据更新方法、装置、主机 |
CN109542889A (zh) * | 2018-10-11 | 2019-03-29 | 平安科技(深圳)有限公司 | 流式数据列存储方法、装置、设备和存储介质 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102890721B (zh) * | 2012-10-16 | 2016-03-30 | 苏州迈科网络安全技术股份有限公司 | 基于列存储技术的数据库建立方法及系统 |
US10255378B2 (en) * | 2015-03-18 | 2019-04-09 | Adp, Llc | Database structure for distributed key-value pair, document and graph models |
JP6550448B2 (ja) * | 2017-12-18 | 2019-07-24 | ヤフー株式会社 | データ管理装置、データ管理方法、およびプログラム |
US10901977B2 (en) * | 2018-05-14 | 2021-01-26 | Sap Se | Database independent detection of data changes |
CN110968585B (zh) * | 2019-12-20 | 2023-11-03 | 深圳前海微众银行股份有限公司 | 面向列的存储方法、装置、设备及计算机可读存储介质 |
-
2019
- 2019-12-20 CN CN201911326804.XA patent/CN110968585B/zh active Active
-
2020
- 2020-11-17 WO PCT/CN2020/129253 patent/WO2021120952A1/zh active Application Filing
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104516912A (zh) * | 2013-09-29 | 2015-04-15 | 中国移动通信集团黑龙江有限公司 | 一种动态的数据存储方法及装置 |
WO2015124042A1 (zh) * | 2014-02-24 | 2015-08-27 | 华为技术有限公司 | 分布式文件系统列式存储的元数据更新方法、装置、主机 |
CN104035956A (zh) * | 2014-04-11 | 2014-09-10 | 江苏瑞中数据股份有限公司 | 一种基于分布式列存储的时间序列数据存储方法 |
CN109542889A (zh) * | 2018-10-11 | 2019-03-29 | 平安科技(深圳)有限公司 | 流式数据列存储方法、装置、设备和存储介质 |
Non-Patent Citations (1)
Title |
---|
HDFS存储和优化技术研究综述;金国栋 等;软件学报;第31卷(第1期);第137-161页 * |
Also Published As
Publication number | Publication date |
---|---|
CN110968585A (zh) | 2020-04-07 |
WO2021120952A1 (zh) | 2021-06-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110968585B (zh) | 面向列的存储方法、装置、设备及计算机可读存储介质 | |
US20160162506A1 (en) | Bloom Filter Generation Method and Apparatus | |
CN109359141B (zh) | 一种可视化报表数据展示方法及装置 | |
CN114089921A (zh) | 电力系统数据存储方法、装置、计算机设备和存储介质 | |
CN112905587B (zh) | 数据库的数据管理方法、装置及电子设备 | |
CN111221814B (zh) | 二级索引的构建方法、装置及设备 | |
CN110837499B (zh) | 数据访问处理方法、装置、电子设备和存储介质 | |
CN116339626A (zh) | 数据处理方法、装置、计算机设备和存储介质 | |
CN115757397A (zh) | 数据库表的数据重整方法和装置、介质和计算机设备 | |
CN113190549B (zh) | 多维表数据调取方法、装置、服务器及存储介质 | |
US20160259703A1 (en) | Retrieval control method, and retrieval control device | |
CN113722623A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN112463785A (zh) | 一种数据质量监控方法、装置、电子设备及存储介质 | |
CN115168409B (zh) | 数据库分表的数据查询方法、装置和计算机设备 | |
CN115544096B (zh) | 数据查询方法、装置、计算机设备及存储介质 | |
US20220391369A1 (en) | Data Storage System Conflict Management | |
CN117909550A (zh) | 查询方法、装置、计算机设备和存储介质 | |
CN117389989A (zh) | 数据同步方法、装置、计算机设备、存储介质和程序产品 | |
CN107729013B (zh) | 管理网页上操作按钮的方法和计算机可读存储介质 | |
CN117033168A (zh) | 系统功能验证方法、装置、计算机设备和存储介质 | |
CN116860367A (zh) | 功能入口显示方法、装置、计算机设备和存储介质 | |
CN117435589A (zh) | 数据转存方法、装置、计算机设备、存储介质 | |
CN117376114A (zh) | 参数配置方法、装置、计算机设备和存储介质 | |
CN116541137A (zh) | 事务处理方法、装置、计算机设备、存储介质和程序产品 | |
CN114969056A (zh) | 数据筛选方法、装置、存储介质及计算机设备 |
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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |