数据存储方法、装置、电子设备和计算机可读存储介质与流程

文档序号:26138896发布日期:2021-08-03 14:22阅读:103来源:国知局
数据存储方法、装置、电子设备和计算机可读存储介质与流程

本公开涉及计算机技术领域,尤其是一种数据存储方法、装置、电子设备和计算机可读存储介质。



背景技术:

fpga(fieldprogrammablegatearray,线上可编程门阵列)器件属于专用集成电路中的一种半定制电路,是可编程的逻辑列阵,能够有效的解决原有的器件门电路数较少的问题。fpga的基本结构包括可编程输入输出单元、可配置逻辑块、数字时钟管理模块、嵌入式块ram、布线资源、内嵌专用硬核、底层内嵌功能单元。由于fpga具有布线资源丰富、可重复编程和集成度高、投资较低的特点,在数字电路设计领域得到了广泛的应用。

现有技术中,采用fpga进行数据存储的方案大致有两种:第一种,所有信息直接存入内存,后续需要查询某类数据时,直接读出所有数据进行筛选;第二种,将整个内存空间进行分区,为每个分类信息,预留固定空间。

然而,上述第一种存储方式虽然存储很简单,但在涉及大量数据存储的应用场景中,若需要查询某条数据,需要读出所有数据一一筛选,效率低下;第二种在面对分类数据存储大小不确定的情况时不够灵活,局限性很大,也很容易造成存储空间的浪费。

可见,在fpga应用场景下,如何进行数据存储是一个值得关注的技术问题。



技术实现要素:

鉴于此,为解决上述技术问题或部分技术问题,本公开实施例提供一种数据存储方法、装置、电子设备和计算机可读存储介质。

第一方面,本公开实施例提供一种数据存储方法,该方法包括:

获取待存储数据;

将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中;

将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

可选地,在本公开任一实施例的方法中,上述将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中,包括:

通过硬件描述语言设计的电路,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中;以及

上述将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上ram中,包括:

通过上述硬件描述语言设计的电路,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

可选地,在本公开任一实施例的方法中,在上述获取待存储数据之后,上述方法还包括:

确定上述待存储数据所属的数据类别;

将与上述数据类别相对应的双向链表,确定为目标双向链表;以及

上述将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中,包括:

将上述待存储数据作为上述目标双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

可选地,在本公开任一实施例的方法中,上述待存储数据经由交易主体在交易过程中针对交易对象进行交易而生成;以及

上述确定上述待存储数据所属的数据类别,包括:

基于上述交易主体和上述交易对象,确定上述待存储数据所属的数据类别。

可选地,在本公开任一实施例的方法中,不同上述交易主体或者不同上述交易对象对应不同数据类别,不同数据类别对应不同双向链表。

可选地,在本公开任一实施例的方法中,上述将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中,包括:

将上述待存储数据中包含的上述交易主体进行交易的交易价格和交易数量,作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

可选地,在本公开任一实施例的方法中,上述ram还用于存储上述双向链表的首地址和末地址,其中,上述末地址表征最近存储的交易信息的地址,上述交易信息包括交易价格和交易数量。

可选地,在本公开任一实施例的方法中,用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小和用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,分别是预先确定的。

可选地,在本公开任一实施例的方法中,上述用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小和用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,基于交易主体数量、交易对象数量、上述fpga的片外ddr的总存储空间大小和上述fpga的片上ram的总存储空间大小分别确定。

可选地,在本公开任一实施例的方法中,上述方法还包括:

在接收到针对上述双向链表中的节点元素指示的数据的操作请求的情况下,通过硬件描述语言设计的电路,对上述双向链表进行上述操作请求指示的操作。

第二方面,本公开实施例提供一种数据存储装置,上述装置包括:

获取单元,被配置成获取待存储数据;

第一存储单元,被配置成将所述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中;

第二存储单元,被配置成将所述节点元素的前驱节点元素的地址和所述节点元素的后继节点元素的地址作为所述节点元素的指针域,存储至所述fpga的片上随机存取存储器ram中。

可选地,在本公开任一实施例的装置中,上述第一存储单元包括:

第一存储子单元,被配置成通过硬件描述语言设计的电路,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中;以及

上述第二存储单元包括:

第二存储子单元,被配置成通过上述硬件描述语言设计的电路,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

可选地,在本公开任一实施例的装置中,上述装置还包括:

第一确定单元,被配置成确定上述待存储数据所属的数据类别;

