CN112100170A - 数据库交互数据解码方法和装置 - Google Patents
数据库交互数据解码方法和装置 Download PDFInfo
- Publication number
- CN112100170A CN112100170A CN202010777198.XA CN202010777198A CN112100170A CN 112100170 A CN112100170 A CN 112100170A CN 202010777198 A CN202010777198 A CN 202010777198A CN 112100170 A CN112100170 A CN 112100170A
- Authority
- CN
- China
- Prior art keywords
- data
- packet
- packet header
- information
- small
- 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.)
- Granted
Links
Images
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/2291—User-Defined Types; 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/24—Querying
- G06F16/245—Query processing
- G06F16/24569—Query processing with adaptation to specific hardware, e.g. adapted for using GPUs or SSDs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computational Linguistics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种数据库交互数据解码方法和装置,该方法包括:从初始地址开始从存储单元顺序读取大包头数据,基于读取的大包头数据来解析出大包头信息;从所述存储单元按地址顺序读取中包头数据,基于读取的中包头数据来解析出中包头信息;从所述存储单元按地址顺序读取小包头数据,基于读取的小包头数据来解析出小包头信息;基于解析出的当前中包的中包ID信息,向控制模块请求解码配置信息,并在请求的解码配置信息与所述小包数据长度信息相匹配的情况下,从所述存储单元读取小包中的数据本体并进行解析。
Description
技术领域
本发明涉及数据解码技术领域,尤其涉及一种数据库交互数据解码方法和装置。
背景技术
随着数据量的增加,数据库访问延时越来越大,许多曾经在小数据上用传统方法很容易完成的任务,如今在大数据上就变得非常困难。目前最快的固态硬盘(SSD)存储可以达到12GB/s的读取速度,但即便这样的速度,如果数据库有15TB大小,想要用完整检索的方式完成一次查询仍然需要33小时。为了加快数据库查询速度,大都采用设计数据库专用处理器的方法来提高性能。
数据库专用加速器是一种数据库专用处理器,在应用过程中,数据库专用加速器通常作为现在服务器(CPU)的协处理器角色出现。数据库专用处理器与CPU之间需要进行频繁的数据交互,在很多情况下数据交互性能成为整个CPU-数据库处理器系统的性能的关键。
在传统数据库系统中,各数据库管理系统都运行在CPU中,各数据库管理系统都有各自独立的内部数据存储结构,如B+树。同时,多数数据库管理系统为了节省存储空间,通常对数据压缩后进行存储。另外,在装有数据库专用处理器的数据库管理系统中,数据管理工作仍由运行在CPU上软件数据管理系统来负责,即数据主要存储在CPU端的主存DRAM中。而数据处理交由专用加速器实现,这就导致了CPU和加速器之间频繁的数据交换,同时两者之间数据格式不同在交换时需要实时转换。
数据库加速器在业界来说尚属新生事物,尚未形成标准的数据交互格式,为了尽可能优化CPU与数据库专用处理器之间数据交互性能,降低CPU端和加速器端数据转换延时,需要探寻一种高效的数据交互格式。
发明内容
有鉴于此,本发明实施例提供了一种数据库交互数据解码方法和装置,通过一种新的数据结构的数据解码方式和装置,来进一步提升CPU与数据库专用处理器之间数据交互性能。
本发明的一个方面,提供了一种数据库交互数据解码方法,该方法包括大包头解析步骤和中包解析步骤,所述中包解析步骤包括中包头解析步骤和小包解析步骤,所述小包解析步骤包括小包头解析步骤和小包数据解析步骤;其中,
在所述大包头解析步骤中,从初始地址开始从存储单元顺序读取大包头数据,基于读取的大包头数据来解析出大包头信息,其中,所述大包头信息包括大包中的中包数量信息和大包数据量信息;
在所述中包头解析步骤中,从所述存储单元按地址顺序读取中包头数据,基于读取的中包头数据来解析出中包头信息,所述中包头信息包括当前中包中的小包数量信息、中包数据量信息和中包ID信息;
在所述小包头解析步骤中,从所述存储单元按地址顺序读取小包头数据,基于读取的小包头数据来解析出小包头信息,所述小包头信息包括小包数据长度信息;
在所述小包数据本体解析步骤中,基于解析出的当前中包的中包ID信息,向控制模块请求解码配置信息,并在请求的解码配置信息符合解析要求的情况下,从所述存储单元读取小包中的数据本体并进行解析。
可选的,所述方法还包括:在所述大包头解析步骤之前,设置从所述存储模块读取大包头数据的初始地址。
可选地,所述大包头解析步骤包括:由解码模块向取数据模块发送读取第一长度数据的请求,从所述取数据模块接收读取的数据并放入大包头的多个数据对应的多个寄存器,并解析寄存器中的数据,其中所述第一长度为大包头的长度;
所述中包头解析步骤包括:由解码模块向所述取数据模块发送读取第二长度数据的请求,从所述取数据模块接收读取的数据并放入中包头的多个数据对应的多个寄存器,并解析寄存器中的数据,其中所述第二长度为中包头的长度;
所述小包头解析步骤包括:由解码模块向所述取数据模块发送读取第三长度数据的请求,从所述取数据模块接收读取的数据并放入小包头数据对应的寄存器,并解析寄存器中的数据,其中所述第三长度为小包头的长度;
所述从所述存储单元读取各个小包中的数据本体并进行解析,包括:由解码模块向取数据模块发送与解析出的当前小包头中的数据本体数量对应的数据请求,从所述取数据模块接收读取的数据后传输给下级接收端。
可选地,所述方法还包括:第一确定步骤,在所述解码模块解析完一个小包后,根据中包头信息以及当前解析状态确定是否解析完中包内的所有数据,在确定未解析完中包内的所有小包的情况下,继续执行所述小包解析步骤;
第二确定步骤,在所述解码模块解析完一个中包后,根据大包头信息以及当前解析状态确定是否解析完大包内的所有数据,在确定未解析完中包内的所有数据的情况下,继续执行所述中包解析步骤。
可选地,在所述解码模块解析完一个小包后,控制所述多个寄存器中暂存中包头中小包数量信息的小包数量寄存器的值减1,并继续执行小包解析步骤,直至该小包数量寄存器的值为0;在所述解码模块解析完一个中包后,控制所述多个寄存器中暂存大包头中中包数量信息的中包数量寄存器的值减1,并继续执行中包解析步骤,直至该中包数量寄存器的值为0。
可选地,所述方法还包括在所述解码模块解析完一个小包后,向下级接收端发送小包末尾标志有效信号;
在在所述解码模块解析完一个中包(如小包数量寄存器的值为0)的情况下,向下级接收端发送中包末尾标志有效信号;
在在所述解码模块解析完一个大包(如中包数量寄存器的值为0)的情况下,向下级接收端发送大包末尾标志有效信号。
本发明的另一方面,还提供了一种数据库交互数据解码装置,该装置包括:
该装置包括:取数据模块、解码模块和控制模块;
所述取数据模块用于基于确定的初始读取地址按照地址顺序从存储模块读取数据;
所述解码模块用于执行大包头解析步骤和中包解析步骤,其中,所述中包解析步骤包括中包头解析步骤和小包解析步骤,所述小包解析步骤包括小包头解析步骤和小包数据解析步骤;其中,
在所述大包头解析步骤中,控制所述取数据模块读取大包头数据,基于接收的大包头数据来解析出大包头信息,所述大包头信息包括大包中的中包数量信息和大包数据量信息;
在所述中包头解析步骤中,控制所述取数据模块读取中包头数据,基于接收的中包头数据来解析出中包头信息,所述中包头信息包括当前中包中的小包数量信息、中包数据量信息和中包ID信息;
在所述小包头解析步骤中,控制所述取数据模块读取小包头数据,基于接收的小包头数据来解析出小包头信息,所述小包头信息包括小包数据长度信息;
在所述小包数据本体解析步骤中,基于解析出的当前中包的中包ID信息,向所述控制模块请求解码配置信息,并在请求的解码配置信息与所述小包数据长度信息相匹配的情况下,从所述存储单元读取小包中的数据本体并进行解析;
所述控制模块用于基于所述解码模块的请求向所述解码模块提供解码配置信息。
本发明实施例提供的数据库交互数据解码方法和装置,能够优化CPU与数据库专用处理器之间数据交互性能,降低数据传输延时。
本发明的附加优点、目的,以及特征将在下面的描述中将部分地加以阐述,且将对于本领域普通技术人员在研究下文后部分地变得明显,或者可以根据本发明的实践而获知。本发明的目的和其它优点可以通过在书面说明及其权利要求书以及附图中具体指出的结构实现到并获得。
本领域技术人员将会理解的是,能够用本发明实现的目的和优点不限于以上具体所述,并且根据以下详细说明将更清楚地理解本发明能够实现的上述和其他目的。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,并不构成对本发明的限定。
图1为本发明一实施例中交互数据格式的示意图。
图2为本发明一实施例中数据库交互数据解码装置的结构示意图。
图3为本发明一实施例中数据库交互数据解码方法的流程示意图。
图4为本发明另一实施例中数据库交互数据解码方法的示例图。
具体实施方式
为了使本申请的目的、技术方案和优点更加清楚,下面结合附图对本申请作进一步地详细描述,显然,所描述的实施例仅仅是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在此,还需要说明的是,为了避免因不必要的细节而模糊了本发明,在附图中仅仅示出了与根据本发明的方案密切相关的结构和/或处理步骤,而省略了与本发明关系不大的其他细节。
应该强调,术语“包括/包含”在本文使用时指特征、要素、步骤或组件的存在,但并不排除一个或更多个其它特征、要素、步骤或组件的存在或附加。
针对现有技术中存在的数据库查询时间长的问题,本发明实施例提供了一种新的交互数据结构,并进一步提出了适用于这种交互数据结构的硬件数据解码方法和装置。
在本发明实施例提供的交互数据结构中,数据以一个一个“大包”的形式存放,数据的存储方式例如可以存放入8位宽的RAM,按照地址顺序存放。
大包的格式及其排列规则如图1所示。图1中包含许多个数据,该图中全部的数据整体表示一个“大包”,每个“大包”里面有多个“中包”,每一个“中包”有多个“小包”。下面具体说明各个数据构成。
(1)大包:
大包中第一个数据“TotalColNum”(长度为4字节)表示有多少个中包,第二个数据“TotalLengthofBytes”(长度为4字节)表示该大包中总共有多少字节数据,所有的包头信息和数据都统计在内;第三个数据“CurrWriteOffset”(长度为4字节)、第四个数据“CurrReadOffset”(长度为4字节)以及大包的末尾最后四个数据Col(0,1,2,3)Offset,作为数据偏移,功能设定暂未实现,可暂时预留位置待拓展。本发明实施例中,在大包头部的第一个数据至第四个数据可简称为“大包头”。
为了便于表述,大包头中放置第一个数据“TotalColNum”和第二个数据“TotalLengthofBytes”的位置可以分别称为中包数量信息位和大包数据量信息位,放置第三个数据CurrWriteOffset和第四个数据CurrReadOffset的位置可分别称为当前写入偏移和当前读取偏移信息位。大包尾部的四个数据Col(0)Offset、Col(1)Offset、Col(2)Offset、Col(3)Offset对应的放置位置可称为列偏移信息位。
(2))中包:
中包中的第一个数据“TotalRowNum”(长度为4字节)表示有多少个小包;第二个数据“LengthofBytes”(长度为4字节)表示该中包中总共有多少字节数,该中包中所有包头(如TotalRowNum,LengthofBytes,Type,ID)数据的字节数同样的统计在内;中包中的第三个数据“Type”(长度为4字节)表示中包的数据包种类,用于外部辨别类型;第四个数据“ID”(长度为4字节)表示该中包的编号,可用于外部操作查找。一个中包的这前四个数据简称“中包头”。之后的数据就是连续的小包。到最后一个小包的最后一个数据结束,为一个完整的中包。
为了便于表述,中包头中放置第一个数据“TotalRowNum”和第二个数据“LengthofBytes”的位置可以分别称为小包数量信息位和中包数据量信息位,放置第三个数据“Type”和第四个数据“ID”的位置可分别称为数据包类型信息位和中包ID信息位。
(3)小包:
小包的第一个数据“Length”是一个4个字节(32位)的长度数据,表示该小包内有多少个数据(一个数据占用8位,即一个字节),随后跟随连续的多个数据。小包的一个数据Length简称“小包头”,小包头中放置数据“Length”的位置可以称为数据本体数量信息位。
如下表1~表3示出了上述数据结构(大包)在存储模块(如RAM)中的存储示意,其中,表1、表2、表3分别是大包头、中包头和小包(包括小包头)的示例。注意在这里大包的第一个字节地址是0,该字节地址仅为示例,只是一个个例情况。随后的许多大包的第一个字节不会是0地址,将处在中间状态。
表1.大包头在RAM中的存储示意
address | data |
0 | TotalColNum(最高字节) |
1 | TotalColNum(次高字节) |
2 | TotalColNum(次低字节) |
3 | TotalColNum(最低字节) |
4 | TotalLengthofBytes(最高字节) |
5 | TotalLengthofBytes(次高字节) |
6 | TotalLengthofBytes(次低字节) |
7 | TotalLengthofBytes(最低字节) |
8 | CurrWriteOffset(最高字节) |
9 | CurrWriteOffset(次高字节) |
10 | CurrWriteOffset(次低字节) |
11 | CurrWriteOffset(量低字节) |
12 | CurrReadOffset(最高字节) |
13 | CurrReadOffset(次高字节) |
14 | CurrReadOffset(次低字节) |
15 | CurrReadOffset(量低字节) |
如表1所示,大包头中的各个信息位长度均为4个字节,大包头占用了RAM中的存储地址0~15。
表2.中包头在RAM中的存储示意
address | data |
16 | TotalRowNum(量高字节) |
17 | TotalRowNum(次高字节) |
18 | TotalRowNum(次低字节) |
19 | TotalRowNum(最低字节) |
20 | LengthofBytes(量高字节) |
21 | LengthofBytes(次高字节) |
22 | LengthofBytes(次低字节) |
23 | LengthofBytes(最低字节) |
24 | Type(最高字节) |
25 | Type(次高字节) |
26 | Type(次低字节) |
27 | Type(量低字节) |
28 | ID(最高字节) |
29 | ID(次高字节) |
30 | ID(次低字节) |
31 | ID(最低字节) |
如表2所示,中包头中的各个信息位长度均为4个字节,中包头占用了RAM中的存储地址16~31。
表3.小包在RAM中的存储示意
address | data |
32 | Length(最高字节) |
33 | Length(次高字节) |
34 | Length(次低字节) |
35 | Length(最低字节) |
36 | data1 |
37 | data2 |
38 | data3 |
39 | data4 |
40 | data5 |
41 | data6 |
42 | data7 |
43 | data8 |
44 | . |
45 | . |
46 | . |
47 | . |
如表3所示,小包头的信息位长度为4个字节,占用了RAM中的存储地址32~35;小包的数据本体占用了RAM中的存储地址36及其后面的位置,具体小包的数据本体占用的存储地址多少依数据本体的数量而定。
总的来说,一个数据包(大包)包含了一些整体存储信息,包含在大包头,中包头,小包头;此外还包含数据本体,分布在各个小包内。
在本发明一些实施例中,大包中的中包的数量不仅可以是多个,也可以是一个;各中包中包括的小包数可以是一个,也可以是多个;各小包中包括的数据本体数量可以是一个,也可以是多个。
在本发明另一些实施方式中,大包头中预留的待扩展的位置也可以基于具体应用省略。此外,在本发明实施例中,大包头、中包头和小包头中不排除还含有其他信息位。
此外,图1中示出的大包头、中包头和小包头中各个信息位的长度(4个字节)仅为示例,但并不限于4个字节,且各个信息位的长度可以相同,也可以不同。
总体来说,基于本发明实施例提供的大包的交互数据结构包括:大包头和至少一个中包,各中包包括中包头和至少一个小包,各小包包括小包头和至少一个数据本体;大包头至少包括中包数量信息位和大包数据量信息位,中包头至少包括小包数量信息位和中包数据量信息位,小包头至少包括数据本体数量信息位。
针对如上交互数据结构,本发明提供了一种对该交互数据结构进行解码的数据库交互数据解码方法和装置。该解码方法结合控制模块的配置数据进行解码。
图2所示为本发明一实施例中交互数据解码装置的结构示意图。图2中,该装置可包括:解码模块100、控制模块200和取数据模块300。经编码的数据存放在存储模块(如RAM模块,简称RAM)400内,解码模块100可控制取数据模块300从RAM读取数据,每取出一个数据,取数据模块的取数据的地址内部自动加1。取数据模块300将读取的数据传送给解码模块100,由解码模块进行解码。控制模块200用于向解码模块提供配置信息,该配置信息可以是由控制模块进行配置,也可以由外部配置模块进行配置。
在解码开始时,可首先外部设定(例如由外部配置模块)取数据的起始地址,该起始地址为一个大包的首字节地址,从此地址开始解码,由解码模块通过控制取数据模块进行数据的读取。取数据模块每取出一定数据后,解码模块可控制取数据模块暂停数据的读取,预留一定的时间进行处理和解析已经取好的数据;期间会请求控制模块的配置信息,并结合控制模块的配置信息,进行违规检查,满足规则(即通过违规检查)的情况下进行小包中数据本体的解码,不满足规则的情况下重新请求配置信息。解码模块将解析的数据输出给下级接收端,并在一些特殊位置数据进行相应标志的信号输出,这些数据包括小包的末尾,中包的末尾,大包的末尾数。
图3所示为本发明实施例的解码装置实现的对交互数据编码方法的流程图。如图3所示,该方法包括如下步骤:
步骤S310,设定从存储模块中取数据的初始地址,即解码初始地址。
根据对前述的编码结构解码规则,该初始地址为一个大包的第一个字节的地址。
可外部设定从存储模块中取数据的初始地址,例如,可以由外部配置模块来为取数据模块设定从存储模块中取数据的初始地址。
设定解码初始地址后,解码模块内部寄存器全部复位以准备开始解码。
步骤S320,大包头解析步骤,基于设定的初始地址从RAM中取出大包头长度对应的大包头数据,基于取出的大包头数据。
本步骤中,由解码模块向取数据模块发送读取第一长度数据的请求,以由取数据模块读取该第一长度的数据。基于解码规则,该第一长度为大包头的长度,如16字节。解码模块接收到取数据模块读取的多个数据后,将其放入对应的多个寄存器,并解析寄存器中的数据。在一个实施例中,针对大包头的4个信息位的数据(如“TotalColNum”、“TotalLengthofBytes”、“CurrWriteOffset”和“CurrReadOffset”)可以分别暂存到对应的4个内部寄存器,这四个寄存器可分别称为中包数量寄存器、大包数据量寄存器、第一预留数据寄存器和第二预留数据寄存器。优选地,这些寄存器为32位寄存器。在本发明另一些实施例中,由于“CurrWriteOffset”和“CurrReadOffset”为预留位置,也可以省略第一预留数据寄存器和第二预留数据寄存器。
作为示例,解码开始时,解码模块向取数据模块发送取16个字节数据请求,同时开始接收数据,将接收的数据根据先后顺序,放入预先设定的大包头数据对应的4个寄存器。接收完毕16个字节数据后,可进入下一个操作,即解析中包头的操作。
步骤S330,中包头解析步骤:从存储单元(RAM)按地址顺序读取中包头数据,基于读取的中包头数据来解析出中包头信息。
如前所述,中包头信息包括当前中包中的小包数量信息、中包数据量信息和中包ID信息。此外,还可以有中包类型信息。
本步骤中,由解码模块向取数据模块发送读取第二长度数据的请求,从取数据模块接收读取的该第二长度的数据。该第二长度为中包头的长度,如16字节。解码模块接收到取数据模块读取的中包头的多个数据后,将其放入中包头的多个数据对应的多个寄存器,并解析寄存器中的数据。在一个实施例中,针对中包头的4个信息位的数据(如“TotalRowNum”、“LengthofBytes”、“Type”和“ID”)可以分别暂存到对应的4个内部寄存器,这四个内部寄存器也分别称为小包数量寄存器、中包数据量寄存器、中包类型寄存器和中包ID寄存器。
作为示例,解码模块向取数据模块发送取16个字节数据请求,同时开始接收数据,将接收的数据根据先后顺序,放入预先设定的中包头数据对应的4个寄存器。解析中包头的操作过程类似解析大包头,区别在于数据暂存的寄存器不同。
接收完毕16个字节数据后,可进入下一个操作,即解析小包头的操作。
步骤S340,小包头解析步骤:从所述存储单元按地址顺序读取小包头数据,基于读取的小包头数据来解析出小包头信息。
本步骤中,由解码模块向取数据模块发送读取第三长度数据的请求,从取数据模块接收读取的数据并放入小包头的数据对应的寄存器,并解析寄存器中的数据。该第三长度为小包头长度,如4个字节。小包头部的数据为小包长度数据,因此对应的该寄存器不妨称为小包长度寄存器。
作为示例,本步骤中,解码模块向取数据模块发送取4个字节数据请求,同时开始接收数据,将数据根据先后顺序,放入预先设定好的小包长度寄存器内,并开始解析。
接收完毕4个字节的小包头数据后,可进入下一步进一步向控制模块请求配置信息。
步骤S350,小包数据本体解析步骤:基于从中包头解析出的当前中包的中包ID信息,向控制模块请求解码配置信息,并在请求的解码配置信息与小包长度信息相匹配的情况下,从存储单元读取小包中的数据本体并进行解析。
本步骤包括:向控制模块请求配置信息、等待配置信息、判断配置信息是否符合解析要求和解析一整个小包数据的过程。其中:
向控制模块请求配置信息的过程包括:解码模块向控制模块发送携带中包ID的配置请求信号。控制模块根据配置请求信号,向解码模块发送配置信息。
等待配置信息:解码模块等待控制模块发送的配置有效信号跟配置信息,当接收完配置信息后,进入判断“判断配置信息是否符合解析要求”状态。
判断配置信息是否符合解析要求:配置信息将附带一个长度信息,解码模块根据配置信息与解析完的小包头中的小包长度数据,判断配置信息中的长度是否符合完整的解析一个小包的要求。如果满足,则解析一整个小包数据;否则项开支模块反馈配置信息违规,并重新等待配置信息。
解析一整个小包数据:将数据传输给下一级接收端,同时拉高数据有效信号以便于由下级接收端对数据的采集,解码模块根据记录的小包头信息即长度信息判断取数据模块是否读出一整个小包,并在读出小包的最后一个数据时进行特殊标志输出。
完成一个小包的解析后解码模块根据中包头信息以及当前解析状态,可以推知解析了多少个小包,还剩多少小包,于是可判断出“中包内的小包是否全部解完”。
中包内的小包是否全部解完:若还剩小包未解析完,继续解析下一个小包,进行解析小包头的状态;若中包内的小包全部解完,则输出一个中包末尾标志信号,并进行判断“所有中包是否解完”的状态;中包个数同理根据大包头信息以及当前解析状态,可推知解析了多少中包,还剩多少中包。
所有中包是否解完:判断中包的个数是否全部解完,若解完,输出一个大包末尾结束标志信号(相当于解码结束信号),并退出解码状态,等待下一次初始化;若未解完,进行下一个解析中包头状态。
更具体地,解码模块在解析完一个小包后,控制小包数量寄存器的值减1,并继续执行小包头解析步骤和小包数据本体解析步骤,直至该小包数量寄存器的值为0。
并且,解码模块在解析完一个中包后,控制中包数量寄存器的值减1,并继续执行中包头解析步骤,直至该中包数量寄存器的值为0。
所述解码模块解析完一个小包后,向下级接收端发送小包末尾标志有效信号;
在小包数量寄存器的值为0的情况下,所述解码模块向下级接收端发送中包末尾标志有效信号;
在中包数量寄存器的值为0的情况下,解码模块向下级接收端发送大包末尾标志有效信号。由此完成了大包的解码。
上述可知,在本发明实施例中,解码模块执行的步骤包括大包头解析步骤(如图3中的步骤S320)和中包解析步骤(如步骤S330~步骤S340),其中,中包解析步骤包括中包头解析步骤(步骤S330)和小包解析步骤(如步骤S340~步骤S350),小包解析步骤包括小包头解析步骤S340和小包数据解析步骤S350。
基于本发明实施例的数据库交互数据及其解码方法和解码装置,可以利用定义的交互数据结构和解码方式优化CPU与数据库专用处理器之间数据交互性能,降低数据传输延时。
下面以一个简单的实例说明本发明实施例的交互数据解码方法。假设一个大包的数据如下面表4所示。
表4.大包数据示例:
00 | 00 | 00 | 03 | 00 | 00 | 00 | 8f | ff | ff | ff | ff | ff | ff | ff | ff |
00 | 00 | 00 | 03 | 00 | 00 | 00 | 2e | ff | ff | ff | ff | al | a2 | a3 | a4 |
00 | 00 | 00 | 05 | 11 | 12 | 13 | 14 | 15 | |||||||
00 | 00 | 00 | 06 | 21 | 22 | 23 | 24 | 25 | 26 | ||||||
00 | 00 | 00 | 07 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | |||||
00 | 00 | 00 | 04 | 00 | 00 | 00 | 31 | ff | ff | ff | ff | b1 | b2 | b3 | b4 |
00 | 00 | 00 | 03 | 41 | 42 | 43 | |||||||||
00 | 00 | 00 | 09 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | |||
00 | 00 | 00 | 01 | 61 | |||||||||||
00 | 00 | 00 | 04 | 71 | 72 | 73 | 74 | ||||||||
00 | 00 | 00 | 02 | 00 | 00 | 00 | 20 | ff | ff | ff | ff | c1 | c2 | c3 | c4 |
00 | 00 | 00 | 03 | 81 | 82 | 83 | |||||||||
00 | 00 | 00 | 05 | 91 | 92 | 93 | 94 | 95 | |||||||
上面的表4代表一个完整的大包;数据用16进制表示,一个格子代表一个字节;需要注意的是,空白的格子并没有数据,该表仅是为了方便理解才将数据按照比较规整的方式排出,如前所述,数据是按照地址连续的方式存放在RAM内。
第一个数据存放的地址是0;地址0,1,2,3对应的四个字节构成32位的16进制数00000003H,表示这个大包有3个中包,随后的四个字节数据0000008fH(对应十进制数143),表示该大包有143个字节;以下可以此类推;
通过前述的存储格式,可以知道第一个中包的第一个数据00000003H,所以小包个数是3个,字节数为0000002eH(十进制46),表示该中包总共有46个字节,中包ID为a1a2a3a4H;另外两个中包可以此类推;
第一个中包的第一个小包长度为00000005H(十进制数5),即这个小包包含5个数据,这个五个数据按顺序分别是11H,12H,13H,14H,15H;其他小包以此类推;
其余的数据为FFFFFFFFH的数据为待拓展信息数据位。
参照图4,对其解码流程如下:
步骤1.首先可由外部配置模块设置解码初始地址为大包头第一个字节的存储地址,如上表第一个字节地址为0,那么设置初始地址为0。取数据模块的读出地址每取出一个数据将自动加1。
步骤2.进入解大包头状态。
解码模块发送“取16个字节数据请求”给取数据模块。取数据模块随后便会取出16个字节数据,取完后停止并等待下一次取数据请求。解码模块发送取数据请求后便进入准备接收数据状态,当接收完16个字节数据后,将这些数据顺序的存放在名称与大包头数据名称相应的内部寄存器内,这些寄存器中每个寄存器可设定为32位。第一个寄存器为TotalColNum,即大包个数寄存器,解码模块将前四个字节数据按顺序由高位到地位存放到该寄存器内,即第一个字节数据00H存放在该寄存器的最高8位,第二个字节数据00H存放在该寄存器的次高8位,第三个字节数据00H存放在该寄存器第三个8位空间,第四个字节数据03H存放在该寄存器的最低8位;4个字节完整构成一个数据;内部处理并存放好这16个字节,即4个32位数据到相应寄存器,这四个数据分别是00000003H,0000008f H,ffffffffH,ffffffffH。解码模块将4个数据暂存到相应寄存器后,将执行下一步骤,即进入解中包状态;
步骤3.进入解中包头状态。
该过程与解大包头类似,不同之处在于暂存数据的寄存器不同。解码模块发送“取16个字节数据请求”给取数据模块,并接收取数据模块读取的数据。解码模块接收完16个字节数据(即4个32位数据)后,将这些数据顺序存放在名称与中包头数据名称相应的内部寄存器内,第一个中包头中的4个数据分别为00000003H,0000002eH,ffffffffH,a1a2a3a4H;含义在此不累述。解码单元处理并存放好这些数据后将执行下一步骤,即进入解小包头状态。
步骤4.进入解小包头状态。
解码模块发送“取4个字节数据请求”给取数据模块,取数据模块将取出4个字节数据;解码模块接收完4个字节数据放入Length寄存器,即小包长度寄存器内。解码模块接收完4个字节的小包头数据并存入相应寄存器后,便可执行下一步,即开始请求配置。
步骤5.解码模块向控制模块发送信息配置请求,该请求中可同时携带中包ID信息,即同时通知控制模块,本次配置请求是由ID为a1a2a3a4H的中包发送的。控制模块接收到配置请求后,会为解码模块向解码模块发送配置信息,该配置信息中可包括解析长度信息等。
步骤6.解码模块接着进入等待状态,等接收到配置信息后进行下一步。
步骤7.接收到配置信息后,判断配置信息中给的长度信息是否满足解析一个小包的长度,如果满足,则进入解小包状态,否则向控制模块反馈信息违规并继续请求配置。
步骤8.解小包状态,解码模块发送“取Length个字节数据请求”给取数据模块,此处“Length”即为小包长度。取数据模块随后将取出Length个字节数据,即一个完整的小包。解码模块接到这些数据之后,将这些数据传送给下级接收端,同时拉高数据有效位标志,当解码模块向下级接收端发送最后一个字节数据时,拉高一个数据周期的小包末尾标志有效信号,该末尾标志有效信号将伴随小包最后一个字节数据拉高,从而被传送到下级接收端。
步骤9.解码模块解析完一个小包后,内部小包数量寄存器数值减1,并进行判断该寄存器数值是否为0,即是否解析完了全部小包,若数值不为0,则回到步骤4,继续解析小包头;若数值为0,在该小包末尾标志有效信号将额外加上一个中包末尾标志有效信号,传递给下级接收端,并进入步骤10;
步骤10:解码模块已经解析了一个中包内全部小包,即解析完了一个中包之后,对应的内部中包数量寄存器数值减1,并进行判断该寄存器数值是否为0,即是否解析完了全部中包,若数值不为0,则跳转至步骤3,继续解析中包头;若数值为0,在该小包(中包)末尾标志有效信号将额外加上一个大包末尾标志有效信号,即解码结束标志信号,传递给下级接收端,并退出解码工作状态由此解码结束。解码完成后得到的“大包末尾数据”即最后一个中包内最后一个小包的最后一个字节数据。
本发明实施例提供了如上的解码过程,采用可以表达任意数据表格的数据结构,在数据表达方面可以随意增删数据列和数据行,并且每个数据单元的长度可变,通过小包长度进行存储。在加速器端,此种数据格式可以支持高效流水线的实现方式,如上述本装置实现方案,可以高效的对整个数据包进行解码。在CPU端,此种数据格式基本和原始数据表格一致,非常便于CPU编解码,可以通过多线程的方式并行对多个数据列进行编码。
需要明确的是,本发明并不局限于上文所描述并在图中示出的特定配置和处理。为了简明起见,这里省略了对已知方法的详细描述。在上述实施例中,描述和示出了若干具体的步骤作为示例。但是,本发明的方法过程并不限于所描述和示出的具体步骤,本领域的技术人员可以在领会本发明的精神后,作出各种改变、修改和添加,或者改变步骤之间的顺序。
本领域普通技术人员应该可以明白,结合本文中所公开的实施方式描述的各示例性的组成部分、系统和方法,能够以硬件、软件或者二者的结合来实现。具体究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。当以硬件方式实现时,其可以例如是电子电路、专用集成电路(ASIC)、适当的固件、插件、功能卡等等。当以软件方式实现时,本发明的元素是被用于执行所需任务的程序或者代码段。程序或者代码段可以存储在机器可读介质中,或者通过载波中携带的数据信号在传输介质或者通信链路上传送。“机器可读存储介质”可以包括能够存储或传输信息的任何介质。机器可读存储介质的例子包括随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的有形存储介质。
还需要说明的是,本发明中提及的示例性实施例,基于一系列的步骤或者装置描述一些方法或系统。但是,本发明不局限于上述步骤的顺序,也就是说,可以按照实施例中提及的顺序执行步骤,也可以不同于实施例中的顺序,或者若干步骤同时执行。
本发明中,针对一个实施方式描述和/或例示的特征,可以在一个或更多个其它实施方式中以相同方式或以类似方式使用,和/或与其他实施方式的特征相结合或代替其他实施方式的特征。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明实施例可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (12)
1.一种数据库交互数据解码方法,该方法包括:大包头解析步骤和中包解析步骤,所述中包解析步骤包括中包头解析步骤和小包解析步骤,所述小包解析步骤包括小包头解析步骤和小包数据解析步骤;其中,
在所述大包头解析步骤中,从初始地址开始从存储单元顺序读取大包头数据,基于读取的大包头数据来解析出大包头信息,其中,所述大包头信息包括大包中的中包数量信息和大包数据量信息;
在所述中包头解析步骤中,从所述存储单元按地址顺序读取中包头数据,基于读取的中包头数据来解析出中包头信息,所述中包头信息包括当前中包中的小包数量信息、中包数据量信息和中包ID信息;
在所述小包头解析步骤中,从所述存储单元按地址顺序读取小包头数据,基于读取的小包头数据来解析出小包头信息,所述小包头信息包括小包数据长度信息;
在所述小包数据本体解析步骤中,基于解析出的当前中包的中包ID信息,向控制模块请求解码配置信息,并在请求的解码配置信息符合解析要求的情况下,从所述存储单元读取小包中的数据本体并进行解析。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在所述大包头解析步骤之前,确定从所述存储模块读取大包头数据的初始地址。
3.根据权利要求1所述的方法,其特征在于,
所述大包头解析步骤包括:由解码模块向取数据模块发送读取第一长度数据的请求,从所述取数据模块接收读取的数据并放入大包头的多个数据对应的多个寄存器,并解析寄存器中的数据,其中所述第一长度为大包头的长度;
所述中包头解析步骤包括:由解码模块向所述取数据模块发送读取第二长度数据的请求,从所述取数据模块接收读取的数据并放入中包头的多个数据对应的多个寄存器,并解析寄存器中的数据,其中所述第二长度为中包头的长度;
所述小包头解析步骤包括:由解码模块向所述取数据模块发送读取第三长度数据的请求,从所述取数据模块接收读取的数据并放入小包头数据对应的寄存器,并解析寄存器中的数据,其中所述第三长度为小包头的长度;
所述从所述存储单元读取各个小包中的数据本体并进行解析,包括:由解码模块向取数据模块发送与解析出的当前小包头中的数据本体数量对应的数据请求,从所述取数据模块接收读取的数据后传输给下级接收端。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
第一确定步骤,在所述解码模块解析完一个小包后,根据中包头信息以及当前解析状态确定是否解析完中包内的所有数据,在确定未解析完中包内的所有小包的情况下,继续执行所述小包解析步骤;
第二确定步骤,在所述解码模块解析完一个中包后,根据大包头信息以及当前解析状态确定是否解析完大包内的所有数据,在确定未解析完中包内的所有数据的情况下,继续执行所述中包解析步骤。
5.根据权利要求3所述的方法,其特征在于,所述方法还包括:
在所述解码模块解析完一个小包后,控制所述多个寄存器中暂存中包头中小包数量信息的小包数量寄存器的值减1,并继续执行所述小包解析步骤,直至该小包数量寄存器的值为0;
在所述解码模块解析完一个中包后,控制所述多个寄存器中暂存大包头中中包数量信息的中包数量寄存器的值减1,并继续执行所述中包解析步骤,直至该中包数量寄存器的值为0。
6.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
在所述解码模块解析完一个小包后,向下级接收端发送小包末尾标志有效信号;
在所述解码模块解析完一个中包后,向下级接收端发送中包末尾标志有效信号;
在所述解码模块解析完一个大包后,向下级接收端发送大包末尾标志有效信号。
7.一种数据库交互数据解码装置,其特征在于,该装置包括:取数据模块、解码模块和控制模块;
所述取数据模块用于基于确定的初始读取地址按照地址顺序从存储模块读取数据;
所述解码模块用于执行大包头解析步骤和中包解析步骤,其中,所述中包解析步骤包括中包头解析步骤和小包解析步骤,所述小包解析步骤包括小包头解析步骤和小包数据解析步骤;其中,
在所述大包头解析步骤中,控制所述取数据模块读取大包头数据,基于接收的大包头数据来解析出大包头信息,所述大包头信息包括大包中的中包数量信息和大包数据量信息;
在所述中包头解析步骤中,控制所述取数据模块读取中包头数据,基于接收的中包头数据来解析出中包头信息,所述中包头信息包括当前中包中的小包数量信息、中包数据量信息和中包ID信息;
在所述小包头解析步骤中,控制所述取数据模块读取小包头数据,基于接收的小包头数据来解析出小包头信息,所述小包头信息包括小包数据长度信息;
在所述小包数据本体解析步骤中,基于解析出的当前中包的中包ID信息,向所述控制模块请求解码配置信息,并在请求的解码配置信息与所述小包数据长度信息相匹配的情况下,从所述存储单元读取小包中的数据本体并进行解析;
所述控制模块用于基于所述解码模块的请求向所述解码模块提供解码配置信息。
8.根据权利要求7所述的装置,其特征在于,
所述大包头解析步骤包括:向所述取数据模块发送读取第一长度数据的请求,从所述取数据模块接收读取的数据并放入大包头的多个数据对应的多个寄存器,并解析寄存器中的数据,其中所述第一长度为大包头的长度;
所述中包头解析步骤包括:向所述取数据模块发送读取第二长度数据的请求,从所述取数据模块接收读取的数据并放入中包头的多个数据对应的多个寄存器,并解析寄存器中的数据,其中所述第二长度为中包头的长度;
所述小包头解析步骤包括:向所述取数据模块发送读取第三长度数据的请求,从所述取数据模块接收读取的数据并放入小包头数据对应的寄存器,并解析寄存器中的数据,其中所述第三长度为小包头的长度;从所述存储单元读取各个小包中的数据本体并进行解析,包括:由解码模块向取数据模块发送与解析出的当前小包头中的数据本体数量对应的数据请求,从所述取数据模块接收读取的数据后传输给下级接收端。
9.根据权利要求8所述的装置,其特征在于,所述多个寄存器包括:
中包数量寄存器,用于暂存从取数据模块接收的大包头中的中包数量信息;
大包数据量寄存器,用于暂存从取数据模块接收的大包头中的大包数据量信息;
小包数量寄存器,用于暂存从取数据模块接收的中包头中的小包数量信息;
中包数据量寄存器,用于暂存从取数据模块接收的中包头中的中包数据量信息;
中包ID寄存器,用于暂存从取数据模块接收的中包头中的中包ID信息;以及
小包数据长度寄存器,用于暂存从取数据模块接收的小包头中的小包数据长度信息。
10.根据权利要求7所述的装置,其特征在于,
所述解码模块解析完一个小包后,还根据中包头信息以及当前解析状态确定是否解析完中包内的所有数据,在确定未解析完中包内的所有小包的情况下,继续执行所述小包解析步骤;
所述解码模块解析完一个中包后,还根据大包头信息以及当前解析状态确定是否解析完大包内的所有数据,在确定未解析完中包内的所有数据的情况下,继续执行所述中包解析步骤。
11.根据权利要求7所述的装置,其特征在于,
所述解码模块在解析完一个小包后,还控制所述多个寄存器中暂存中包头中小包数量信息的小包数量寄存器的值减1,并继续执行所述小包解析步骤,直至该小包数量寄存器的值为0;
所述解码模块在解析完一个中包后,控制所述多个寄存器中暂存大包头中中包数量信息的中包数量寄存器的值减1,并继续执行所述中包解析步骤,直至该中包数量寄存器的值为0。
12.根据权利要求10或11所述的装置,其特征在于,
所述解码模块解析完一个小包后,向下级接收端发送小包末尾标志有效信号;
所述解码模块解析完一个中包后,向下级接收端发送中包末尾标志有效信号;
所述解码模块解析完一个大包后,向下级接收端发送大包末尾标志有效信号。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010777198.XA CN112100170B (zh) | 2020-08-05 | 2020-08-05 | 数据库交互数据解码方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010777198.XA CN112100170B (zh) | 2020-08-05 | 2020-08-05 | 数据库交互数据解码方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112100170A true CN112100170A (zh) | 2020-12-18 |
CN112100170B CN112100170B (zh) | 2021-09-14 |
Family
ID=73749613
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010777198.XA Active CN112100170B (zh) | 2020-08-05 | 2020-08-05 | 数据库交互数据解码方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112100170B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1585379A (zh) * | 2004-05-25 | 2005-02-23 | 华中科技大学 | 一种数据包的快速解析方法 |
US20090112898A1 (en) * | 2007-10-31 | 2009-04-30 | General Instrument Corporation | Decoding a Hierarchical Multi-Layer Data Package |
CN103875224A (zh) * | 2012-08-17 | 2014-06-18 | 华为技术有限公司 | 数据传输方法及装置 |
CN104618475A (zh) * | 2015-01-28 | 2015-05-13 | 清华大学 | 用于异构sdn网络的水平方向通信方法和sdn系统 |
CN105490948A (zh) * | 2015-12-28 | 2016-04-13 | 传线网络科技(上海)有限公司 | 数据包分发方法和系统 |
CN107645700A (zh) * | 2017-09-21 | 2018-01-30 | 数据通信科学技术研究所 | 一种基于ussd协议的移动通信数据传输方法 |
CN108737026A (zh) * | 2018-05-08 | 2018-11-02 | 深圳市心流科技有限公司 | 数据传输方法、装置及计算机可读存储介质 |
US20190096440A1 (en) * | 2007-11-16 | 2019-03-28 | Divx, Llc | Hierarchical and Reduced Index Structures for Multimedia Files |
-
2020
- 2020-08-05 CN CN202010777198.XA patent/CN112100170B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1585379A (zh) * | 2004-05-25 | 2005-02-23 | 华中科技大学 | 一种数据包的快速解析方法 |
US20090112898A1 (en) * | 2007-10-31 | 2009-04-30 | General Instrument Corporation | Decoding a Hierarchical Multi-Layer Data Package |
US20190096440A1 (en) * | 2007-11-16 | 2019-03-28 | Divx, Llc | Hierarchical and Reduced Index Structures for Multimedia Files |
CN103875224A (zh) * | 2012-08-17 | 2014-06-18 | 华为技术有限公司 | 数据传输方法及装置 |
CN104618475A (zh) * | 2015-01-28 | 2015-05-13 | 清华大学 | 用于异构sdn网络的水平方向通信方法和sdn系统 |
CN105490948A (zh) * | 2015-12-28 | 2016-04-13 | 传线网络科技(上海)有限公司 | 数据包分发方法和系统 |
CN107645700A (zh) * | 2017-09-21 | 2018-01-30 | 数据通信科学技术研究所 | 一种基于ussd协议的移动通信数据传输方法 |
CN108737026A (zh) * | 2018-05-08 | 2018-11-02 | 深圳市心流科技有限公司 | 数据传输方法、装置及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112100170B (zh) | 2021-09-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110399104B (zh) | 数据存储方法、数据存储装置、电子设备、存储介质 | |
CN106233632B (zh) | Ozip压缩和解压缩 | |
US7460033B2 (en) | Method for creating an in-memory physical dictionary for data compression | |
CN106503008B (zh) | 文件存储方法和装置及文件查询方法和装置 | |
EP3173947B1 (en) | Paged inverted index | |
CN107766529A (zh) | 一种用于污水处理行业的海量数据存储方法 | |
RU2679960C2 (ru) | Способ и система базы данных для нахождения документов | |
US10678766B2 (en) | Real-time index generation | |
US20230367815A1 (en) | Energy-efficient hardware-software collaborative method and apparatus for graph processing | |
CN107256233B (zh) | 一种数据存储方法和装置 | |
CN111290305B (zh) | 多套惯导系统多路数字量采集与处理防冲突方法及系统 | |
CN112100170B (zh) | 数据库交互数据解码方法和装置 | |
US6871274B2 (en) | Instruction code conversion apparatus creating an instruction code including a second code converted from a first code | |
CN107169057B (zh) | 一种重复图片的检测方法和装置 | |
CN108073709B (zh) | 一种数据记录的操作方法、装置、设备和存储介质 | |
CN111061927B (zh) | 数据处理方法、装置及电子设备 | |
CN115454353B (zh) | 一种面向空间应用数据的高速写入及查询方法 | |
CN111984591A (zh) | 文件存储、读取方法、装置、设备及计算机可读存储介质 | |
US8988258B2 (en) | Hardware compression using common portions of data | |
CN114116643A (zh) | 一种用于嵌入式系统的日志处理方法、装置及存储介质 | |
CN112100169B (zh) | 数据库交互数据编码方法及装置 | |
CN111694806A (zh) | 一种事务日志的缓存方法、装置、设备和存储介质 | |
CN114168079B (zh) | 一种识别磁盘删除的tiff类型数据的方法、装置及相关组件 | |
CN112383313B (zh) | 一种并行数据解码装置及方法 | |
CN112860712B (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 |