CN111104067B - 面向列的缓存方法、装置、设备及计算机可读存储介质 - Google Patents

面向列的缓存方法、装置、设备及计算机可读存储介质 Download PDF

Info

Publication number
CN111104067B
CN111104067B CN201911326754.5A CN201911326754A CN111104067B CN 111104067 B CN111104067 B CN 111104067B CN 201911326754 A CN201911326754 A CN 201911326754A CN 111104067 B CN111104067 B CN 111104067B
Authority
CN
China
Prior art keywords
data
column
memory
virtual
cached
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
Application number
CN201911326754.5A
Other languages
English (en)
Other versions
CN111104067A (zh
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.)
WeBank Co Ltd
Original Assignee
WeBank Co Ltd
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 WeBank Co Ltd filed Critical WeBank Co Ltd
Priority to CN201911326754.5A priority Critical patent/CN111104067B/zh
Publication of CN111104067A publication Critical patent/CN111104067A/zh
Application granted granted Critical
Publication of CN111104067B publication Critical patent/CN111104067B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0662Virtualisation aspects

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本发明公开了一种面向列的缓存方法、装置、设备及计算机可读存储介质,所述方法包括:获取待缓存数据的列式格式信息;根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。本发明实现了跨进程计算时无需进行序列化和反序列化的操作,节省了计算资源,也提高了计算效率。

Description