第二确定单元,被配置成将与上述数据类别相对应的双向链表,确定为目标双向链表;以及

上述第一存储单元包括:

第三存储子单元,被配置成将上述待存储数据作为上述目标双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

可选地,在本公开任一实施例的装置中,上述待存储数据经由交易主体在交易过程中针对交易对象进行交易而生成;以及

上述第一确定单元包括:

第一确定子单元,被配置成基于上述交易主体和上述交易对象,确定上述待存储数据所属的数据类别。

可选地,在本公开任一实施例的装置中,不同上述交易主体或者不同上述交易对象对应不同数据类别,不同数据类别对应不同双向链表。

可选地,在本公开任一实施例的装置中,上述第一存储单元包括:

第四存储子单元,被配置成将上述待存储数据中包含的上述交易主体进行交易的交易价格和交易数量,作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

可选地,在本公开任一实施例的装置中,上述ram还用于存储上述双向链表的首地址和末地址,其中,上述末地址表征最近存储的交易信息的地址,上述交易信息包括交易价格和交易数量。

可选地,在本公开任一实施例的装置中,用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小和用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,分别是预先确定的。

可选地,在本公开任一实施例的装置中,上述用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小和用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,基于交易主体数量、交易对象数量、上述fpga的片外ddr的总存储空间大小和上述fpga的片上ram的总存储空间大小分别确定。

可选地,在本公开任一实施例的装置中,上述装置还包括:

执行单元,被配置成在接收到针对上述双向链表中的节点元素指示的数据的操作请求的情况下,通过硬件描述语言设计的电路,对上述双向链表执行上述操作请求指示的操作。

第三方面,本公开实施例提供一种电子设备,包括:

存储器,用于存储计算机程序;

处理器,用于执行所述存储器中存储的计算机程序,且所述计算机程序被执行时,实现本公开上述第一方面的数据存储方法中任一实施例的方法。

第四方面,本公开实施例提供一种计算机可读介质,该计算机程序被处理器执行时,实现如上述第一方面的数据存储方法中任一实施例的方法。

第五方面,本公开实施例提供一种计算机程序,该计算机程序包括计算机可读代码,当该计算机可读代码在设备上运行时,使得该设备中的处理器执行用于实现如上述第一方面的数据存储方法中任一实施例的方法中各步骤的指令。

基于本公开上述实施例提供的数据存储方法,通过获取待存储数据,然后,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中,以及,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。这样,通过采用双向链表的形式,采用fpga的片外ddr来存储待存储数据的数据域,并采用fpga的片上ram来存储待存储数据的指针域,从而提高了采用fpga进行数据存储的效率,节省了采用fpga进行数据存储的存储空间。

下面通过附图和实施例,对本公开的技术方案做进一步的详细描述。

附图说明

通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本公开的其它特征、目的和优点将会变得更明显:

图1是本公开实施例提供的一种数据存储方法的示例性系统架构图;

图2是本公开实施例提供的一种数据存储方法的流程图;

图3是针对图2的实施例的一个应用场景的示意图;

图4是本公开实施例提供的另一种数据存储方法的流程图;

图5是针对图4的一个应用场景的链表操作的示意图;

图6是本公开实施例提供的一种数据存储装置的结构示意图;

图7是本公开实施例提供的一种电子设备的结构示意图。

具体实施方式

现在将参照附图来详细描述本公开的各种示例性实施例。应注意到:除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对布置、数字表达式和数值并不限制本公开的范围。

本领域技术人员可以理解,本公开实施例中的“第一”、“第二”等术语仅用于区别不同步骤、设备或模块等对象,既不代表任何特定技术含义,也不表示它们之间的逻辑顺序。

还应理解,在本公开实施例中,“多个”可以指两个或两个以上,“至少一个”可以指一个、两个或两个以上。

还应理解,对于本公开实施例中提及的任一部件、数据或结构,在没有明确限定或者在前后文给出相反启示的情况下,一般可以理解为一个或多个。

另外,本公开中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本公开中字符“/”,一般表示前后关联对象是一种“或”的关系。

还应理解,本公开对各个实施例的描述着重强调各个实施例之间的不同之处,其相同或相似之处可以相互参考,为了简洁,不再一一赘述。

以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本公开及其应用或使用的任何限制。

对于相关领域普通技术人员已知的技术、方法和设备可能不作详细讨论,但在适当情况下,所述技术、方法和设备应当被视为说明书的一部分。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步讨论。

需要说明的是,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本公开。

