CN106446140A - 用于数据持久化的方法及装置 - Google Patents
用于数据持久化的方法及装置 Download PDFInfo
- Publication number
- CN106446140A CN106446140A CN201610835829.2A CN201610835829A CN106446140A CN 106446140 A CN106446140 A CN 106446140A CN 201610835829 A CN201610835829 A CN 201610835829A CN 106446140 A CN106446140 A CN 106446140A
- Authority
- CN
- China
- Prior art keywords
- data
- mark
- mapping
- request
- record
- 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
-
- 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
- G06F16/2272—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/25—Integrating or interfacing systems involving database management systems
- G06F16/258—Data format conversion from or to a database
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)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供了一种用于数据持久化的方法以及装置,其中的用于数据持久化的方法包括:确定与管理者对应的映射关系表和索引关系表,其中,所述映射关系表和索引关系表为结构化数据集合在内存中的数据模型;根据映射关系表标识、映射关系表中的映射信息、索引关系表标识以及索引关系表中的索引信息形成一条待序列化记录;对待序列化记录进行序列化处理形成基于内存快照的存储模型并存储。本发明提供的上述技术方案具有较佳的数据持久化效率,且使数据持久化的存储模型具有较好的可管理性。
Description
技术领域
本发明涉及网络技术,尤其是涉及一种用于数据持久化的方法以及用于数据持久化的装置。
背景技术
数据持久化通常包括:将内存中的数据模型转换为存储模型以及将存储模型转换为内存中的数据模型两部分内容;其中的数据模型可以为数据结构或者对象模型等,其中的存储模型可以为关系模型、XML(Extensible Markup Language,可扩展标记语言)或者二进制流等。
发明人在实现本发明过程中发现,在需要进行内存快照时,内存中所有的数据模型需要转换为存储模型,并持久化存储于磁盘中,如何提高数据持久化的效率,并使序列化后形成的存储模型便于管理是一个值得关注的技术问题。
发明内容
本发明的目的是,提供一种用于数据持久化的方法及装置。
根据本发明的一个方面,提供一种用于数据持久化的方法,所述方法主要包括:确定与管理者对应的映射关系表和索引关系表,其中,所述映射关系表和索引关系表为结构化数据集合在内存中的数据模型;根据映射关系表标识、映射关系表中的映射信息、索引关系表标识以及索引关系表中的索引信息形成一条待序列化记录;对待序列化记录进行序列化处理形成基于内存快照的存储模型并存储。
根据本发明的另一个方面,提供一种用于数据持久化的装置,且所述用于数据持久化的装置包括:用于确定与管理者对应的映射关系表和索引关系表的装置,其中,所述映射关系表和索引关系表为结构化数据集合在内存中的数据模型;用于根据映射关系表标识、映射关系表中的映射信息、索引关系表标识以及索引关系表中的索引信息形成一条待序列化记录的装置;用于对待序列化记录进行序列化处理形成基于内存快照的存储模型并存储的装置。
与现有技术相比,本发明至少具有以下优点:本发明通过使管理者与结构化数据集合(如数据库中的表等)在内存中的映射关系表和索引关系表存在对应关系,使内存中的所有映射关系表以及所有索引关系表可以由多个不同的管理者进行持久化管理,且每一个管理者均可以独自对与其对应的映射关系表和索引关系表执行持久化操作,从而本发明可以实现对内存中的所有映射关系表和所有索引关系表进行分片并行的持久化管理;本发明通过使管理者标识、映射关系表标识、索引关系表标识、映射关系表中的所有映射信息以及索引关系表中的所有索引信息设置于一条待序列化记录中,并对该待序列化记录进行序列化处理,使序列化处理后获得的基于内存快照的存储模型不但结构紧凑清晰,而且便于并行的恢复出内存中的数据模型;由此可知,本发明提供的技术方案具有较佳的数据持久化效率,且使数据持久化的存储模型具有较好的可管理性。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为本发明实施例一的用于数据持久化的方法的流程图;
图2为本发明实施例一的一个待序列化记录的结构示意图;
图3为本发明实施例一的另一个待序列化记录的结构示意图;
图4为本发明实施例二的基于内存快照的用于数据持久化的方法的流程图;
图5为本发明实施例三的基于请求的用于数据持久化的方法的流程图;
图6为本发明实施例四的用于数据持久化的装置的结构示意图。
附图中相同或相似的附图标记代表相同或相似的部件。
具体实施方式
在更加详细地讨论示例性实施例之前,应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作描述成顺序的处理,但是,其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的执行顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
在上下文中所称“计算机设备”,也称为“电脑”,是指可以通过运行预定程序或指令来执行数值计算和/或逻辑计算等预定处理过程的智能电子设备,其可以包括处理器与存储器,由处理器执行在存储器中预存的存续指令来执行预定处理过程,或者是由ASIC、FPGA、DSP等硬件执行预定处理过程,或者是由上述二者组合来实现。计算机设备包括但不限于服务器、个人电脑以及笔记本电脑等。
所述计算机设备包括用户设备与网络设备。其中,所述用户设备包括但不限于电脑、智能手机、PDA等;所述网络设备包括但不限于单个网络服务器、多个网络服务器组成的服务器组或基于云计算(Cloud Computing)的由大量计算机或网络服务器构成的云,其中,云计算是分布式计算的一种,由一群松散耦合的计算机集组成的一个超级虚拟计算机。其中,所述计算机设备可单独运行来实现本发明,也可接入网络并通过与网络中的其他计算机设备的交互操作来实现本发明。其中,所述计算机设备所处的网络包括但不限于互联网、广域网、城域网、局域网、VPN网络等。
需要说明的是,所述用户设备、网络设备和网络等仅为举例,其他现有的或今后可能出现的计算机设备或网络如可适用于本发明,也应包含在本发明保护范围以内,并以引用方式包含于此。
后面所讨论的方法(其中一些通过流程图示出)可通过硬件、软件、固件、中间件、微代码、硬件描述语言或者其任意组合来实施。当用软件、固件、中间件或微代码来实施时,用以实施必要任务的程序代码或代码段可以被存储在机器或计算机可读介质(比如存储介质)中。(一个或多个)处理器可以实施必要的任务。
这里所公开的具体结构和功能细节仅仅是代表性的,并且是用于描述本发明的示例性实施例的目的。但是,本发明可以通过许多替换形式来具体实现,并且不应当被解释成仅仅受限于这里所阐述的实施例。
应当理解的是,虽然在这里可能使用了术语“第一”、“第二”等等来描述各个单元,但是这些单元不应当受这些术语限制。使用这些术语仅仅是为了将一个单元与另一个单元进行区分。举例来说,在不背离示例性实施例的范围的情况下,第一单元可以被称为第二单元,并且类似地第二单元可以被称为第一单元。这里所使用的术语“和/或”包括其中一个或更多所列出的相关联项目的任意和所有组合。
应当理解的是,当一个单元被称为“连接”或者“耦合”到另一个单元时,其可以直接连接或耦合到所述另一单元,或者可以存在中间单元。与此相对,当一个单元被称为“直接连接”或“直接耦合”到另一单元时,则不存在中间单元。应当按照类似的方式来解释被用于描述单元之间的关系的其他词语(例如“处于...之间”相比于“直接处于...之间”,“与...邻近”相比于“与...直接邻近”等等)。
这里所使用的术语仅仅是为了描述具体实施例而不意图限制示例性实施例。除非上下文明确地另有所指,否则这里所使用的单数形式“一个”、“一项”还意图包括复数。还应当理解的是,这里所使用的术语“包括”和/或“包含”规定所陈述的特征、整数、步骤、操作、单元和/或组件的存在,而不排除存在或添加一个或更多其他特征、整数、步骤、操作、单元、组件和/或其组合。
还应当提到的是,在一些替换实现方式中,所提到的功能/动作可以按照不同于附图中标示的顺序发生。举例来说,取决于所涉及的功能/动作,相继示出的两幅图实际上可以基本上同时执行或者有时可以按照相反的顺序来执行。
下面结合附图对本发明作进一步详细描述。
实施例一、用于数据持久化的方法。
本实施例的方法可以由计算机设备执行。本实施例的用于数据持久化的方法的流程如图1所示。图1中,本实施例的用于数据持久化的方法包括:S100、S110以及S120。
S100、确定与管理者对应的映射关系表和索引关系表。
作为示例,本实施例中通常会同时存在多个管理者,且每一个管理者均主要用于对内存中的部分映射关系表以及相应的索引关系表进行管理,以对内存中相应的映射关系表以及索引关系表进行序列化处理,从而形成相应的基于内存快照的存储模型并持久化存储;当然,每一个管理者还主要用于对持久化存储的部分存储模型进行管理,以对相应的存储模型进行反序列化处理,从而形成内存中的相应的映射关系表以及相应的索引关系表。本实施例中的映射关系表由结构化数据集合中的各数据记录映射在内存中形成,本实施例中的索引关系表由结构化数据集合的各索引关系映射在内存中形成,且本实施例中的结构化数据集合所对应的内存中的映射关系表和索引关系表可以称为结构化数据集合在内存中的数据模型。
作为示例,本实施例中的结构化数据集合可以为数据库中的表,本实施例中的结构化数据结合也可以为通过对数据库中的相互之间具有关联关系(即关联性)的多张表进行组合而形成的表;当然,本实施例中的结构化数据集合也可以为除了数据库中的表的形式之外的其他形式,如excel表或者文本文档等。本实施例中的两张表之间具有关联关系可以具体为两张表之间具有可以将彼此连接在一起的共同内容,如一张表中的一条数据记录包括甲的身份信息(如身份证号码)和甲的父母的身份信息(如身份证号码),另一张表中具有甲的父母的身份信息以及甲的父母的住址,这两张表由于甲的父母的身份信息而具有关联关系。
作为示例,本实施例中的对数据库中的相互之间具有关联关系的多张表进行组合形成表的一个具体例子为:对数据库中的相互之间具有关联关系的多张表中的所有字段进行合并而形成表;另一个具体的例子为:将数据库中的一张表的所有字段与和其具有关联关系的其他表中的部分字段进行合并而形成表。
一个更为具体的例子:设定Mysql数据库中的表1和表2之间具有关联关系,而表1包含有三个字段,分别为ID字段、Project字段以及Name字段,表2包含有三个字段,即a字段、b字段以及c字段,本实施例可以将表1中的上述三个字段和表2中的上述三个字段进行合并,从而形成一张新表(即本实施例中的结构化数据集合),该新表包含有六个字段,分别为ID字段、Project字段、Name字段、a字段、b字段以及c字段。另外,本实施例也可以将表1中的上述三个字段和表2中的上述三个字段中的两个字段进行合并,从而形成一张新表(即本实施例中的结构化数据集合),该新表包含有五个字段,分别为ID字段、Project字段、Name字段、a字段以及b字段。
作为示例,在一方面,本实施例中的管理者与内存中的映射关系表以及索引关系表存在对应关系,如一个管理者对应内存中的一个映射关系表以及至少一个相应的索引关系表。与管理者对应的映射关系表和索引关系表可以称为属于管理者的映射关系表和索引关系表,而与映射关系表和索引关系表对应的管理者可以称为映射关系表和索引关系表所属的管理者。管理者对属于其的映射关系表以及索引关系表进行持久化管理。另一方面,本实施例中的管理者与结构化数据集合存在对应关系,且一个结构化数据集合通常唯一对应一个管理者,而一个管理者可以对应一个或者多个结构化数据集合,在一个管理者对应多个结构化数据集合的情况下,管理者应针对与其对应的不同结构化数据集合分别进行持久化管理。
作为示例,内存中的所有映射关系表以及索引关系表通常会通过多个管理者分别进行持久化管理,且每一个映射关系表和每一个索引关系表均只能够由一个管理者进行持久化管理。在一个管理者仅对应一个结构化数据集合的情况下,该管理者仅对该结构化数据集合在内存中的映射关系表以及索引关系表信息进行持久化管理。
作为示例,本实施例中的映射关系表可以包括:映射哈希表,即本实施例中的结构化数据集合中的各条数据记录会分别以Key-Value(键值)的形式存储于内存中的映射关系表中,其中的每一个的Key分别为相应的数据记录的主键,且Key通常为字符串或者数字形式的变量;其中的每一个Value通常分别对应结构化数据集合中的一条数据记录。另外,映射哈希表中的Value可以为哈希表的形式,即本实施例中的映射哈希表可以为基于哈希嵌套的哈希表。
作为示例,本实施例中的索引关系表可以包括:索引哈希表,即本实施例中的结构化数据集合的各索引关系会分别以Key-Value的形式存储于内存中的索引关系表中,其中的每一个的Key分别为相应的索引关系的主键,且Key通常为字符串或者数字形式的变量;其中的每一个Value通常分别对应结构化数据集合的一条索引关系。
本实施例通过使用哈希表来实现映射关系表以及索引关系表,使映射关系表以及索引关系表便于扩展,如在映射关系表以及索引关系表需要增加新的内容时,通过在映射哈希表以及索引关系表的相应位置处设置相应的Key-Value即可。
作为示例,本实施例可以通过各映射哈希表以及各索引哈希表的注册过程设置管理者与映射哈希表和索引哈希表的对应关系,以明确每一个管理者各自对应的内存中的映射哈希表以及索引哈希表。在本实施例存在多个管理者的情况下,可以针对不同的管理者分别确定出其各自对应的映射哈希表以及索引哈希表,由于每一个管理者可以对与其对应的映射哈希表以及索引哈希表进行持久化管理,因此,本实施例可以实现对内存中的所有映射哈希表和所有索引哈希表的分片并行的持久化管理,从而使本实施例具有较佳的数据持久化效率。
S110、根据映射关系表标识、索引关系表标识、映射关系表中的映射信息以及索引关系表中的索引信息形成一条待序列化记录。
作为示例,本实施例可以将映射关系表标识、索引关系表标识以及映射关系表中的所有映射信息以及索引关系表中的所有索引信息设置于一条待序列化记录中;另外,本实施例也可以将管理者标识、映射关系表标识、索引关系表标识以及映射关系表中的所有映射信息以及索引关系表中的所有索引信息设置于一条待序列化记录中;一个具体的例子,本实施例所形成的待序列化记录可以包括:管理者标识的长度、管理者标识(即管理者ID)、映射关系表标识的长度、映射关系表标识(即映射关系表ID)、描述映射关系表中的各键值长度的信息、映射关系表中的各键值、映射关系表终止标识(如0等特定字符)、索引关系表标识的长度、索引关系表标识(如索引关系表ID)、描述索引关系表中的各键值长度的信息、索引关系表中的各键值、索引关系表终止标识(如0等特定字符)以及待序列化记录终止标识(如0等特定字符)。
作为示例,本实施例所形成的待序列化记录的结构一个具体例子如图2所示。图2上侧,“长度1”表示管理者标识的长度,“管理者标识”如管理者名称等能够唯一表示出一个管理者的标识信息;“长度2”、“表1标识”以及“数据”对应一个结构化数据集合在内存中的映射关系表和索引关系表中的任意一个;且“长度2”表示表1标识的长度,“表1标识”如表1名称等能够唯一表示出一个映射关系表或者索引关系表,“数据”即映射关系表或者索引关系表中的所有内容;“表2-表n”表示结构化数据集合在内存中的顺序排列的其他映射关系表或者索引关系表;“第一终止标识”即待序列化记录终止标识;在设定表1为映射关系表的情况下,图2上侧中的“数据”的结构如图2下侧所示,在图2下侧,“长度3”表示映射关系表中的第一个键值(即图2中的“键1”和“值1”)以及“长度4”的总长度,“长度4”表示映射关系表中的第一个值(即图2中的“值1”)的长度,且“长度3”、“键1”、“长度4”和“值1”形成“记录1”;“长度5”表示映射关系表中的第二个键值(即图2中的“键2”和“值2”)以及“长度6”的总长度,“长度6”表示映射关系表中的第二个值(即图2中的“值1”)的长度,且“长度5”、“键2”、“长度6”和“值2”形成“记录2”;“记录2-记录n”对应映射关系表中第三个键值至第n个键值,且第n个键值是映射关系表中的最后一个键值;“第二终止标识”即映射关系表终止标识;对于索引关系表而言,最后的位置处为索引关系表终止标识。
S120、对待序列化记录进行序列化处理,以形成基于内存快照的存储模型并存储。
作为示例,本实施例通常是将待序列化记录序列化为二进制编码的存储模型,以提高存储模型的安全性。另外,本实施例可以采用百度公司自有的BSL标准库对待序列化记录进行序列化处理。百度公司自有的BSL标准库提供了多种序列化方法,可以针对不同类型的待序列化记录进行快速的序列化处理,本实施例可以通过调用BSL标准库中的相应的序列化方法实现对待序列化记录中的长度、标识以及键值等进行序列化处理,如通过调用bsl::serialization(buf,val)来对长度、标识以及键进行序列化处理。
作为示例,本实施例序列化处理后所获得的基于内存快照的存储模型可以存储于NFS(Network File System,网络文件系统)中。在存储模型的存储过程中,可以记录相应的存储模型的存储位置,从而在将存储模型转换为内存中的数据模型的过程中,可以方便明确的获知各存储模型所对应的管理者。当然,本实施例也可以通过其他方式获知各存储模型对应的管理者,如通过对存储模型中的管理者标识的长度以及管理者标识进行反序列化处理获知存储模型所对应的管理者。
作为示例,在需要将持久化存储的基于内存快照的存储模型恢复为内存中的数据模型时,首先,应在内存中构建管理者对应的映射哈希表以及索引哈希表的表结构,如各管理者分别在内存中构建其对应的映射哈希表的表结构以及索引哈希表的表结构;然后,对持久化存储的对应相应管理者的存储模型进行反序列化处理,如各管理者分别从NFS中的相应的位置处读取存储模型,并行执行反序列化处理,从而可以获得映射关系表标识、映射关系表中的各键值、索引关系表标识以及索引关系表中的各键值等;之后,各管理者可以分别根据反序列化处理获得的映射关系表标识将映射关系表中的各键值设置于其构建的映射哈希表的表结构中,并根据反序列化处理获得的索引关系表标识将索引关系表中的各键值设置于其构建的索引哈希表的表结构中,即各管理者可以并行执行将键值设置于表结构中的操作。
一个具体的例子,管理者通过对具有其标识的存储模型执行反序列处理操作后可以获得如图2所示的记录,管理者根据“长度1”可以从记录中获取到“管理者标识”,在确定该“管理者标识”与其标识相符的情况下,根据“长度2”获取到“表1标识”,从而确定出“表1标识”所对应的其在内存中构建的表结构,管理者根据“表1标识”后面的数据中的“长度3”和“长度4”提取出“键1”和“值1”,根据“长度5”和“长度6”提取出“键2”和“值2”,……,直到“第二终止标识”,获知表1中的键值已经全部设置于内存中的相应表中;后续应该是表2的内容,按照上述对表1的处理操作将表2中的键值全部设置于内存中的相应表中,直到“第一终止标识”,确定出该记录中的所有映射关系表和索引关系表都已经成功恢复到内存中。
由上述描述可知,在将基于内存快照的存储模型转换为结构化数据集合在内存中的数据模型的过程中,由于每一个管理者均可以在内存中并行的构建与其对应映射关系表以及索引关系表的表结构,并针对包含有其标识的基于内存快照的存储模型并行的对相应的存储模型执行反序列化操作,从而不同管理者可以分别获得映射关系表标识、索引关系表标识、映射关系表中的所有映射信息以及索引关系表中的所有索引信息,通过根据上述信息设置于内存中的映射关系表以及索引关系表中,快速形成了内存中的数据模型,从而本发明可以实现由多个管理者分别对相应的存储模型进行分片并行的持久化处理,进而可以快速的在内存中重新恢复出映射关系表和索引关系表。
本实施例不仅可以针对内存全量数据进行持久化处理,还可以针对单条数据记录更新请求进行持久化处理,该数据记录更新请求通常来自于客户端,且该数据记录更新请求主要用于更新内存中的映射关系表和/或者索引关系表中的内容。需要特别说明的是,在本实施例中,客户端发送来的数据记录更新请求可以为序列化后的数据记录更新请求(如使用Protobuf进行序列化后的数据记录更新请求),在这种情况下,本实施例可以先使用相应的反序列化方式对该数据记录更新请求进行反序列化处理(如使用Protobuf对客户端发送来的数据记录更新请求进行反序列化处理),然后,再将来自客户端的数据记录更新请求转化为基于请求的存储模型。
作为示例,本实施例将来自客户端的数据记录更新请求转化为基于请求的存储模型的一个具体过程为:首先,针对来自客户端的数据记录更新请求确定其所对应的管理者标识(如可以根据数据记录更新请求的发送方信息和/或接收方信息确定该数据记录更新请求所对应的管理者标识);然后,根据该数据记录更新请求对应的处理方法以及该请求的参数形成待序列化请求记录;当然,本实施例也可以根据该数据记录更新请求对应的管理者标识、该请求所对应的处理方法以及该请求的参数形成待序列化请求记录;之后,对该待序列化请求记录进行序列化处理,以形成基于请求的存储模型,并存储该基于请求的存储模型。本实施例序列化处理后所获得的基于请求的存储模型可以存储于NFS中。本实施例可以记录基于请求的存储模型的存储位置,从而在对基于请求的存储模型进行反序列的过程中,可以方便明确的获知各基于请求的存储模型所对应的管理者。当然,本实施例也可以通过其他方式获知各基于请求的存储模型对应的管理者,如通过对基于请求的存储模型中的管理者标识进行反序列化处理获知该基于请求的存储模型所对应的管理者。
作为示例,本实施例可以将请求所对应的处理方法、输入参数的长度以及输入参数设置于一条待序列化请求记录中,也可以将请求所对应的处理方法、输入参数的长度、输入参数、输出参数的长度以及输出参数设置于一条待序列化请求记录中,也可以将管理者标识、请求所对应的处理方法、输入参数的长度以及输入参数设置于一条待序列化请求记录中,还可以将管理者标识、请求所对应的处理方法、输入参数的长度、输入参数、输出参数的长度以及输出参数设置于一条待序列化请求记录中。
作为示例,本实施例所形成的待序列化请求记录的结构一个具体例子如图3所示。图3上侧,“管理者标识”如管理者名称等能够唯一表示出一个管理者的标识信息;“方法”即该请求所对应的方法,且可以为方法名称等能够唯一表示出一个方法的标识信息;“参数”即请求所对应的参数,且该“参数”通常为输入参数,在存在输出参数的情况下,该“参数”可以包括输出参数;图3上侧中的“参数”的结构如图3下侧所示,在图3下侧,“输入参数长度”表示其后面的“输入参数”的长度;“输入参数”表示该请求所承载的输入参数的具体内容;“输出参数长度”表示其后面的“输出参数”的长度;“输出参数”表示该请求所对应的输出参数的具体内容。对图3所示的待序列化请求记录进行序列化处理后,并存储于日志信息中。
由上述描述可知,本发明通过使管理者与数据记录更新请求存在对应关系,使两次内存快照之间的所有的数据记录更新请求可以由不同的管理者进行持久化管理,且每一个管理者均可以独自对与其对应的数据记录更新请求执行持久化操作,从而本发明可以实现对来自客户端的所有数据记录更新请求进行分片并行的持久化管理;本发明通过使管理者标识、数据记录更新请求对应的方法以及数据记录更新请求的参数设置于一条待序列化请求记录中,并对该待序列化请求记录进行序列化处理,使序列化处理后获得的基于请求的存储模型不但结构紧凑清晰,而且便于对内存中数据模型进行更新。
作为示例,本实施例对基于请求的存储模型进行持久化处理的一个具体过程为:首先,获取对应相应管理者的基于请求的存储模型,如各管理者分别从NFS中的相应的位置处读取存储模型,再如,通过对基于请求的存储模型中的管理者标识进行反序列化获知该存储模型对应的管理者;之后,对对应相应管理者的基于请求的存储模型执行反序列化处理,从而可以获得该请求的处理方法以及该请求的参数;根据上述获得的处理方法以及请求的参数(如输入参数)对内存中的数据模型进行更新处理;如更新映射关系表或者索引关系表中的某个值;再如在映射关系表或者索引关系表中增加新的键值等。
由上述描述可知,在将基于内存快照的存储模型转换为结构化数据集合在内存中的数据模型之后,由于每一个管理者均可以根据反序列化后获得的方法和请求的参数来更新内存中的映射关系表以及索引关系表,从而本发明可以实现对基于请求的存储模型进行分片并行的持久化管理,进而可以快速的恢复出内存中的映射关系表和索引关系表。
实施例二、基于内存快照的用于数据持久化的方法。
作为示例,本实施例的基于内存快照的用于数据持久化的方法可以由从节点(Slave)来执行,该方法的实现过程如图4所示。
在图4中,基于内存快照的用于数据持久化的方法主要包括两部分,即内存快照过程(如图4中的左侧流程所示)和初始化过程(如图4中的右侧流程所示);其中的内存快照过程是指对内存中的所有映射哈希表和索引哈希表进行序列化处理,并将序列化处理后的基于内存快照的存储模型存储于NFS中,其中的初始化过程是为将NFS中存储的基于内存快照的存储模型进行反序列化处理,并将反序列化后的结果设置于内存中。下面对图4中的各步骤分别进行说明。
内存快照过程包括下述S401、S402、S403、S404、S405、S406以及S407。
S401、从节点中执行内存快照的进程获取内存中所有的映射哈希表和索引哈希表,如该进程复制内存中的所有映射哈希表和索引哈希表。
S402、该进程获取内存快照的全局写锁(即Checkpoint全局写锁),以优先执行内存快照,避免在内存快照过程中内存中的映射哈希表和索引哈希表发生变化。该进程还会针对每一个管理者分别创建一个子进程。
S403、每一个子进程分别获取其所对应的管理者对应的映射哈希表和索引哈希表的列表,以确定需要其进行序列化处理的所有映射哈希表和索引哈希表。在该列表中,一个结构化数据集合在内存中的映射哈希表和所有索引哈希表被作为一组,子进程应针对每一组分别执行序列化处理。
S404、子进程根据其所获得的列表中的一组映射哈希表和索引哈希表形成如图2所示的记录,并对该记录执行序列化处理,形成二进制形式的基于内存快照的存储模型。
S405、子进程将序列化处理后的结果写入NFS中,写NFS的过程通常为顺序写过程。
S406、子进程判断列表中是否还存在未执行序列化处理的映射哈希表和索引哈希表组,如果存在,则返回到步骤S404,否则,到步骤S407。
S407、本次内存快照过程结束。
初始化过程包括下述SS411、S412、S413、S414、S415以及S416。
S411、各管理者分别在内存中创建与其对应的映射哈希表的表结构以及索引哈希表的表结构。
S412、管理者获取NFS中的相应的基于内存快照的存储模型,即待反序列化的记录,如管理者获取NFS中相应的存储位置处的基于内存快照的存储模型,再如管理者获取NFS中具有相应管理者标识的基于内存快照的存储模型。
S413、管理者根据预先设定的反序列化方法对其获取的待反序列化的记录进行反序列化处理,如利用百度公司自有的BSL标准库对待反序列化的记录进行反序列化处理。
S414、根据反序列化处理获得的映射哈希表名称或者索引哈希表名称将相应的键值插入到内存中的相应的映射哈希表或者索引哈希表的相应位置。
S415、判断NFS中是否还存在与管理者对应的待反序列化的记录,如果存在,则返回步骤S412,即继续获取NFS中的相应的基于内存快照的存储模型,如果不存在,则到步骤S416。
S416、本次初始化过程结束。
实施例三、基于请求的用于数据持久化的方法。
作为示例,本实施例基于请求的用于数据持久化的方法通常由主节点(Master)和从节点共同执行,该方法的实现过程如图5所示。
在图5中,基于请求的用于数据持久化的方法主要包括两部分,即由主节点执行的写单条日志信息过程(如图5中的左侧流程所示)和由从节点执行的内存更新过程(如图5中的右侧流程所示);其中的写单条日志信息过程是指针对来自客户端的数据记录更新请求进行序列化处理,并将序列化处理后的结果作为一条日志信息存储于NFS中,其中的内存更新过程是指将NFS中存储的日志信息进行反序列化处理,并根据反序列化后的结果更新内存中的映射哈希表以及索引哈希表。下面对图5中的各步骤分别进行说明。
由主节点执行的写单条日志信息过程包括下述S501、S502、S503、S504、S505、S506以及S507。
S501、接收来自客户端的数据记录更新请求,且根据数据记录更新请求的接收方和发送方信息确定其所属的管理者。
S502、由相应的管理者确定该数据记录更新请求所对应的方法,并形成如图3所示的一条记录,然后,根据管理者标识、方法以及数据记录更新请求中的参数执行序列化处理操作。
S503、管理者调用相应的写操作,以启动将序列化后的记录写入NFS中的操作。
S504、管理者将序列化后的记录作为一条日志信息写入NFS中,管理者可以记录该日志信息的存储位置。
S505、管理者启动更新内存中的映射哈希表和索引哈希表中的键值的操作,且管理者可以通过Applylog过程触发从节点执行内存更新操作。
S506、管理者根据该数据记录更新请求所对应的方法以及该数据记录更新请求中的参数对内存中的映射哈希表以及索引哈希表进行更新,如修改映射哈希表以及索引哈希表中的键值,再如在映射哈希表以及索引哈希表中增加相应的键值等。
S507、本次写单条日志信息的过程结束。
由从节点执行的内存更新过程包括下述S511、S512、S513以及S514。
S511、从节点在主节点的触发下,启动更新内存中的映射哈希表以及索引哈希表的操作。
S512、从节点中的管理者从NFS中获取其对应的日志信息,如根据存储位置获取其对应的日志信息,再如通过对管理者标识进行反序列化操作获取其对应的日志信息。
S513、管理者获取针对本次内存更新的Checkpoint全局读锁,管理者获取到Checkpoint全局读锁表明当前没有针对内存中的映射哈希表和索引哈希表的写操作,从而可以避免在内存更新过程中内存中的映射哈希表和索引哈希表被更新;管理者根据反序列化后获得的方法以及参数对内存中的映射哈希表和索引哈希表进行更新操作,如修改映射哈希表以及索引哈希表中的键值,再如在映射哈希表以及索引哈希表中增加相应的键值等。
S514、本次内存更新过程结束。
实施例四、用于数据持久化的装置。
本实施例的用于数据持久化的装置通常会被设置于分布式系统中的充当主节点或者从节点的计算机设备中,如本实施例所记载的用于数据持久化的装置可以设置于充当主节点或从节点的台式计算机、服务器以及其他网络设备中。本实施例的用于数据持久化的装置的主要结构如图6所示。
下面参照具体实施例对用于数据持久化的装置进行说明。
图6中,本实施例的用于数据持久化的装置主要包括:用于确定与管理者对应的映射关系表和索引关系表的装置(下述简称为“确定对应表装置600”)、用于根据映射关系表标识、映射关系表中的映射信息、索引关系表标识以及索引关系表中的索引信息形成一条待序列化记录的装置(下述简称为“形成待序列化记录装置610”)以及用于对待序列化记录进行序列化处理形成基于内存快照的存储模型并存储的装置(下述简称为“第一序列化及存储装置620”)。另外,本实施例的用于数据持久化的装置通常还可以包括:用于在内存中构建各管理者对应的映射哈希表以及索引哈希表的表结构的装置(下述简称为“构建表结构装置630”)、用于对对应不同管理者的基于内存快照的存储模型并行进行反序列化处理,以获得映射关系表标识、映射关系表中的各键值、索引关系表标识和索引关系表中的各键值的装置(下述简称为“第一反序列化处理装置640”)、用于根据获得的映射关系表标识和索引关系表标识将所述映射关系表中的各键值以及索引关系表中的各键值设置于所述构建的相应的表结构中的装置(下述简称为“恢复映射索引表装置650”)、用于对对应不同管理者的数据记录更新请求分别根据数据记录更新请求所对应的处理方法以及所述请求的参数形成待序列化请求记录的装置(下述简称为“形成待序列化请求记录装置660”)、用于对待序列化请求记录进行序列化处理,以形成基于请求的存储模型并存储的装置(下述简称为“第二序列化及存储装置670”)、用于对对应不同管理者的基于请求的存储模型并行执行反序列化处理,以获得处理方法以及请求的参数的装置(下述简称为“第二反序列化处理装置680)以及用于根据获得的处理方法以及请求的参数对内存中的数据模型进行更新处理的装置(下述简称为“更新数据模型装置690)。
确定对应表装置600主要用于确定与管理者对应的映射关系表和索引关系表,且确定对应表装置600可以设置于管理者中。
作为示例,本实施例中的映射关系表由结构化数据集合中的各数据记录映射在内存中形成,本实施例中的索引关系表由结构化数据集合的各索引关系映射在内存中形成,且本实施例中的结构化数据集合所对应的内存中的映射关系表和索引关系表可以称为结构化数据集合在内存中的数据模型。
作为示例,本实施例中的结构化数据集合可以为数据库中的表,本实施例中的结构化数据结合也可以为通过对数据库中的相互之间具有关联关系(即关联性)的多张表进行组合而形成的表;当然,本实施例中的结构化数据集合也可以为除了数据库中的表的形式之外的其他形式,如excel表或者文本文档等。本实施例中的两张表之间具有关联关系可以具体为两张表之间具有可以将彼此连接在一起的共同内容,如一张表中的一条数据记录包括甲的身份信息(如身份证号码)和甲的父母的身份信息(如身份证号码),另一张表中具有甲的父母的身份信息以及甲的父母的住址,这两张表由于甲的父母的身份信息而具有关联关系。对数据库中的相互之间具有关联关系的多张表进行组合形成表的具体例子如上述实施例1中的描述,在此不再重复说明。
作为示例,在一方面,本实施例中的管理者与内存中的映射关系表以及索引关系表存在对应关系,如一个管理者对应内存中的一个映射关系表以及至少一个相应的索引关系表。与管理者对应的映射关系表和索引关系表可以称为属于管理者的映射关系表和索引关系表,而与映射关系表和索引关系表对应的管理者可以称为映射关系表和索引关系表所属的管理者。管理者对属于其的映射关系表以及索引关系表进行持久化管理。另一方面,本实施例中的管理者与结构化数据集合存在对应关系,且一个结构化数据集合通常唯一对应一个管理者,而一个管理者可以对应一个或者多个结构化数据集合,在一个管理者对应多个结构化数据集合的情况下,管理者应针对与其对应的不同结构化数据集合分别进行持久化管理。
作为示例,内存中的所有映射关系表以及索引关系表通常会通过多个管理者分别进行持久化管理,且每一个映射关系表和每一个索引关系表均只能够由一个管理者进行持久化管理。在一个管理者仅对应一个结构化数据集合的情况下,该管理者仅对该结构化数据集合在内存中的映射关系表以及索引关系表信息进行持久化管理。
作为示例,本实施例中的映射关系表可以包括:映射哈希表,即本实施例中的结构化数据集合中的各条数据记录会分别以Key-Value(键值)的形式存储于内存中的映射关系表中,其中的每一个的Key分别为相应的数据记录的主键,且Key通常为字符串或者数字形式的变量;其中的每一个Value通常分别对应结构化数据集合中的一条数据记录。另外,映射哈希表中的Value可以为哈希表的形式,即本实施例中的映射哈希表可以为基于哈希嵌套的哈希表。
作为示例,本实施例中的索引关系表可以包括:索引哈希表,即本实施例中的结构化数据集合的各索引关系会分别以Key-Value的形式存储于内存中的索引关系表中,其中的每一个的Key分别为相应的索引关系的主键,且Key通常为字符串或者数字形式的变量;其中的每一个Value通常分别对应结构化数据集合的一条索引关系。
本实施例通过使用哈希表来实现映射关系表以及索引关系表,使映射关系表以及索引关系表便于扩展,如在映射关系表以及索引关系表需要增加新的内容时,通过在映射哈希表以及索引关系表的相应位置处设置相应的Key-Value即可。
作为示例,确定对应表装置600可以通过各映射哈希表以及各索引哈希表的注册过程设置管理者与映射哈希表和索引哈希表的对应关系,以明确每一个管理者各自对应的内存中的映射哈希表以及索引哈希表。在本实施例存在多个管理者的情况下,确定对应表装置600可以针对不同的管理者分别确定出其各自对应的映射哈希表以及索引哈希表,由于每一个管理者可以对与其对应的映射哈希表以及索引哈希表进行持久化管理,因此,本实施例的装置可以实现对内存中的所有映射哈希表和所有索引哈希表的分片并行的持久化管理,从而使本实施例具有较佳的数据持久化效率。
形成待序列化记录装置610用于根据映射关系表标识、映射关系表中的映射信息、索引关系表标识以及索引关系表中的索引信息形成一条待序列化记录。
作为示例,形成待序列化记录装置610可以将映射关系表标识、索引关系表标识以及映射关系表中的所有映射信息以及索引关系表中的所有索引信息设置于一条待序列化记录中;另外,形成待序列化记录装置610也可以将管理者标识、映射关系表标识、索引关系表标识以及映射关系表中的所有映射信息以及索引关系表中的所有索引信息设置于一条待序列化记录中。
一个具体的例子,形成待序列化记录装置610所形成的待序列化记录可以包括:管理者标识的长度、管理者标识(即管理者ID)、映射关系表标识的长度、映射关系表标识(即映射关系表ID)、描述映射关系表中的各键值长度的信息、映射关系表中的各键值、映射关系表终止标识(如0等特定字符)、索引关系表标识的长度、索引关系表标识(如索引关系表ID)、描述索引关系表中的各键值长度的信息、索引关系表中的各键值、索引关系表终止标识(如0等特定字符)以及待序列化记录终止标识(如0等特定字符)。
作为示例,形成待序列化记录装置610所形成的待序列化记录的结构一个具体例子如上述实施例一中针对图2的描述,在此不再详细说明。
第一序列化及存储装置620主要用于对待序列化记录进行序列化处理形成基于内存快照的存储模型并存储。
作为示例,第一序列化及存储装置620通常是将待序列化记录序列化为二进制编码的存储模型,以提高存储模型的安全性。另外,第一序列化及存储装置620可以采用百度公司自有的BSL标准库对待序列化记录进行序列化处理。百度公司自有的BSL标准库提供了多种序列化方法,第一序列化及存储装置620可以针对不同类型的待序列化记录进行快速的序列化处理,第一序列化及存储装置620可以通过调用BSL标准库中的相应的序列化方法实现对待序列化记录中的长度、标识以及键值等进行序列化处理,如第一序列化及存储装置620通过调用bsl::serialization(buf,val)来对长度、标识以及键进行序列化处理。
作为示例,第一序列化及存储装置620序列化处理后所获得的基于内存快照的存储模型可以存储于NFS中。在存储模型的存储过程中,第一序列化及存储装置620可以记录相应的存储模型的存储位置,从而在将存储模型转换为内存中的数据模型的过程中,第一反序列化处理装置640可以方便明确的获知各存储模型所对应的管理者。当然,第一反序列化处理装置640也可以通过其他方式获知各存储模型对应的管理者,如第一反序列化处理装置640通过对存储模型中的管理者标识的长度以及管理者标识进行反序列化处理获知存储模型所对应的管理者。
作为示例,在需要将持久化存储的基于内存快照的存储模型恢复为内存中的数据模型时,首先,构建表结构装置630应在内存中构建管理者对应的映射哈希表以及索引哈希表的表结构,如各管理者中的构建表结构装置630分别在内存中构建其对应的映射哈希表的表结构及索引哈希表的表结构;然后,第一反序列化处理装置640对持久化存储的对应相应管理者的存储模型进行反序列化处理,如各管理者中的第一反序列化处理装置640并行执行反序列化处理,从而各第一反序列化处理装置640分别顺序获得映射关系表标识、映射关系表中的各键值、索引关系表标识以及索引关系表中的各键值;之后,恢复映射索引表装置650可以根据反序列化处理获得的映射关系表标识将映射关系表中的各键值设置于其构建的映射哈希表的表结构中,恢复映射索引表装置650根据反序列化处理获得的索引关系表标识将索引关系表中的各键值设置于其构建的索引哈希表的表结构中,如各管理者中的恢复映射索引表装置650并行执行将键值设置于表结构中的操作。
一个具体的例子,各管理者中的第一反序列化处理装置640分别通过对具有其标识的存储模型执行反序列处理操作,获得如图2所示的记录,管理者中的恢复映射索引表装置650根据图2中的长度1可以从记录中获取到管理者标识,在确定该管理者标识与其标识相符时,恢复映射索引表装置650根据图2中的长度2获取到表1标识,从而确定出表1标识所对应的其在内存中构建的表结构,恢复映射索引表装置650根据图2中表1标识后面的数据中的长度3和长度4提取出键1和值1,根据长度5和长度6提取出键2和值2,……,直到第二终止标识,恢复映射索引表装置650获知表1中的键值已经全部设置于内存中的相应表中;后续应该是表2的内容,恢复映射索引表装置650按照上述对表1的处理操作将表2中的键值全部设置于内存中的相应表中,直到第一终止标识,恢复映射索引表装置650获知管理者对应的所有映射关系表和索引关系表都已经成功恢复到内存中。
本实施例的用于数据持久化的装置不仅可以针对内存全量数据进行持久化管理,还可以针对单条数据记录更新请求进行持久化管理,该数据记录更新请求主要用于更新内存中的映射关系表和/或者索引关系表中的内容。需要特别说明的是,在本实施例中,客户端发送来的数据记录更新请求可以为序列化后的数据记录更新请求(如使用Protobuf进行序列化后的数据记录更新请求),在这种情况下,本实施例的用于数据持久化的装置可以先使用相应的反序列化方式对该数据记录更新请求进行反序列化处理(如使用Protobuf对客户端发送来的数据记录更新请求进行反序列化处理),然后,再将来自客户端的数据记录更新请求转化为基于请求的存储模型。
作为示例,用于数据持久化的装置将来自客户端的数据记录更新请求转化为基于请求的存储模型的一个具体过程为:首先,形成待序列化请求记录装置660针对来自客户端的数据记录更新请求确定其所对应的管理者标识(如形成待序列化请求记录装置660可以根据数据记录更新请求的发送方信息和/或接收方信息确定该数据记录更新请求所对应的管理者标识);然后,形成待序列化请求记录装置660根据该数据记录更新请求对应的处理方法以及该请求的参数形成待序列化请求记录;当然,形成待序列化请求记录装置660也可以根据该数据记录更新请求对应的管理者标识、该请求所对应的处理方法以及该请求的参数形成待序列化请求记录;之后,第二序列化及存储装置670对该待序列化请求记录进行序列化处理,以形成基于请求的存储模型,并存储该基于请求的存储模型。第二序列化及存储装置670可以将序列化处理后获得的基于请求的存储模型存储于NFS中。第二序列化及存储装置670可以记录基于请求的存储模型的存储位置,从而在第二反序列化处理装置680对基于请求的存储模型进行反序列的过程中,可以方便明确的获知各基于请求的存储模型所对应的管理者。当然,第二反序列化处理装置680也可以通过其他方式获知各基于请求的存储模型对应的管理者,如第二反序列化处理装置680通过对基于请求的存储模型中的管理者标识进行反序列化处理获知该基于请求的存储模型所对应的管理者。
作为示例,形成待序列化请求记录装置660可以将请求所对应的处理方法、输入参数的长度以及输入参数设置于一条待序列化请求记录中,也可以将请求所对应的处理方法、输入参数的长度、输入参数、输出参数的长度以及输出参数设置于一条待序列化请求记录中,形成待序列化请求记录装置660也可以将管理者标识、请求所对应的处理方法、输入参数的长度以及输入参数设置于一条待序列化请求记录中,形成待序列化请求记录装置660还可以将管理者标识、请求所对应的处理方法、输入参数的长度、输入参数、输出参数的长度以及输出参数设置于一条待序列化请求记录中。
作为示例,形成待序列化请求记录装置660所形成的待序列化请求记录的结构一个具体例子如上述实施例一中针对图3的描述,在此不再重复说明。
作为示例,本实施例的用于数据持久化的装置对基于请求的存储模型进行持久化处理的一个具体过程为:首先,第二反序列化处理装置680获取对应相应管理者的基于请求的存储模型,如各管理者中的第二反序列化处理装置680分别从NFS中的相应的位置处读取存储模型,再如,各管理者中的第二反序列化处理装置680通过对基于请求的存储模型中的管理者标识进行反序列化获知该存储模型对应的管理者;之后,第二反序列化处理装置680对对应相应管理者的基于请求的存储模型执行反序列化处理,从而第二反序列化处理装置680可以获得该请求的处理方法以及该请求的参数;更新数据模型装置690根据第二反序列化处理装置680获得的处理方法以及请求的参数(如输入参数)对内存中的数据模型进行更新处理;如更新数据模型装置690更新映射关系表或者索引关系表中的某个值;再如更新数据模型装置690在映射关系表或者索引关系表中增加新的键值等。
实施例五、基于内存快照的用于数据持久化的装置。
作为示例,本实施例基于内存快照的用于数据持久化的装置可以设置于从节点中,本实施例的基于内存快照的用于数据持久化的装置实现内存快照过程如下:
首先,从节点中执行内存快照的进程获取内存中所有的映射哈希表和索引哈希表,即该进程复制内存中的所有映射哈希表和索引哈希表。该进程获取基于内存快照的全局写锁(即Checkpoint全局写锁),以优先执行内存快照,避免在内存快照过程中内存中的映射哈希表和索引哈希表发生变化。该进程还会针对每一个管理者分别创建一个子进程。
其次,每一个子进程中的确定对应表装置600分别获取其所对应的管理者对应的映射哈希表和索引哈希表的列表,以确定需要其进行序列化处理的所有映射哈希表和索引哈希表,该列表中,一个结构化数据集合在内存中的映射哈希表和所有索引哈希表被作为一组,子进程中的第一序列化及存储装置620会针对每一组分别执行序列化处理。
再次,子进程中的形成待序列化记录装置610根据确定对应表装置600所获得的列表中的一组映射哈希表和索引哈希表形成一条包含有管理者标识、映射关系表标识、索引关系表标识、映射关系表中的映射信息以及索引关系表中的索引信息的待序列化记录,如形成图2所示的记录。
再次,子进程中的第一序列化及存储装置620对如图2所示的记录进行序列化处理,并将序列化处理后的结果写入NFS中,写NFS的过程为顺序写过程。
最后,子进程中的第一序列化及存储装置620判断列表中是否还存在未执行序列化处理的映射哈希表和索引哈希表组,如果存在,则继续由形成待序列化记录装置610形成待序列化记录,否则,本次内存快照过程结束。
本实施例的基于内存快照的用于数据持久化的装置实现初始化过程如下:
首先,各管理者中的构建表结构装置630分别在内存中创建相应的映射哈希表的表结构以及索引哈希表的表结构。
其次,管理者中的第一反序列化处理装置640从NFS中读取具有其管理者标识的待反序列化的记录。第一反序列化处理装置640根据针对管理者预先设定的反序列化方法对读取的记录进行反序列化处理。
再次,恢复映射索引表装置650根据反序列化获得的映射哈希表名称或者索引哈希表名称将相应的键值插入到内存中的相应的映射哈希表或者索引哈希表的相应位置。恢复映射索引表装置650判断NFS中是否还存在具有其管理者标识的待反序列化的记录,如果存在,则继续由第一反序列化处理装置640读取后续的具有其管理者标识的待反序列化的记录,如果不存在,则到本次初始化过程结束。
实施例六、基于请求的用于数据持久化的装置。
作为示例,本实施例的基于请求的用于数据持久化的装置通常设置于主节点以及从节点中,本实施例的基于请求的用于数据持久化的装置执行写单条日志信息过程如下:
首先,针对来自客户端的数据记录更新请求,根据数据记录更新请求的接收方和发送方信息确定其所属的管理者。
其次,由相应的管理者中的形成待序列化请求记录装置660确定该数据记录更新请求所对应的方法,并根据管理者标识、方法以及数据记录更新请求中的参数形成待序列化记录,所形成的待序列化记录可以如图3所示。
再次,第二序列化及存储装置670针对形成待序列化请求记录装置660所形成的待序列化记录进行序列化处理,第二序列化及存储装置670调用相应的写操作,以启动将序列化后的记录写入NFS中的操作。第二序列化及存储装置670将序列化后的记录作为日志信息写入NFS中。主节点中的第二序列化及存储装置670启动更新内存中的映射哈希表和索引哈希表中的键值的操作。第二序列化及存储装置670可以通过Applylog过程通知从节点执行内存更新过程。
最后,主节点中的更新数据模型装置690根据该数据记录更新请求所对应的方法以及该数据记录更新请求中的参数对内存中的映射哈希表以及索引哈希表进行更新,如主节点中的更新数据模型装置690修改内存中的映射哈希表以及索引哈希表中的键值,再如在映射哈希表以及索引哈希表中增加相应的键值等。本次写单条日志信息的过程结束。
本实施例的基于请求的用于数据持久化的装置在从节点中执行内存更新过程过程如下:
首先,从节点在接收到主节点的通知后,从节点中的第二反序列化处理装置680启动更新内存中的映射哈希表以及索引哈希表的操作。
其次,第二反序列化处理装置680读取NFS中的具有其管理者标识的待反序列化处理的日志信息。第二反序列化处理装置680获取针对本次内存更新的Checkpoint全局读锁,第二反序列化处理装置680获取到Checkpoint全局读锁表明当前没有针对内存中的映射哈希表和索引哈希表的写操作,从而可以避免在内存更新过程中内存中的映射哈希表和索引哈希表被更新;第二反序列化处理装置680针对获取的日志信息执行反序列化处理,以获得针对数据记录更新请求的方法以及数据记录更新请求的参数。
最后,更新数据模型装置690根据反序列化后获得的方法以及参数对从节点内存中的映射哈希表和索引哈希表进行更新操作,如修改映射哈希表以及索引哈希表中的键值,再如在映射哈希表以及索引哈希表中增加相应的键值等。本次内存更新过程结束。
需要注意的是,本发明可以在软件和/或者软件与硬件的组合体中被实施,例如,本发明的各个装置可采用专用集成电路(ASIC)或者任何其他类似硬件设备来实现。在一个实施例中,本发明的软件程序可以通过处理器执行以实现上文所述步骤或功能。同样地,本发明的软件程序(包括相关的数据结构)可以被存储到计算机可读设置介质中,例如,RAM存储器、磁或者光驱动器或软磁盘及类似设备。另外,本发明的一些步骤或功能可采用硬件来实现,例如,作为与处理器配合从而执行各个步骤或功能的电路。
对于本领域技术人员而言,显然,本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一方面来看,均应该将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明来限定,因此,旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应该将权利要求中的任何附图标记视为限制所涉及的权利要求。此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第一以及第二等词语用来表示名称,而并不表示任何特定顺序。
虽然前面特别示出并且描述了示例性实施例,但是本领域技术人员将会理解的是,在不背离权利要求书的精神和范围的情况下,在其形式和细节方面可以有所变化。这里所寻求的保护在所附权利要求书中做了阐述。
Claims (20)
1.一种用于数据持久化的方法,其中,所述方法包括下述步骤:
确定与管理者对应的映射关系表和索引关系表,其中,所述映射关系表和索引关系表为结构化数据集合在内存中的数据模型;
根据映射关系表标识、映射关系表中的映射信息、索引关系表标识以及索引关系表中的索引信息形成一条待序列化记录;
对待序列化记录进行序列化处理形成基于内存快照的存储模型并存储。
2.根据权利要求1所述的用于数据持久化的方法,其中,所述结构化数据集合包括:数据库中的表或者由数据库中的相互之间具有关联关系的多张表组合形成的表。
3.根据权利要求1所述的用于数据持久化的方法,其中,
所述映射关系表包括:映射哈希表,且映射哈希表中的每一个值对应所述结构化数据集合中的一条数据记录;
所述索引关系表包括:索引哈希表,且索引哈希表中的每一个值对应基于所述结构化数据集合而获得的一条索引关系。
4.根据权利要求3所述的用于数据持久化的方法,其中,所述映射哈希表中的值包括:哈希表。
5.根据权利要求3所述的用于数据持久化的方法,其中,所述待序列化记录的结构包括:
管理者标识的长度、管理者标识、映射关系表标识的长度、映射关系表标识、描述映射关系表中的各键值长度的信息、映射关系表中的各键值、映射关系表终止标识、索引关系表标识的长度、索引关系表标识、描述索引关系表中的各键值长度的信息、索引关系表中的各键值、索引关系表终止标识以及待序列化记录终止标识。
6.根据权利要求1所述的用于数据持久化的方法,其中,所述对所述待序列化记录进行序列化处理的步骤包括:
将所述待序列化记录序列化为二进制编码的基于内存快照的存储模型。
7.根据权利要求3所述的用于数据持久化的方法,其中,所述方法还包括:
在内存中构建各管理者对应的映射哈希表以及索引哈希表的表结构;
对对应不同管理者的基于内存快照的存储模型并行进行反序列化处理,以获得映射关系表标识、映射关系表中的各键值、索引关系表标识和索引关系表中的各键值;
根据所述获得的映射关系表标识和索引关系表标识将所述映射关系表中的各键值以及索引关系表中的各键值设置于所述构建的相应的表结构中。
8.根据权利要求1至7中任一权利要求所述的用于数据持久化的方法,其中,所述方法还包括:
对对应不同管理者的数据记录更新请求分别根据数据记录更新请求所对应的处理方法以及所述请求的参数形成待序列化请求记录;
对所述待序列化请求记录进行序列化处理,以形成基于请求的存储模型并存储。
9.根据权利要求8所述的用于数据持久化的方法,其中,所述待序列化请求记录的结构包括:
所述请求所对应的处理方法、输入参数的长度以及输入参数;或者
所述请求所对应的处理方法、输入参数的长度、输入参数、输出参数的长度以及输出参数;或者
管理者标识、所述请求所对应的处理方法、输入参数的长度以及输入参数;或者
管理者标识、所述请求所对应的处理方法、输入参数的长度、输入参数、输出参数的长度以及输出参数。
10.根据权利要求8所述的用于数据持久化的方法,其中,所述方法还包括:
对对应不同管理者的基于请求的存储模型并行执行反序列化处理,以获得处理方法以及请求的参数;
根据所述获得的处理方法以及请求的参数对内存中的数据模型进行更新处理。
11.一种用于数据持久化的装置,其中,所述用于数据持久化的装置包括:
用于确定与管理者对应的映射关系表和索引关系表的装置,其中,所述映射关系表和索引关系表为结构化数据集合在内存中的数据模型;
用于根据映射关系表标识、映射关系表中的映射信息、索引关系表标识以及索引关系表中的索引信息形成一条待序列化记录的装置;
用于对待序列化记录进行序列化处理形成基于内存快照的存储模型并存储的装置。
12.根据权利要求11所述的用于数据持久化的装置,其中,所述结构化数据集合包括:数据库中的表或者由数据库中的相互之间具有关联关系的多张表组合形成的表。
13.根据权利要求1所述的用于数据持久化的装置,其中,
所述映射关系表包括:映射哈希表,且映射哈希表中的每一个值对应所述结构化数据集合中的一条数据记录;
所述索引关系表包括:索引哈希表,且索引哈希表中的每一个值对应基于所述结构化数据集合而获得的一条索引关系。
14.根据权利要求13所述的用于数据持久化的装置,其中,所述映射哈希表中的值包括:哈希表。
15.根据权利要求13所述的用于数据持久化的装置,其中,所述待序列化记录的结构包括:
管理者标识的长度、管理者标识、映射关系表标识的长度、映射关系表标识、描述映射关系表中的各键值长度的信息、映射关系表中的各键值、映射关系表终止标识、索引关系表标识的长度、索引关系表标识、描述索引关系表中的各键值长度的信息、索引关系表中的各键值、索引关系表终止标识以及待序列化记录终止标识。
16.根据权利要求11所述的用于数据持久化的装置,其中,所述用于对所述待序列化记录进行序列化处理的装置具体用于:
将所述待序列化记录序列化为二进制编码的基于内存快照的存储模型。
17.根据权利要求13所述的用于数据持久化的装置,其中,所述用于数据持久化的装置还包括:
用于在内存中构建各管理者对应的映射哈希表以及索引哈希表的表结构的装置;
用于对对应不同管理者的基于内存快照的存储模型并行进行反序列化处理,以获得映射关系表标识、映射关系表中的各键值、索引关系表标识和索引关系表中的各键值的装置;
用于根据所述获得的映射关系表标识和索引关系表标识将所述映射关系表中的各键值以及索引关系表中的各键值设置于所述构建的相应的表结构中的装置。
18.根据权利要求11至17中任一权利要求所述的用于数据持久化的装置,其中,所述用于数据持久化的装置还包括:
用于对对应不同管理者的数据记录更新请求分别根据数据记录更新请求所对应的处理方法以及所述请求的参数形成待序列化请求记录的装置;
用于对所述待序列化请求记录进行序列化处理,以形成基于请求的存储模型并存储的装置。
19.根据权利要求18所述的用于数据持久化的装置,其中,所述待序列化请求记录的结构包括:
所述请求所对应的处理方法、输入参数的长度以及输入参数;或者
所述请求所对应的处理方法、输入参数的长度、输入参数、输出参数的长度以及输出参数;或者
管理者标识、所述请求所对应的处理方法、输入参数的长度以及输入参数;或者
管理者标识、所述请求所对应的处理方法、输入参数的长度、输入参数、输出参数的长度以及输出参数。
20.根据权利要求18所述的用于数据持久化的装置,其中,所述用于数据持久化的装置还包括:
用于对对应不同管理者的基于请求的存储模型并行执行反序列化处理,以获得处理方法以及请求的参数的装置;
用于根据所述获得的处理方法以及请求的参数对内存中的数据模型进行更新处理的装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610835829.2A CN106446140A (zh) | 2016-09-20 | 2016-09-20 | 用于数据持久化的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610835829.2A CN106446140A (zh) | 2016-09-20 | 2016-09-20 | 用于数据持久化的方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN106446140A true CN106446140A (zh) | 2017-02-22 |
Family
ID=58165667
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610835829.2A Pending CN106446140A (zh) | 2016-09-20 | 2016-09-20 | 用于数据持久化的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106446140A (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108196662A (zh) * | 2017-12-28 | 2018-06-22 | 中国科学院计算技术研究所 | 哈希分区加速器 |
CN109389880A (zh) * | 2017-08-11 | 2019-02-26 | 波音公司 | 包括使用嵌套哈希表的消息回放的资产模拟 |
CN109857991A (zh) * | 2018-12-25 | 2019-06-07 | 北京像素软件科技股份有限公司 | 数据存储方法、装置及电子设备 |
CN111461343A (zh) * | 2020-03-13 | 2020-07-28 | 北京百度网讯科技有限公司 | 模型参数更新方法及其相关设备 |
CN111600924A (zh) * | 2020-03-30 | 2020-08-28 | 北京和欣运达科技有限公司 | 一种数据通讯方法 |
CN112416940A (zh) * | 2020-11-27 | 2021-02-26 | 深信服科技股份有限公司 | 键值对存储方法、装置、终端设备以及存储介质 |
CN113722548A (zh) * | 2021-08-30 | 2021-11-30 | 北京天空卫士网络安全技术有限公司 | 一种业务系统中引用关系的处理方法和装置 |
CN116521198A (zh) * | 2023-04-13 | 2023-08-01 | 广州汽车集团股份有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060149772A1 (en) * | 2005-01-04 | 2006-07-06 | International Business Machines Corporation | Method for reducing a data repository |
CN102346765A (zh) * | 2011-09-16 | 2012-02-08 | 大唐移动通信设备有限公司 | 一种查询内存数据的方法及装置 |
CN102654878A (zh) * | 2011-03-04 | 2012-09-05 | 迈普通信技术股份有限公司 | 嵌入式系统中分布式数据库的数据操作方法及板卡 |
CN104408073A (zh) * | 2014-10-31 | 2015-03-11 | 广州华多网络科技有限公司 | 数据操作方法和装置 |
US20150074071A1 (en) * | 2013-09-12 | 2015-03-12 | Neustar,Inc. | Method and system for performing transactional updates in a key-value store |
-
2016
- 2016-09-20 CN CN201610835829.2A patent/CN106446140A/zh active Pending
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060149772A1 (en) * | 2005-01-04 | 2006-07-06 | International Business Machines Corporation | Method for reducing a data repository |
CN102654878A (zh) * | 2011-03-04 | 2012-09-05 | 迈普通信技术股份有限公司 | 嵌入式系统中分布式数据库的数据操作方法及板卡 |
CN102346765A (zh) * | 2011-09-16 | 2012-02-08 | 大唐移动通信设备有限公司 | 一种查询内存数据的方法及装置 |
US20150074071A1 (en) * | 2013-09-12 | 2015-03-12 | Neustar,Inc. | Method and system for performing transactional updates in a key-value store |
CN104408073A (zh) * | 2014-10-31 | 2015-03-11 | 广州华多网络科技有限公司 | 数据操作方法和装置 |
Non-Patent Citations (4)
Title |
---|
SUBRAHMANYAM ALLAMARAJU等著: "《J2EE服务器端高级编程》", 30 September 2007, 机械工业出版社 * |
佚名: "HDFS之SequenceFile和MapFile", 《学步园》 * |
叶子的分享: "持久化和序列化的关系", 《博客园》 * |
高晓燕等主编: "《大学计算机基础》", 31 December 2011, 北京交通大学出版社 * |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109389880B (zh) * | 2017-08-11 | 2022-07-15 | 波音公司 | 包括使用嵌套哈希表的消息回放的资产模拟 |
CN109389880A (zh) * | 2017-08-11 | 2019-02-26 | 波音公司 | 包括使用嵌套哈希表的消息回放的资产模拟 |
US11468781B2 (en) | 2017-08-11 | 2022-10-11 | The Boeing Company | Simulation of an asset including message playback using nested hash tables |
CN108196662B (zh) * | 2017-12-28 | 2021-03-30 | 中国科学院计算技术研究所 | 哈希分区加速器 |
CN108196662A (zh) * | 2017-12-28 | 2018-06-22 | 中国科学院计算技术研究所 | 哈希分区加速器 |
CN109857991A (zh) * | 2018-12-25 | 2019-06-07 | 北京像素软件科技股份有限公司 | 数据存储方法、装置及电子设备 |
CN109857991B (zh) * | 2018-12-25 | 2023-08-18 | 北京像素软件科技股份有限公司 | 数据存储方法、装置及电子设备 |
CN111461343A (zh) * | 2020-03-13 | 2020-07-28 | 北京百度网讯科技有限公司 | 模型参数更新方法及其相关设备 |
CN111461343B (zh) * | 2020-03-13 | 2023-08-04 | 北京百度网讯科技有限公司 | 模型参数更新方法及其相关设备 |
CN111600924A (zh) * | 2020-03-30 | 2020-08-28 | 北京和欣运达科技有限公司 | 一种数据通讯方法 |
CN111600924B (zh) * | 2020-03-30 | 2022-11-29 | 北京和欣运达科技有限公司 | 一种数据通讯方法 |
CN112416940A (zh) * | 2020-11-27 | 2021-02-26 | 深信服科技股份有限公司 | 键值对存储方法、装置、终端设备以及存储介质 |
CN113722548A (zh) * | 2021-08-30 | 2021-11-30 | 北京天空卫士网络安全技术有限公司 | 一种业务系统中引用关系的处理方法和装置 |
CN116521198A (zh) * | 2023-04-13 | 2023-08-01 | 广州汽车集团股份有限公司 | 数据处理方法、装置、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106446140A (zh) | 用于数据持久化的方法及装置 | |
TWI718375B (zh) | 基於區塊鏈的資料處理方法及設備 | |
EP3120261B1 (en) | Dependency-aware transaction batching for data replication | |
US7702658B2 (en) | Method for optimistic locking using SQL select, update, delete, and insert statements | |
US9830372B2 (en) | Scalable coordination aware static partitioning for database replication | |
JP2023546249A (ja) | トランザクション処理方法、装置、コンピュータ機器及びコンピュータプログラム | |
CN109219813B (zh) | 用于cad描述的转换的方法、电子设备和计算机可读介质 | |
CN108536752A (zh) | 一种数据同步方法、装置和设备 | |
CN109643309A (zh) | 用于对跳跃表数据结构执行范围查询的系统和方法 | |
CN108427728A (zh) | 元数据的管理方法、设备及计算机可读介质 | |
JP2016505956A (ja) | 最適化されたデータサブセット化のための方法、装置及びコンピュータ読み取り可能媒体 | |
CN109522332A (zh) | 客户信息数据合并方法、装置、设备及可读存储介质 | |
CN108628885B (zh) | 一种数据同步方法、装置及存储设备 | |
CN110019530A (zh) | 基于分布式数据库的事务处理方法及装置 | |
CN107784055A (zh) | 基于非关系型数据库的事务处理方法和装置 | |
CN106959989A (zh) | 主备数据库的同步方法及装置 | |
CN111831744B (zh) | Dapp的链上数据检索系统、方法及介质 | |
CN108629026A (zh) | 一种全文索引的更新方法、装置、设备和存储介质 | |
CN105843809A (zh) | 数据处理方法和装置 | |
CN111797278A (zh) | 一种映射关联对象与关系的方法 | |
CN110888888A (zh) | 人员关系分析方法、装置、电子设备及存储介质 | |
CN112970011A (zh) | 记录查询优化中的谱系 | |
US20110191549A1 (en) | Data Array Manipulation | |
CN110647535B (zh) | 一种将业务数据更新至Hive的方法、终端及存储介质 | |
AU2016100156A4 (en) | Data Structure, Model for Populating a Data Structure and Method of Programming a Processing Device Utilising a Data Structure |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20170222 |