面向列的缓存方法、装置、设备及计算机可读存储介质
技术领域
本发明涉及数据处理技术领域,尤其涉及一种面向列的缓存方法、装置、设备及计算机可读存储介质。
背景技术
随着大数据、人工智能等技术的发展,对计算机的数据处理效率要求也越来越高。现有的缓存***在跨进程计算是需要序列化和反序列化操作,序列化是把对象转换为字节序列的过程称为对象的序列化,反序列化是把字节序列恢复为对象的过程称为对象的反序列化。而这两个过程均需要花费计算机的计算资源,从而导致计算机在跨进程计算时效率降低。
发明内容
本发明的主要目的在于提供一种面向列的缓存方法、装置、设备及计算机可读存储介质,旨在解决现有缓存***在跨进程计算是需要序列化和反序列化操作,浪费计算资源的技术问题。
为实现上述目的,本发明提供一种面向列的缓存方法,所述面向列的缓存方法包括:
获取待缓存数据的列式格式信息;
根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理。
可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
复制所述目标内存块中的内容至复制内存块中;
更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
检测所述元数据中是否有与所述目标虚拟块重叠的已经锁定的虚拟块;
若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
可选地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
可选地,所述根据所述列信息在内存资源中为所述待缓存数据分配内存块的步骤包括:
当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
此外,为实现上述目的,本发明还提供一种面向列的缓存装置,所述面向列的缓存装置包括:
获取模块,用于获取待缓存数据的列式格式信息;
分配模块,用于根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
生成模块,用于将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
此外,为实现上述目的,本发明还提供一种面向列的缓存设备,所述面向列的缓存设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的面向列的缓存程序,所述面向列的缓存程序被所述处理器执行时实现如上所述的面向列的缓存方法的步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有面向列的缓存程序,所述面向列的缓存程序被处理器执行时实现如上所述的面向列的缓存方法的步骤。
本发明中,通过根据列式格式信息为待缓存数据分配内存块,并将所述内存块添加至连续的虚拟内存中,生成待缓存数据的元数据,获得列式缓存数据。由于通过元数据来记录列式缓存数据的列式格式信息与虚拟内存之间的对应关系,以及虚拟内存与内存块之间的映射关系,使得对于上层列式缓存接口来说,数据缓存在一段完全连续的虚拟内存,并且在访问具体内容时,通过元数据能够映射到实际存放的内存块,从而实现了一种内存可感知的列式缓存方法,也即,通过元数据能够清晰地知道数据存放的内存地址。在跨进程计算时,按照传统的缓存方法,进程之间需要将数据序列化后传递,再通过反序列化还原,以保证数据的完整性,采用本发明中的缓存方法,使得进程之间可以直接通过传递元数据的方式来传递列式缓存数据,而无需将列式缓存数据进行序列化和反序列化的操作,也能够保证数据的完整性,因为元数据中记录了数据所存放的内存地址。由于不需要进行序列化和反序列化操作,使得跨进程计算时节省了计算资源,也提高了计算效率。
附图说明
图1是本发明实施例方案涉及的硬件运行环境的结构示意图;
图2为本发明面向列的缓存方法第一实施例的流程示意图;
图3为本发明实施例涉及的一种元数据记录映射关系的示意图;
图4为本发明面向列的缓存装置较佳实施例的功能示意图模块图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例提供了一种面向列的缓存设备,参照图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中存储的面向列的缓存程序,执行以下操作:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
复制所述目标内存块中的内容至复制内存块中;
更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的缓存程序,执行以下操作:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的缓存程序,执行以下操作:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
检测所述元数据中是否有与所述目标虚拟块重叠的已经锁定的虚拟块;
若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,处理器1001还可以用于调用存储器1005中存储的面向列的缓存程序,执行以下操作:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
进一步地,所述根据所述列信息在内存资源中为所述待缓存数据分配内存块的步骤包括:
当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
基于上述的硬件结构,提出本发明面向列的缓存方法的各个实施例。
参照图2,本发明面向列的缓存方法第一实施例提供一种面向列的缓存方法,需要说明的是,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。本发明面向列的缓存方法的各个实施例的执行主体可以是PC、智能手机、智能电视机、平板电脑和便携计算机等终端设备,为便于描述,在以下各实施例以缓存***执行主体进行阐述。所述面向列的缓存方法包括:
步骤S10,获取待缓存数据的列式格式信息;
缓存***可以是安装在终端设备中的***程序,在操作***基础上运行,可以与其他应用程序进行数据交互。列式数据格式是一种将数据以列的形式组织,每一列的数据类型相同的数据格式。待缓存数据可以是存储在外部存储中的数据,在外部存储中的存储格式可以是列式数据格式,也可以是其他格式。缓存***可以获取待缓存数据的列式格式信息,当待缓存数据本身是列式数据格式的数据时,缓存***可直接获取待缓存数据对应的列式格式信息;当待缓存数据本身是其他格式的数据时,缓存***可将待缓存数据转化为列式数据格式的数据,生成待缓存数据的列式格式信息;也可以是由其他程序来执行格式转换,再将获得的列式格式信息传递给缓存***。其中,列式格式信息可以是用于描述待缓存数据以列式格式组织的信息,例如,包括多少列、每列的索引、列与子列的嵌套信息、每个列的单元格数、每个列的数据类型、包括多少个存储批或每个存储批包括哪几个列等等信息。将待缓存数据以列式数据格式缓存,使用连续的内存保存相同数据类型的单元格数据,能够提供比行式数据格式缓存更高的读写和计算效率。
步骤S20,根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
缓存***根据列式格式信息在内存资源中为待缓存数据分配内存块。其中,缓存***可以在进程空间中分配和管理内存,对于支持GC(Garbage Collection,垃圾回收)的编程语言(如java python),可以在托管堆对外分配和管理内存,减少GC造成的计算资源浪费,也可以在共享内存、显存中分配和管理内存。对于支持GC的编程语言,内存资源为数组结构;NPU(neural-network processing units,网络处理器)内存、显存和共享内存等为通过类似malloc函数分配的内存资源,记录其起始地址和长度,例如,缓存***在起始地址为0,长度为100的内存资源中为待缓存数据分配内存块。
具体地,缓存***根据列式格式信息为待缓存数据分配内存块的方式有多中,例如可以根据列式格式信息,将待缓存数据按存储批或按列进行划分为数据块,为每个数据块分配一个内存块。内存块之间不一定是连续的,各个内存块的大小也不一定相同。各个内存块形成内存池,通过树、图或链表的方式对内存池中的内存块进行组织,提高内存分配的效率,同时也可以灵活地增加或减少内存。
进一步地,步骤S20包括:
步骤S201,当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
在本实施例中,一种可行的内存块分配方法是:当列式格式信息中的列是元素大小固定的列时,缓存***可根据该列中元素的个数和数据类型计算该列的实际大小,在内存资源中为该列分配该实际大小的内存块。也即一列数据分配一个内存块,一个内存块是连续的,用于缓存数据类型相同的一列数据,从而使得数据存取效率提高。其中,元素的大小固定是指元素的数据类型属于固定长度的类型,例如整型。如某列中元素的数据类型是整型,整型占用4个字节长度,该列一共有100个元素,则该列的实际大小S=4*100=400个字节,则缓存***在内存资源中划分400字节的内存块,用于缓存该列数据。
步骤S202,当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
当列式格式信息中的列是元素大小不固定的列时,缓存***可先为该列分配默认大小的内存块,可以预先根据需求设置默认大小。若在缓存该列数据时,默认大小小于该列的实际大小时,即默认大小的内存块存放不下该列的数据时,再为该列分配一个或多个默认大小的内存块,以使得分配的多个内存块能够存放该列数据。其中,元素的大小不固定是指元素的数据类型属于不固定长度的类型,例如,字符串型类型。
步骤S30,将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
缓存***将内存块添加至连续的虚拟内存中,并生成待缓存数据的元数据。具体地,虚拟内存是一段连续的内存,并不占用实际的内存,由一段虚拟地址构成。虚拟内存中的虚拟内存块之间是连续的。缓存***从虚拟内存中分配一个与该内存块大小相同的虚拟内存块,并且该新分配的虚拟内存块与虚拟内存中已有的虚拟内存块相连,并采用元数据记录内存块与虚拟内存块之间的映射关系,从而将内存块添加至虚拟内存中。例如,内存块1在内存资源中的首地址是11,长度是10,缓存***在虚拟内存中分配一段长度为10的虚拟内存块1,由于虚拟内存中还没有虚拟内存块,所以该新分配的虚拟内存块1的首地址是0;内存块2在内存资源中的首地址是50,长度是12,缓存***在虚拟内存中分配一段长度为12的虚拟内存块2,虚拟内存已有长度为10、首地址为0的虚拟内存块1,所以该新分配的虚拟内存块2的首地址是10;元数据中记录了虚拟内存与内存块之间的映射关系,例如:内存资源中的11~20对应虚拟内存中的0~9,内存资源中的50~61对应虚拟内存中的10~21。元数据中还包括列式格式信息与虚拟内存之间的对应关系,例如虚拟内存中的虚拟内存块对应存放的是哪一列或哪几列,各个列的数据类型等信息。如图3所示,为一种元数据记录映射关系的示意图,图中各个mem-block是内存块,在虚拟内存中是连续的,在内存资源中是分散的。
缓存***为待缓存数据分配内存块,并将待缓存数据缓存在对应的内存块中,从而获得列式缓存数据。由于缓存***通过元数据来记录列式缓存数据的列式格式信息与虚拟内存之间的对应关系,以及虚拟内存与内存块之间的映射关系,使得对于上层列式缓存接口来说,数据缓存在一段完全连续的虚拟内存,并且在访问具体内容时,通过元数据能够映射到实际存放的内存块,从而实现了一种内存可感知的列式缓存方法,也即,通过元数据能够清晰地知道数据存放的内存地址。在跨进程计算时,按照传统的缓存方法,进程之间需要将数据序列化后传递,再通过反序列化还原,以保证数据的完整性,采用本实施例中的缓存方法,使得进程之间可以直接通过传递元数据的方式来传递列式缓存数据,而无需将列式缓存数据进行序列化和反序列化的操作,也能够保证数据的完整性,因为元数据中记录了数据所存放的内存地址。由于不需要进行序列化和反序列化操作,使得跨进程计算时节省了计算资源,也提高了计算效率。
进一步地,进一步的,基于上述第一实施例,本发明第二实施例提供一种面向列的缓存方法。在本实施例中,所述步骤S30之后,还包括:
步骤A10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
A20,调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理。
缓存***在将待缓存数据按照上述实施例中的缓存方式进行列式缓存,获得列式缓存数据后,可对列式缓存数据进行读、写或计算等各种操作。
缓存***可以指定列索引的范围,或者索引集合,创建列式缓存数据的列级视图;还可以在列式缓存数据上支持虚拟行,指定行索引的范围或者索引集合,创建列式缓存数据的行级视图。综合这两种方式,可灵活地组合成行+列拆分的视图,在使用行或列索引访问列式缓存数据时,通过创建视图的参数映射真实索引。
当有并行计算任务时,缓存***可为并行进程或并行线程指定列式缓存数据中的目标虚拟行或目标列。调用并行进程或并行线程来对目标虚拟行或目标列的数据进行并行计算。具体地,并行进程或并行线程通过元数据中列式格式信息与虚拟内存之间的对应关系,确定目标虚拟行或目标列对应的虚拟内存块,然后对虚拟内存块中的数据进行并行处理。由于进程或线程可以通过元数据中的映射信息直接确定目标虚拟行或目标列所在的内存块,使得进程或线程可以直接对内存块中的数据进行读取,写入时,也可以通过缓存***为并行进程或并行线程指定不重叠的虚拟行或列,使得并行进程或线程可以同时对内存中的列式缓存数据进行写操作。从而克服了目前的缓存***无法支持多进程或多线程并行计算的问题,充分发挥了芯片计算能力。
进一步地,基于上述第一和第二实施例,本发明第三实施例提供一种面向列的缓存方法。在本实施例中,所述步骤S30之后,还包括:
步骤B10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
步骤B20,复制所述目标内存块中的内容至复制内存块中;
步骤B30,更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
在本实施例中,缓存***在基于上述实施例中的缓存方法对待缓存数据进行列式缓存,获得列式缓存数据后,基于列式缓存数据的特点,可以支持多种并发读写或计算策略,并且能够提高处理效率,并发策略包括但不限于写时复制、并发写入、细粒度锁和指令优化。
具体地,写时复制是指在创建新进程时,并不会把所有的资源复制给新创建的进程,而是在需要写入数据时,才会复制需要写入数据的页,从而避免复制操作浪费资源。
缓存***在读取数据时,无需复制内存块中的数据,直接根据元数据映射到内存块中,从内存块中读取数据。在写入时,缓存***可以根据元数据中的映射关系,确定列式缓存数据中的待写入数据对应的目标内存块。例如,待写入数据是列式缓存数据中的列1,则缓存***查找元数据,确定列1对应的内存块。然后缓存***将目标内存块中的内容复制到复制内存块中,其中,复制内存块是在内存资源中再分配的一块内存块,大小与目标内存块相同。缓存***在复制目标内存块的内容后,更新元数据,将原元数据中待写入数据与目标内存块之间的对应关系,更新为待写入数据与复制内存块对应关联。能够直接根据元数据来索引待写入数据对应的复制内存块,进而直接对复制内存块中的数据进行写入操作。
进一步地,步骤S30之后,还包括:
步骤C10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
步骤C20,将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
并发写入时,缓存***可以将根据元数据中的映射关系确定列式缓存数据中的待修改数据对应的目标内存块。缓存***从目标内存块中读取到待修改数据,将待修改数据和修改后的值传入并发写入的汇编指令,并执行所述并发写入的汇编指令,以将目标内存块中的待修改数据更新为该修改后的值。需要说明的是,并发写入的汇编指令可以是cmpxchg指令,cmpxchg指令是一种汇编指令,用于解决并发写入的问题。cmpxchg指令支持向量化地更新多个值,cmpxchg会依次将一个或一批值(若芯片支持)写入内存,背后被编译成芯片级指令,远比利用线程或进程锁性能高。
进一步地,步骤S30之后,还包括:
步骤D10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
步骤D20,检测所述元数据中是否有与所述目标虚拟块重叠的已经锁定的虚拟块;
步骤D30,若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
步骤D40,当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
在本实施例中,缓存***可以为并发操作列式缓存数据的进程锁定一块虚拟块,虚拟块是列式缓存数据中的一部分。具体地,缓存***先确定进程要操作的虚拟行或列,由确定的虚拟行或列构成一个目标虚拟块。元数据中记录了已经锁定的虚拟块的信息,缓存***检测元数据中是否有与该目标虚拟块重叠的已经锁定的虚拟块。目标虚拟块与已经锁定的虚拟块之间有重叠的虚拟行或列,则确定目标虚拟块与已经锁定的虚拟块重叠。若没有检测到与目标虚拟块重叠的已锁定虚拟块,则缓存***可以将该目标虚拟块对应的虚拟行信息或列信息添加至元数据中,以锁定目标虚拟块。当进程对目标虚拟块写入完成后,就解除目标虚拟块的锁定,可以是将元数据中目标虚拟块的信息删除。若缓存***检测到与目标虚拟块重叠的已锁定虚拟块,则等待,等到元数据中没有与目标虚拟块重叠的已锁定虚拟块时,再锁定目标虚拟块;或者直接返回失败的信息给进程。
在本实施例中,由于元数据中记录了列式缓存数据的列式格式信息与虚拟内存的对应关系,还记录了虚拟内存与内存块之间的映射关系,因此,能够根据元数据确定数据缓存在实际内存中的位置,从而对内存中的数据进行直接读写,并且能够根据元数据中记录的细粒度的列式格式信息,对列式缓存数据添加细粒度锁,进而提高并发进程的读写效率。
进一步地,所述步骤S30之后,还包括:
步骤E10,当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
步骤E20,调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
进一步地,在本实施例中,缓存***可根据元数据的映射关系确定列式缓存数据中的待处理数据对应的目标内存块。并根据操作任务调用单指令多数据流(SingleInstruction Multiple Data,SIMD)指令集对目标内存块中的待处理数据进行处理。其中,SIMD是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据矢量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。由于列式缓存数据是按列缓存的数据,因此能够采用SIMD指令集来对一列数据进行处理,提高处理效率。
本实施例通用覆盖了GPU/NPU等不同的芯片的需求,连续的可随意调度和映射的小块内存,利于本地化、指令流水线或寄存器优化。
此外本发明实施例还提出一种面向列的缓存装置,参照图4,所述面向列的缓存装置包括:
获取模块10,用于获取待缓存数据的列式格式信息;
分配模块20,用于根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
生成模块30,用于将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系。
进一步地,所述面向列的缓存装置还包括:
指定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
并行处理模块,用于调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理。
进一步地,所述面向列的缓存装置还包括:
第一确定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
复制模块,用于复制所述目标内存块中的内容至复制内存块中;
更新模块,用于更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
第二确定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
执行模块,用于将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
第三确定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
检测模块,用于检测所述元数据中是否有与所述目标虚拟块重叠的已经锁定的虚拟块;
锁定模块,用于若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
解除模块,用于当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
进一步地,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
第四确定模块,用于当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
调用模块,用于调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
进一步地,所述步骤S20包括:
第一分配单元,用于当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
第二分配单元,用于当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
本发明面向列的缓存装置的具体实施方式的拓展内容与上述面向列的缓存方法各实施例基本相同,在此不做赘述。
此外,本发明实施例还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有面向列的缓存程序,所述面向列的缓存程序被处理器执行时实现如上所述面向列的缓存方法的步骤。
本发明面向列的缓存设备和计算机可读存储介质的具体实施方式的拓展内容与上述面向列的缓存方法各实施例基本相同,在此不做赘述。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者***不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者***所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者***中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在如上所述的一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (8)