图1是本公开实施例提供的一种数据存储方法的示例性系统架构图。

如图1所示,系统架构100可以包括终端101、102,网络106、107和服务端103、104、105。网络106、107用以在终端101、102和服务端104、105之间提供通信链路的介质。网络106、107可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。

用户可以使用终端101、102通过网络106、107与服务端103、104、105交互,以接收或发送数据(例如交易指令或行情信息)等。终端101、102上可以安装有各种用户端应用,例如炒股软件、数字货币交易系统、期货软件等。

终端101、102可以是硬件,也可以是软件。当终端101、102为硬件时,可以是具有显示屏并且支持数据传输的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。当终端101、102为软件时,可以安装在上述所列举的电子设备中。其可以实现成多个软件或软件模块(例如用来提供分布式服务的软件或软件模块),也可以实现成单个软件或软件模块。在此不作具体限定。

服务端103、104、105可以是提供各种服务的服务端,例如对终端101、102发送的指令进行相应处理的后台服务端。后台服务端可以对接收到的买入指令、卖出指令等操作指令进行分析等处理。作为示例,服务端103、104、105可以是云端服务器。

作为一种示例,服务端103可以是柜台服务器,该服务端103可以作为本公开实施例提供的数据存储方法的执行主体,此外,本公开实施例提供的数据存储装置中所描述的各个单元、子单元、模块、子模块,可以设置于服务端103中。服务端104、105可以是交易所服务器,服务端103可以将获取或接收到的待存储数据,存储在本地或者服务端104、105中。

需要说明的是,服务端可以是硬件,也可以是软件。当服务端为硬件时,可以实现成多个服务端组成的分布式服务器集群,也可以实现成单个服务器。当服务端为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务的软件或软件模块),也可以实现成单个软件或软件模块。在此不作具体限定。

还需要说明的是,本公开的实施例所提供的数据存储方法通常由服务端执行,但也可以由终端执行,还可以由服务端和终端彼此配合执行。相应地,数据存储装置包括的各个部分(例如各个单元、子单元、模块、子模块)通常可以全部设置于服务端中,但也可以全部设置于终端中,还可以分别设置于服务端和终端中。

应该理解,图1中的终端、网络和服务端的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端、网络和服务端。

图2示出了本公开实施例提供的一种数据存储方法的流程200。该数据存储方法,包括以下步骤:

步骤201,获取待存储数据。

在本实施例中,数据存储方法的执行主体(例如图1所示的服务端)可以通过有线连接方式或者无线连接方式,从其他电子设备或者本地,来获取待存储数据。

其中,待存储数据,可以是各种待对其进行存储的数据。作为示例,待存储数据可以包括但不限于:用户操作数据、用户交易数据等等。在待存储数据为用户交易数据的情况下,待存储数据可以包括:用户买入价格、用户卖出价格、用户买入数量、用户卖出数量等等。

步骤202,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

在本实施例中,上述执行主体可以将上述待存储数据作为双向链表中的节点元素的数据域,存储至fpga的片外ddr中。

其中,双向链表也叫双链表,是链表的一种,它包括一个或多个节点(node,又称结点)元素。每个节点元素包括指针域和数据域。其中,指针域用于存储两个指针,分别指向该节点元素的直接后继节点和直接前驱节点。数据域用于存储数据元素(例如待存储数据)。所以,从双向链表中的任意一个节点元素开始,都可以很方便地访问它的前驱节点和后继节点。

这里,在上述执行主体每次得到待存储数据之后,将该待存储数据作为双向链表中的节点元素的数据域,存储至fpga的片外ddr中。

在本实施例的一些可选的实现的方式中,上述执行主体可以通过硬件描述语言(hardwaredescriptionlanguage,hdl)设计的电路,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

其中,上述硬件描述语言可以是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage,超高速集成电路硬件描述语言)或veriloghdl。

实践中,可以首先对设计好的硬件描述语言进行编译和仿真,通过之后,将其转换成电路图。从而利用转换得到的电路图对应的电路,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

可以理解,相对于采用软件描述语言,通过cpu(centralprocessingunit,中央处理器)对内部寄存器进行操作,上述可选的实现方式可以通过对可编程器件的资源进行组合,实现其内部电路的存储功能,这样可以使得存储空间的资源开销可控,并且可以提高存储速度、降低存储功耗。

可选的,上述执行主体还可以通过软件语言,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

步骤203,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

在本实施例中,上述执行主体可以将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

其中,fpga的片上ram,也即fpga内嵌的块ram(blockram),可以将其灵活地配置成单端口ram(dpram,singleportram)、双端口ram(dpram,doubleportsram)、伪双端口ram(pseudodpram)等常用存储结构。

需要说明的是,上述执行主体可以先执行上述步骤202,再执行步骤203;也可以先执行步骤203,再执行步骤202;还可以同时执行步骤202和步骤203,在此不作限定。

在本实施例的一些可选的实现的方式中,上述执行主体可以通过上述硬件描述语言设计的电路,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

其中,上述硬件描述语言可以是vhdl或veriloghdl。

实践中,可以首先对设计好的硬件描述语言进行编译和仿真,通过之后,将其转换成电路图。从而利用转换得到的电路图对应的电路,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

可以理解,相对于采用软件描述语言,通过cpu对内部寄存器进行操作,上述可选的实现方式可以通过对可编程器件内部逻辑资源进行组合,实现其内部电路的存储功能,这样可以使得存储空间的资源开销可控,并且可以提高存储速度、降低存储功耗。

可选的,上述执行主体还可以通过软件语言,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

在本实施例的一些可选的实现方式中,在执行上述步骤201之后,上述执行主体还可以执行如下步骤:

首先,确定上述待存储数据所属的数据类别。

其中,针对待存储数据,可以按照多种方式,来确定其所属的数据类别。

例如,在待存储数据为经由交易主体在交易过程中针对交易对象进行交易而生成的情况下,可以根据交易主体(例如用户)和/或交易对象(例如股票),来确定上述待存储数据所属的数据类别。具体而言,每个交易主体可以对应一个数据类别;或者,每个交易对象可以对应一个数据类别;再或者,每个交易主体和交易对象可以对应一个数据类别。

再例如,还可以按照上述执行主体获得待存储数据的时间,或者,待存储数据所需占用的存储空间的大小等,来确定其所属的数据类别。

之后,将与上述数据类别相对应的双向链表,确定为目标双向链表。

在这里,每个数据类别可以对应一个双向链表。实践中,可以为每个数据类别预先确定其所对应的双向链表,或者,也可以为每个数据类别实时分配其所对应的双向链表。例如,若单个数据类别已存在其所对应的双向链表,则可以直接将该双向链表作为与上述数据类别相对应的双向链表,从而得到目标双向链表;若单个数据类别暂不存在其所对应的双向链表,则可以为该数据类别创建新的双向链表,或者,为该数据类别关联已创建的双向链表,从而将所创建或关联的该双向链表作为与上述数据类别相对应的双向链表,从而得到目标双向链表。

在此基础上,上述执行主体可以采用如下方式来执行上述步骤202:

将上述待存储数据作为上述目标双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

可以理解,上述可选的实现方式中,可以通过确定待存储数据所属的数据类别,实现待存储数据的分类管理,一个或多个数据类别的待存储数据采用一个或多个双向链表来存储(例如,多个数据类别的待存储数据可以采用一个双向链表来存储,或者,一个数据类别的待存储数据采用一个双向链表来存储),这样,有助于提高待存储数据的查询速度。

在一些情况下,在单个数据类别对应的双向链表的存储空间的剩余空间小于预设存储空间阈值的情况下,上述执行主体还可以从除上述单个数据类别之外的其它数据类别对应的双向链表的存储空间中,为该单个数据类别对应的双向链表分配存储空间,以基于所分配的存储空间继续存储该数据类别的待存储数据。

作为示例,上述除上述单个数据类别之外的其它数据类别,可以是各个数据类别中,已占用的存储空间最小的双向链表对应的数据类别,或者,各个数据类别中,最近一次存储该数据类别的待存储数据的时刻距离当前时刻的时间段最长的数据类别。

在上述可选的实现方式中的一些应用场景下,上述待存储数据经由交易主体在交易过程中针对交易对象进行交易而生成。在此基础上,上述执行主体可以采用如下方式,来确定上述待存储数据所属的数据类别:

基于上述交易主体和上述交易对象,确定上述待存储数据所属的数据类别。

可以理解,不同的交易主体或交易对象,可以对应不同的数据类别。例如,在交易主体为用户、交易对象为股票的情况下,也即在用户买入或者卖出股票的场景下,单个用户对不同股票进行买入或者卖出操作,而生成的数据(例如买入价格、买入数量、卖出价格、卖出数量),可以采用一个双向链表来存储。这样,有助于进一步提高待存储数据的查询速度。