1.一种面向列的缓存方法,其特征在于,所述面向列的缓存方法包括:
获取待缓存数据的列式格式信息,其中,所述列式格式信息用于描述所述待缓存数据以列式格式组织的信息,所述列式格式信息包括列的数量、每个列的索引、列与子列的嵌套信息、每个列的单元格数、每个列的数据类型、存储批的数量或每个存储批中包含的列;
根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系,所述虚拟内存是一段连续的由虚拟地址构成的内存;
所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理;
所述根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块的步骤包括:
当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
2.如权利要求1所述的面向列的缓存方法,其特征在于,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待写入数据对应的目标内存块;
复制所述目标内存块中的内容至复制内存块中;
更新所述元数据,其中,更新后的所述元数据中所述待写入数据与所述复制内存块对应关联。
3.如权利要求1所述的面向列的缓存方法,其特征在于,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待修改数据对应的目标内存块;
将所述待修改数据和修改后的值传入并发写入的汇编指令,执行所述并发写入的汇编指令以将所述目标内存块中的待修改数据更新为所述修改后的值。
4.如权利要求1所述的面向列的缓存方法,其特征在于,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,从所述列式缓存数据中确定目标虚拟块;
检测所述元数据中是否有与所述目标虚拟块重叠的已经锁定的虚拟块;
若没有,则将所述目标虚拟块对应的虚拟行信息或列信息添加至所述元数据中以锁定所述目标虚拟块;
当对所述目标虚拟块写入完成后解除对所述目标虚拟块的锁定。
5.如权利要求1所述的面向列的缓存方法,其特征在于,所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,根据所述元数据确定所述列式缓存数据中的待处理数据对应的目标内存块;
调用单指令多数据流指令集中的指令对所述目标内存块进行处理。
6.一种面向列的缓存装置,其特征在于,所述面向列的缓存装置包括:
获取模块,用于获取待缓存数据的列式格式信息,其中,所述列式格式信息用于描述所述待缓存数据以列式格式组织的信息,所述列式格式信息包括列的数量、每个列的索引、列与子列的嵌套信息、每个列的单元格数、每个列的数据类型、存储批的数量或每个存储批中包含的列;
分配模块,用于根据所述列式格式信息在内存资源中为所述待缓存数据分配内存块;
生成模块,用于将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据,其中,所述元数据中包括所述列式格式信息与所述虚拟内存之间的对应关系,以及所述虚拟内存与所述内存块之间的映射关系,所述虚拟内存是一段连续的由虚拟地址构成的内存;
所述将所述内存块添加至连续的虚拟内存中,并生成所述待缓存数据的元数据的步骤之后,所述面向列的缓存装置还包括:
当将所述待缓存数据进行列式缓存获得列式缓存数据后,为并行进程或并行线程指定所述列式缓存数据中的目标虚拟行或目标列;
调用所述并行进程或所述并行线程根据所述元数据,确定所述目标虚拟行或所述目标列对应的虚拟内存块,对所述虚拟内存块中的数据进行并行处理;
所述分配模块包括:
第一分配单元,用于当所述列式格式信息中的列是元素大小固定的列时,根据所述列中元素的个数和数据类型计算所述列的实际大小,在内存资源中为所述列分配所述实际大小的内存块;
第二分配单元,用于当所述列式格式信息中的列是元素大小非固定的列时,在内存资源中为所述列分配默认大小的内存块,并在所述默认大小小于所述列的实际大小时,再为所述列分配所述默认大小的内存块。
7.一种面向列的缓存设备,其特征在于,所述面向列的缓存设备包括存储器、处理器和存储在所述存储器上并可在所述处理器上运行的面向列的缓存程序,所述面向列的缓存程序被所述处理器执行时实现如权利要求1至5中任一项所述的面向列的缓存方法的步骤。
8.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有面向列的缓存程序,所述面向列的缓存程序被处理器执行时实现如权利要求1至5中任一项所述的面向列的缓存方法的步骤。
CN201911326754.5A 2019-12-20 2019-12-20 面向列的缓存方法、装置、设备及计算机可读存储介质 Active CN111104067B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911326754.5A CN111104067B (zh) 2019-12-20 2019-12-20 面向列的缓存方法、装置、设备及计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911326754.5A CN111104067B (zh) 2019-12-20 2019-12-20 面向列的缓存方法、装置、设备及计算机可读存储介质