在上述应用场景的一些使用情况中,不同上述交易主体或者不同上述交易对象对应不同数据类别,不同数据类别对应不同双向链表。

可以理解,在上述情况中,可以根据交易主体和交易对象二者,来唯一确定出一个数据类别,这样,在进行数据查询操作时,可以根据数据类别,在该数据类别对应的双向链表中查询数据,从而可以提高数据查询的效率。

可选的,不同上述交易主体或者不同上述交易对象,也可以对应同一数据类别,不同数据类别也可以对应同一双向链表。

在上述应用场景的另一些使用情况中,上述步骤202包括:

将上述待存储数据中包含的上述交易主体进行交易的交易价格和交易数量,作为双向链表中的节点元素的数据域,存储至fpga的片外ddr中。

可以理解,上述使用情况中,可以从待存储数据中获得交易主体进行交易的交易价格和交易数量,并将其存储至fpga的片外ddr中,从而,可以实现通过双向链表的交易历史记录的查询。

在上述使用情况中的一些示例中,上述ram还用于存储上述双向链表的首地址和末地址。其中,上述末地址表征最近存储的交易信息的地址,上述交易信息包括交易价格和交易数量。

可以理解,上述示例中,可以通过利用ram存储双向链表的首地址和末地址,实现节点元素的数据域和指针域所存储的数据之间的关联,从而可以提高双向链表中数据的查询速度。

在上述可选的实现方式中的一些应用场景下,用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小和用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,分别是预先确定的。

在上述应用场景的一些使用情况中,上述用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小和用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,基于交易主体数量、交易对象数量、上述fpga的片外ddr的总存储空间大小和上述fpga的片上ram的总存储空间大小分别确定。

作为示例,用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小,可以与交易主体数量、交易对象数量、上述fpga的片外ddr的总存储空间大小和上述fpga的片上ram的总存储空间大小中的至少一者呈正相关;用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,可以与交易主体数量、交易对象数量、上述fpga的片外ddr的总存储空间大小和上述fpga的片上ram的总存储空间大小中的呈正相关。

可以理解,上述使用情况中,可以基于交易主体数量、交易对象数量、上述fpga的片外ddr的总存储空间大小和上述fpga的片上ram的总存储空间大小,来分别确定用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小、用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,这样,采用固定规则为各个节点元素确定ddr的存储空间和ram的存储空间,有助于为各个节点元素确定出大小相等的ddr的存储空间和ram的存储空间,从而可以进一步提高数据的查询速度。

可选的,上述用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小和用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,还可以基于每个交易主体预定时间段内进行交易的次数,分别为不同的交易主体确定大小不同的存储空间(包括用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间,以及用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间)。

在上述可选的实现方式中的一些应用场景下,在接收到针对上述双向链表中的节点元素指示的数据的操作请求的情况下,上述执行主体还可以通过硬件描述语言设计的电路,对上述双向链表进行上述操作请求指示的操作。

其中,上述硬件描述语言可以是vhdl或veriloghdl。

实践中,可以首先对设计好的硬件描述语言进行编译和仿真,通过之后,将其转换成电路图。从而利用转换得到的电路图对应的电路,对上述双向链表进行上述操作请求指示的操作。

可以理解,相对于采用软件描述语言,通过cpu对内部寄存器进行操作,上述可选的实现方式可以通过对可编程器件内部逻辑资源进行组合,实现其内部电路的数据查询功能,这样可以使得存储空间的资源开销可控,并且可以提高数据查询的速度、降低数据查询功耗。

继续参见图3,图3是根据本实施例的数据存储方法的应用场景的一个示意图。在图3的应用场景中,服务器310(即上述数据存储方法的执行主体)可以首先获取待存储数据301。然后,服务器310可以将上述待存储数据301作为双向链表中的节点元素的数据域,存储至fpga的片外ddr312中,以及将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址302作为上述节点元素的指针域,存储至上述fpga的片上ram311中。

本公开的上述实施例提供的方法,通过获取待存储数据,之后,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中,以及将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。这样,通过采用双向链表的形式,采用fpga的片外ddr来存储待存储数据的数据域,并采用fpga的片上ram来存储待存储数据的指针域,从而提高了采用fpga进行数据存储的效率,节省了采用fpga进行数据存储的存储空间。

进一步参考图4,其示出了数据存储方法的又一个实施例的流程400。该数据存储方法的流程400,包括以下步骤:

步骤401,获取待存储数据。

在本实施例中,数据存储方法的执行主体(例如图1所示的服务端)可以通过有线连接方式或者无线连接方式,从其他电子设备或者本地,来获取待存储数据。

其中,待存储数据,可以是各种待对其进行存储的数据。作为示例,待存储数据可以包括但不限于:用户操作数据、用户交易数据等等。在待存储数据为用户交易数据的情况下,待存储数据可以包括:用户买入价格、用户卖出价格、用户买入数量、用户卖出数量等等。

步骤402,通过硬件描述语言设计的电路,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

在本实施例中,上述执行主体可以通过硬件描述语言设计的电路,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

其中,上述硬件描述语言可以是vhdl(very-high-speedintegratedcircuithardwaredescriptionlanguage,超高速集成电路硬件描述语言)或veriloghdl。

步骤403,通过上述硬件描述语言设计的电路,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

在本实施例中,上述执行主体可以通过上述硬件描述语言设计的电路,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

其中,fpga的片上ram,也即fpga内嵌的块ram,可以将其灵活地配置成单端口ram、双端口ram、伪双端口ram等常用存储结构。

需要说明的是,上述执行主体可以先执行上述步骤402,再执行步骤403;也可以先执行步骤403,再执行步骤402;还可以同时执行步骤402和步骤403,在此不作限定。

在本实施例中,上述步骤401-步骤403的具体执行方式,可以参考上述图2对应的实施例的相关描述,在此不再赘述。此外,除上面所记载的内容外,本公开的实施例还可以包括与图2对应的实施例相同或类似的特征、效果,在此不再赘述。

作为一种应用场景,本实施例中的数据存储方法可以应用于股票交易柜台系统中。

具体而言,在上述应用场景中,可以将用户所交易的股票的价格档位信息作为待存储数据。其中,每一条价格档位信息由交易价格(例如个股价格)和交易数量(例如股票的交易数量)两个部分组成,存储空间的大小可以为8字节(byte)。单个用户针对单只股票的交易历史数据,采用双向链表的方式实现,每一条链表存储了该用户单只股票的所有价格档位信息。每一条链表由若干个节点元素组成,单个节点元素大小可以为4kb(kilobyte,千字节),用于存储16字节的节点元素管理信息(即指针域指示的数据)和510个(4080b)档位信息(即数据域指示的数据)。节点元素管理信息由当前节点元素的前驱节点元素的地址、后继节点元素的地址和当前有效档位数量三部分组成,每个部分可以占用4字节的存储空间。此外,剩余的4字节的存储空间可以作为预留的存储空间,以实现数据存储的对齐。

档位总表的存储采用ddr实现,同时,还需要片上ram来存储每只个股的链表信息。

其中,档位总表中包含档位信息。作为示例,ddr资源占用和地址分配情况可以如下表1所示,单个用户买单卖单各分配256m空间,包括65536个节点元素。这里,以2048只个股满额计算,每只个股可以存储16320个档位信息。

表1:

档位信息表的ddr映射规则可以如下表2所示,根据系统地址分配,回报单缓存占据512mb(兆字节)至8gb(吉字节)区段地址空间。

表2:

片上ram用于存储每条双向链表的管理信息,包括链表的首地址和末地址,其中末地址是指节点元素当前写入的最后一条档位信息的地址。ram资源占用情况如下表3所示。

表3:

在进行待存储数据的数据存储过程中,可以首先从交易信息(例如委托单和回报单信息)中,提取待存储数据(例如买入价格、卖出价格、买入数量、卖出数量等),之后,更新ddr存储的档位总表(即数据域知识的数据)和ram存储的节点元素信息(即指针域指示的数据)。链表操作可以包括节点元素创建、添加、刷新和删除四种操作。作为示例,链表操作的总体设计示意图可以如图5所示。

从图4中可以看出,本实施例中的数据存储方法的流程400将硬件描述语言应用到基于fpga的数据处理系统中,结合fpga设计特点,采用片上ram存储指针域指示的数据(例如上述管理信息表),便于在存储、查询和更新等操作中获取链表首地址和当前地址;采用ddr存储数据域指示的数据(例如上述档位信息表),节点元素的大小与ddr读操作最大burst(突发)一致,实现数据读取高效性。例如,在上述应用场景中,整个设计扬长避短,实现了在8gb内存容量内15个用户30720只股票数上一条股票档位信息的存储管理。在需要支持15个用户,并且,单个用户最多交易2048支个股的买单卖单档位信息的情况下,可以对用户的买单卖单档位信息进行分类存储。每一条链表存储了该用户单只股票的所有价格档位信息。后续在查询单个用户单只股票档位信息时,仅需要按节点元素地址读出相应存储信息即可。由此,解决了用户每只个股档位数量的不确定性的问题,提高了内存的利用率。由此,可以最大化利用有限的存储空间,并且可以更快获取已存储的数据信息。