Publications (2)

Publication Number Publication Date
CN111104067A CN111104067A (zh) 2020-05-05
CN111104067B true CN111104067B (zh) 2024-01-12

Family

ID=70422737

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911326754.5A Active CN111104067B (zh) 2019-12-20 2019-12-20 面向列的缓存方法、装置、设备及计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN111104067B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113296961B (zh) * 2021-07-22 2021-11-19 广州中望龙腾软件股份有限公司 基于gpu的内存动态分配方法、装置及内存链表

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102609305A (zh) * 2012-02-07 2012-07-25 中山爱科数字科技股份有限公司 一种服务器集群中内存共享方法
CN103092905A (zh) * 2011-11-07 2013-05-08 Sap股份公司 使用虚拟文件数据对象的列式数据库
CN104516912A (zh) * 2013-09-29 2015-04-15 ***通信集团黑龙江有限公司 一种动态的数据存储方法及装置
CN104765574A (zh) * 2015-04-23 2015-07-08 成都博元时代软件有限公司 数据云端存储方法
CN105144160A (zh) * 2013-03-15 2015-12-09 甲骨文国际公司 利用闪存高速缓存中动态生成的替代数据格式加速查询的方法
CN107408132A (zh) * 2015-03-20 2017-11-28 国际商业机器公司 在列存储中的***和点查询操作的有效性能
CN109542889A (zh) * 2018-10-11 2019-03-29 平安科技(深圳)有限公司 流式数据列存储方法、装置、设备和存储介质

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10733688B2 (en) * 2017-09-26 2020-08-04 Intel Corpoation Area-efficient implementations of graphics instructions

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103092905A (zh) * 2011-11-07 2013-05-08 Sap股份公司 使用虚拟文件数据对象的列式数据库
CN102609305A (zh) * 2012-02-07 2012-07-25 中山爱科数字科技股份有限公司 一种服务器集群中内存共享方法
CN105144160A (zh) * 2013-03-15 2015-12-09 甲骨文国际公司 利用闪存高速缓存中动态生成的替代数据格式加速查询的方法
CN104516912A (zh) * 2013-09-29 2015-04-15 ***通信集团黑龙江有限公司 一种动态的数据存储方法及装置
CN107408132A (zh) * 2015-03-20 2017-11-28 国际商业机器公司 在列存储中的***和点查询操作的有效性能
CN104765574A (zh) * 2015-04-23 2015-07-08 成都博元时代软件有限公司 数据云端存储方法
CN109542889A (zh) * 2018-10-11 2019-03-29 平安科技(深圳)有限公司 流式数据列存储方法、装置、设备和存储介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
刘庆,韩蓓蓓.数据库***概论.电子科技大学出版社,2015,第185-201页. *