进一步参考图6,作为对上述各图所示方法的实现,本公开提供了一种数据存储装置的一个实施例,该装置实施例与图2-5所示的方法实施例相对应,除下面所记载的特征外,该装置实施例还可以包括与图2-5所示的方法实施例相同或相应的特征,以及产生与图2-5所示的方法实施例相同或相应的效果。该装置具体可以应用于各种电子设备中。

如图6所示,本实施例的数据存储装置600。上述装置600包括:获取单元601、第一存储单元602和第二存储单元603。其中,获取单元601,被配置成获取待存储数据;第一存储单元602,被配置成将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中;第二存储单元603,被配置成将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

在本实施例中,数据存储装置600的获取单元601可以获取待存储数据。

在本实施例中,第一存储单元602可以将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

在本实施例中,第二存储单元603可以将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

在本实施例中,上述第一存储单元602包括:

第一存储子单元(图中未示出),被配置成通过硬件描述语言设计的电路,将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中;以及

上述第二存储单元603包括:

第二存储子单元(图中未示出),被配置成通过上述硬件描述语言设计的电路,将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

在本实施例的一些可选的实现方式中,上述装置600还包括:

第一确定单元(图中未示出),被配置成确定上述待存储数据所属的数据类别;

第二确定单元(图中未示出),被配置成将与上述数据类别相对应的双向链表,确定为目标双向链表;

上述第一存储单元602包括:

第三存储子单元(图中未示出),被配置成基于上述数据类别,将上述待存储数据作为上述目标双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

在本实施例的一些可选的实现方式中,上述待存储数据经由交易主体在交易过程中针对交易对象进行交易而生成;以及

上述第一确定单元包括:

第一确定子单元(图中未示出),被配置成基于上述交易主体和上述交易对象,确定上述待存储数据所属的数据类别。

在本实施例的一些可选的实现方式中,不同上述交易主体或者不同上述交易对象对应不同数据类别,不同数据类别对应不同双向链表。

在本实施例的一些可选的实现方式中,上述第一存储单元602包括:

第四存储子单元,被配置成将上述待存储数据中包含的上述交易主体进行交易的交易价格和交易数量,作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中。

在本实施例的一些可选的实现方式中,上述ram还用于存储上述双向链表的首地址和末地址,其中,上述末地址表征最近存储的交易信息的地址,上述交易信息包括交易价格和交易数量。

在本实施例的一些可选的实现方式中,用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小和用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,分别是预先确定的。

在本实施例的一些可选的实现方式中,上述用于存储上述双向链表中的单个节点元素的数据域的ddr的存储空间的大小和用于存储上述双向链表中的单个节点元素的指针域的ram的存储空间的大小,基于交易主体数量、交易对象数量、上述fpga的片外ddr的总存储空间大小和上述fpga的片上ram的总存储空间大小分别确定。

在本实施例的一些可选的实现方式中,上述装置600还包括:

执行单元(图中未示出),被配置成在接收到针对上述双向链表中的节点元素指示的数据的操作请求的情况下,通过硬件描述语言设计的电路,对上述双向链表执行上述操作请求指示的操作。

本公开的上述实施例提供的装置600中,获取单元601可以获取待存储数据,之后,第一存储单元602可以将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中,以及第二存储单元603可以将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。这样,通过采用双向链表的形式,采用fpga的片外ddr来存储待存储数据的数据域,并采用fpga的片上ram来存储待存储数据的指针域,从而提高了采用fpga进行数据存储的效率,节省了采用fpga进行数据存储的存储空间。

图7为本公开实施例提供的一种电子设备的结构示意图,图7所示的电子设备700包括:至少一个处理器701、存储器702和至少一个网络接口704和其他用户接口703。电子设备700中的各个组件通过总线系统705耦合在一起。可理解,总线系统705用于实现这些组件之间的连接通信。总线系统705除包括数据总线之外,还包括电源总线、控制总线和状态信号总线。但是为了清楚说明起见,在图7中将各种总线都标为总线系统705。

其中,用户接口703可以包括显示器、键盘或者点击设备(例如,鼠标,轨迹球(trackball)、触感板或者触摸屏等。

可以理解,本公开实施例中的存储器702可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。其中,非易失性存储器可以是只读存储器(read-onlymemory,rom)、可编程只读存储器(programmablerom,prom)、可擦除可编程只读存储器(erasableprom,eprom)、电可擦除可编程只读存储器(electricallyeprom,eeprom)或闪存。易失性存储器可以是随机存取存储器(randomaccessmemory,ram),其用作外部高速缓存。通过示例性但不是限制性说明,许多形式的ram可用,例如静态随机存取存储器(staticram,sram)、动态随机存取存储器(dynamicram,dram)、同步动态随机存取存储器(synchronousdram,sdram)、双倍数据速率同步动态随机存取存储器(doubledataratesdram,ddrsdram)、增强型同步动态随机存取存储器(enhancedsdram,esdram)、同步连接动态随机存取存储器(synchlinkdram,sldram)和直接内存总线随机存取存储器(directrambusram,drram)。本文描述的存储器702旨在包括但不限于这些和任意其它适合类型的存储器。

在一些实施方式中,存储器702存储了如下的元素,可执行单元或者数据结构,或者他们的子集,或者他们的扩展集:操作系统6021和应用程序7022。

其中,操作系统7021,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础业务以及处理基于硬件的任务。应用程序7022,包含各种应用程序,例如媒体播放器(mediaplayer)、浏览器(browser)等,用于实现各种应用业务。实现本公开实施例方法的程序可以包含在应用程序7022中。

在本公开实施例中,通过调用存储器702存储的程序或指令,具体的,可以是应用程序7022中存储的程序或指令,处理器701用于执行各方法实施例所提供的方法步骤,例如包括:获取待存储数据;将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中;将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

上述本公开实施例揭示的方法可以应用于处理器701中,或者由处理器701实现。处理器701可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器701中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器701可以是通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(fieldprogrammablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本公开实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本公开实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件单元组合执行完成。软件单元可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器702,处理器701读取存储器702中的信息,结合其硬件完成上述方法的步骤。

可以理解的是,本文描述的这些实施例可以用硬件、软件、固件、中间件、微码或其组合来实现。对于硬件实现,处理单元可以实现在一个或多个专用集成电路(applicationspecificintegratedcircuits,asic)、数字信号处理器(digitalsignalprocessing,dsp)、数字信号处理设备(dspdevice,dspd)、可编程逻辑设备(programmablelogicdevice,pld)、现场可编程门阵列(field-programmablegatearray,fpga)、通用处理器、控制器、微控制器、微处理器、用于执行本申请所述功能的其它电子单元或其组合中。

对于软件实现,可通过执行本文所述功能的单元来实现本文所述的技术。软件代码可存储在存储器中并通过处理器执行。存储器可以在处理器中或在处理器外部实现。

本实施例提供的电子设备可以是如图7中所示的电子设备,可执行如图2-5中数据存储方法的所有步骤,进而实现图2-5所示数据存储方法的技术效果,具体请参照图2-5相关描述,为简洁描述,在此不作赘述。

本公开实施例还提供了一种存储介质(计算机可读存储介质)。这里的存储介质存储有一个或者多个程序。其中,存储介质可以包括易失性存储器,例如随机存取存储器;存储器也可以包括非易失性存储器,例如只读存储器、快闪存储器、硬盘或固态硬盘;存储器还可以包括上述种类的存储器的组合。

当存储介质中一个或者多个程序可被一个或者多个处理器执行,以实现上述在电子设备侧执行的数据存储方法。

所述处理器用于执行存储器中存储的数据存储程序,以实现以下在电子设备侧执行的数据存储方法的步骤:

获取待存储数据;将上述待存储数据作为双向链表中的节点元素的数据域,存储至线上可编程门阵列fpga的片外双倍速率同步动态随机存储器ddr中;将上述节点元素的前驱节点元素的地址和上述节点元素的后继节点元素的地址作为上述节点元素的指针域,存储至上述fpga的片上随机存取存储器ram中。

专业人员应该还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本公开的范围。

结合本文中所公开的实施例描述的方法或算法的步骤可以用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(ram)、内存、只读存储器(rom)、电可编程rom、电可擦除可编程rom、寄存器、硬盘、可移动磁盘、cd-rom、或技术领域内所公知的任意其它形式的存储介质中。

以上所述的具体实施方式,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施方式而已,并不用于限定本公开的保护范围,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1