Also Published As

Publication number Publication date
CN111104067A (zh) 2020-05-05

Similar Documents

Publication Publication Date Title
JP5147280B2 (ja) 異機種マルチプロセッサ・システムにおけるガーベッジ・コレクションのためのシステムおよび方法
US11106795B2 (en) Method and apparatus for updating shared data in a multi-core processor environment
US4812981A (en) Memory management system improving the efficiency of fork operations
US9513886B2 (en) Heap data management for limited local memory(LLM) multi-core processors
US8839215B2 (en) String cache file for optimizing memory usage in a java virtual machine
RU2641244C2 (ru) Унифицированный доступ к совместно используемой и управляемой памяти
US8650537B2 (en) Optimizing an object-oriented program by transforming invocations of synthetic accessor methods
US11556468B2 (en) Multi-ring shared, traversable, and dynamic advanced database
US7769962B2 (en) System and method for thread creation and memory management in an object-oriented programming environment
CN111104067B (zh) 面向列的缓存方法、装置、设备及计算机可读存储介质
US20140379739A1 (en) System and method for marshaling massive database data from native layer to java using linear array
US8656120B2 (en) Device, method and computer-readable medium relocating remote procedure call data in heterogeneous multiprocessor system on chip
US10558502B2 (en) Software application runtime having dynamic evaluation functions and parameters
CN104714792A (zh) 多进程共享数据处理方法和装置
KR102130813B1 (ko) 재구성 가능 프로세서 및 재구성 가능 프로세서를 동작하는 방법
US20100299672A1 (en) Memory management device, computer system, and memory management method
US20100268921A1 (en) Data collection prefetch device and methods thereof
CN113243008A (zh) 具有共享页面高速缓存的分布式vfs
CN112214443B (zh) 设置于图形处理器中的二次卸载装置和方法
US20130166887A1 (en) Data processing apparatus and data processing method
CN113961485A (zh) 内存优化方法、装置、终端、存储介质
US9880612B2 (en) Execution control method and execution control apparatus
US7757053B2 (en) Apparatus and method for managing stacks for efficient memory usage
CN113986555B (zh) 缓存优化方法、装置、设备及可读存储介质
CN112230931B (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