关系型数据库的数据存储方法和存储系统.pdf

上传人:小** 文档编号:1565234 上传时间:2018-06-24 格式:PDF 页数:14 大小:482.85KB
返回 下载 相关 举报
摘要
申请专利号:

CN201110415135.0

申请日:

2011.12.13

公开号:

CN103164431A

公开日:

2013.06.19

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||实质审查的生效IPC(主分类):G06F 17/30申请日:20111213|||公开

IPC分类号:

G06F17/30

主分类号:

G06F17/30

申请人:

北京神州泰岳软件股份有限公司

发明人:

国兴旺

地址:

100089 北京市海淀区万泉庄路28号万柳新贵大厦A座6层601室

优先权:

专利代理机构:

北京市隆安律师事务所 11323

代理人:

权鲜枝

PDF下载: PDF下载
内容摘要

本发明公开一种关系型数据库的数据存储方法和存储系统,既能满足存储容量限制的要求,又保证了数据读取性能。本发明实施例提供的数据存储方法包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述方法包括:将数据表的主键存入新生代状态的索引分区表中;当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。

权利要求书

权利要求书一种关系型数据库的数据存储方法,其特征在于,包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述方法包括:
将数据表的主键存入新生代状态的索引分区表中;
当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;
当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。
根据权利要求1所述的方法,其特征在于,所述方法还包括:在初始时,创建两个结构相同的空的索引分区表,设置其中一个为新生代状态,另一个为旧生代状态;
将数据表主键先存入新生代状态的索引分区表中;
当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,原旧生代状态的索引分区表设置为新生代状态。
根据权利要求1或2所述的方法,其特征在于,为索引分区表设置极限因子,通过如下方式获知新生代状态的索引分区表存储满:
当新生代状态的索引分区表的存储率达到极限因子时,获知新生代状态的索引分区表已存储满。
根据权利要求3所述的方法,其特征在于,所述方法还包括:
每隔预定时间检测新生代状态的索引分区表的存储率;
判断所述新生代状态的索引分区表的存储率达到填充因子包括:
根据检测结果判断该索引分区表的存储率是否达到填充因子;以及,
判断所述新生代状态的索引分区表存储满包括:
根据检测结果判断该索引分区表的存储率是否达到极限因子。
根据权利要求4所述的方法,其特征在于,所述索引分区表自身的索引分区表主键由依次递增的数值构成,所述每隔预定时间检测新生代状态的索引分区表的存储率包括
每隔预定时间检测新生代状态的索引分区表中最后一个索引分区表主键的数值,根据该索引分区表主键的数值获知该索引分区表的存储率。
根据权利要求4所述的方法,其特征在于,所述方法还包括:
根据接收到的调整指示,调整填充因子、极限因子、和/或所述预定时间的数值。
根据权利要求3所述的方法,其特征在于,所述方法还包括:
当删除所述主键对应的索引数据项时,若该索引数据项中包括正在被使用的第一索引数据项,则保留该第一索引数据项,并将第一索引数据项对应的主键从旧生代状态的索引分区表中写入新生代状态的分区表中;以及,
当旧生代状态的索引分区表中的数据被访问时,将被访问的数据转移至新生代状态的索引分区表中。
根据权利要求3所述的方法,其特征在于,所述索引分区表中为数据表的每一主键设置有时间戳信息,所述方法还包括:
当数据表的主键所对应的索引数据项发生变化时,索引分区表中更新该数据表主键所对应的时间戳信息。
一种存储系统,其特征在于,所述系统包括设置有存储控制装置的关系型数据库,所述关系型数据库中包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述存储控制装置包括存储单元和更新剔除单元,
所述存储单元,用于将数据表的主键存入新生代状态的索引分区表中;
所述更新剔除单元,用于当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;以及,当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。
根据权利要求9所述的系统,其特征在于,所述系统还包括定时服务器,
所述定时服务器,用于每隔预定时间检测新生代分区表的存储率是否达到的填充因子,并将检测结果通知所述更新剔除单元;以及,
所述定时服务器,还用于每隔预定时间检测新生代状态的索引分区表的存储率,判断该索引分区表的存储率是否达到极限因子,并将检测结果通知更新剔除单元;所述更新剔除单元,用于当新生代状态的索引分区表的存储率达到极限因子时,确认新生代状态的索引分区表存储满。

说明书

说明书关系型数据库的数据存储方法和存储系统
技术领域
本发明涉及数据存储技术领域,特别涉及一种关系型数据库的数据存储方法和存储系统。
背景技术
关系型数据库是建立在关系模型基础上的数据库,是目前最常用的数据库类型之一,广泛应用在各种软件系统和互联网项目中。
在传统软件系统或互联网项目的构建中,在很多时候会遇到如下场景:
网络中存在一个存储有海量数据的子系统B,能够提供网络运行所需的各种数据,然而由于网络布局或者数据读取速度的考虑,通常不采用直接与子系统B进行数据交互的方法,而是设置一个规模较小的子系统A,子系统A依赖于子系统B中的数据,通过对子系统A中数据的读写,实现与子系统B中数据的交互。
针对如何实现上述场景中的子系统A,现有方案中还没有提出较明确的解决方案,若在每次访问子系统A时,子系统A都需要从子系统B中同步获取数据,则数据读取性能会非常低下;若采用将从子系统B中得到的数据都存储在子系统A中,由于子系统A的存储容量限制,在实际操作中的可行性非常小。
发明内容
本发明提供的一种关系型数据库的数据存储方法和存储系统,以解决现有技术中每次访问时都需要同步获取数据造成数据读取性能低下或是无法满足系统存储容量限制的问题。
为达到上述目的,本发明实施例采用了如下技术方案:
本发明实施例提供了一种关系型数据库的数据存储方法,该方法包括:包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述方法包括:
将数据表的主键存入新生代状态的索引分区表中;
当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;
当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。
本发明实施例还提供了一种存储系统,所述系统包括设置有存储控制装置的关系型数据库,所述关系型数据库中包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述存储控制装置包括设置单元、存储单元和更新剔除单元,
所述存储单元,用于将数据表的主键存入新生代状态的索引分区表中;
所述更新剔除单元,用于当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;以及,当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。
本发明实施例的有益效果是:
本发明实施例采用两个结构相同的索引分区表交替进行数据存储,并将最新的数据存储在处于新生代状态的索引分区表中,实现了一种基于LRU机制的关系型数据库存储方案。
利用本发明实施例的存储方案,能够较好地对网络中存储有海量数据的子系统中的数据进行筛选,仅存储该子系统中的部分数据,既满足了存储容量限制的要求,又保证了数据读取性能。
附图说明
图1为本发明实施例一提供的一种关系型数据库的数据存储方法流程示意图;
图2为本发明实施例二提供的一个具体应用场景的示意图;
图3为本发明实施例三提供的一种存储系统的结构示意图;
图4为本发明实施例三提供的一种存储控制装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
本方案的主要技术构思在于,通过对数据表的主键(Primary Key,PK)建立两个结构一致的索引分区表作为基本的数据结构,当前正执行主键存储的一个的索引分区表为处于新生代状态的索引分区表(或称之为新生代分区表),另一个索引分区表为处于旧生代状态的索引分区表(或称之为旧生代分区表)。在运行过程中,通过两个索引分区表所存储的数据的新旧角色的替换来达到数据筛选,剔除旧数据并回收相应的存储空间。
参见图1,为本发明实施例一提供的一种关系型数据库的数据存储方法,该方法包括:
11:设置两个结构相同的索引分区表存储数据表的主键,所述索引分区表包括第一索引分区表(如表示为L1Index)和第二索引分区表(如表示为L2Index),在初始时,将第一索引分区表设置为新生代状态,将第二索引分区表设置为旧生代状态,下文中将处于新生代状态的索引分区表称之为新生代索引分区表,将处于旧生代状态的索引分区表称之为旧生代索引分区表。本方案并不对具体的名称进行限定,上述的“新生代”和“旧生代”指示了索引分区表中存储数据的新旧状态,新生代状态下的索引分区表存储了当前时间段内最新增加的数据以及活跃度较高的数据,而旧生代状态下的索引分区表中的数据存储了当前时间段之前的数据。
为了便于清楚描述本发明实施例的技术方案,在发明的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定。
本发明实施例中仍以存储海量数据的子系统B和规模较小且依赖于子系统B的子系统A的场景进行说明,其中,子系统A上具有关系型数据库(如Mysql),关系型数据库中的数据以行和列的形式存储,一组行和列构成一个数据表,由一个或多个数据表构成关系型数据库。在该关系型数据库中使用了本方案的数据存储方法。
当存储的数据为涉及用户资料的数据时,数据表中存储用户资料(UserInfo),数据表的主键为用户标识(UserId)。这时,所设置的索引分区表中存储UserId,索引分区表自身的索引分区表主键表示为Id。
参见表1,数据表中存储的UserInfo可以包括姓名(Name)、性别(Gender)、生日(Birthday)、移动电话(Mobile)、公司(Company)、血型(Blood)、主页(Homepage)、电子邮件(Email)、其他信息(OtherInfo)等内容。
表1

参见表2,显示了一种L1Index和L12ndex的示例。索引分区表中还可以设置时间戳(Timestamp)信息,通常在发生用户资料的查询事件和用户资料的变更事件时,需要对时间戳信息进行更新。利用该时间戳信息可以查找最新的数据,获知最新数据的执行情况等。
表2
  Id  UserId  Timestamp  1  200034731  2011‑11‑18 12:20:19  2  200034732  2011‑11‑18 12:20:23  3  200034733  2011‑11‑18 12:20:50  ...  ...  ...
若mysql中UserInfo的存储能力是2000万时,两个索引分区表L1Index和L12ndex的存储能力可以分别设置为为1000万。
初始时所设置的第一索引分区表和第二索引分区表中存储的内容为空。
12:将数据表的主键先存入第一索引分区表中。
当前的新生代分区表为第一索引分区表,将数据存储至第一索引分区表。在本方案中当前正在进行数据存储的索引分区表都被设置为新生代分区表中,即新生代分区中存储的是最新的数据。
13:当第一索引分区表存储满时,将第一索引分区表作为旧生代分区表,将第二索引分区表作为新生代分区表。
进一步的,本实施例中为索引分区表设置极限因子,通过如下方式获知新生代状态的索引分区表存储满:
当新生代状态的索引分区表的存储率达到极限因子时,获知新生代状态的索引分区表已存储满。
上述的极限因子指示第一索引分区表的存储率已接近最大允许的存储能力,如100%。这时,将L1Index和L12ndex的角色互换。
进一步的,本方案中在所述索引分区表中依次存储数据表的主键,参见表2,所述索引分区表自身的索引分区表主键(Id)由按顺序依次递增的数值构成,如从0开始顺序加1的自然数。这时,根据每个索引分区表中最后一个索引分区表主键的数值(即索引分区表主键中的最大数值)获知该索引分区表的存储率。这种自增列的处理方式避免了传统的使用Mysql的count函数统计已使用空间所带来的额外计算量,能够快速获知索引分区表的空间占用情况,提高存储效率。
14:将新增加的主键存入第二索引分区表中。
当Mysql从子系统A中接收到新增加的索引数据时,会产生新的主键。
由于第二索引分区表还未被使用,内容为空,这时,新增加的主键会直接被送入第二索引分区表。
15:在当前的新生代分区表的存储满之前,如在当前的新生代分区表的存储率达到极限因子之前,删除当前的旧生代分区表中存储的主键以及该主键对应的索引数据项,并获取第三索引分区表,作为下一次使用的新生代分区表。
本步骤中当前的新生代分区表为第二索引分区表,当第二索引分区表也写满数据后,则L1Index和L12ndex都存满了数据,必须为后续新增的数据设置新的存储空间。
本方案在当前的新生代分区表存满之前,生成或创建一个全新的空索引分区表(如第三索引分区表),该新的空索引分区表具有与L1Index和L12ndex相同的结构,本方案用于存储数据表主键的索引分区表都具有相同的结构。
具体的,本方案中设置了为索引分区表设置填充因子,如90%,每隔预定时间检测新生代分区表的存储率,根据检测结果判断该索引分区表的存储率是否达到填充因子,当达到填充因子时,删除当前的旧生代数据,包括当前的旧生代分区表中存储的主键以及该主键对应的索引数据项。通过删除操作,释放旧数据所占用的空间,以满足容量限制。
上述第三索引分区表可以表示为L3Index,然而,由于在删除了旧生代数据后,旧生代分区表(L1Index)也会被删除或不再使用,可以用L1Index表示第三索引分区表,即Mysql中存在的两个索引分区表可以始终采用L1Index和L12ndex来表示。
进一步的,在获取上述第三索引分区表时,也可以采用清空后的旧生代分区表实现,然而,考虑直接删除旧生代分区表(即第一索引分区表)并生成一个新的空表的操作更加便捷、快速,本方案中在Mysql中的两个索引分区表都存满数据后,删除旧生代分区表,并创建(Create)一个新的空索引分区表作为下一次使用的新生代分区表。
进一步的,上述检测时所间隔的预定时间,以及所使用的填充因子和极限因子的具体数值都可以根据具体的应用场景进行调整。当应用场景发生变化时,根据接收到的调整指示信息,对填充因子、极限因子和预定时间中的一个或多个进行调整。例如,当主键存入索引分区表中速度变快时,缩短预定时间的数值,当索引分区表的容量限制降低时,即索引分区表所能存储的数据量变大时,提高填充因子的数值。
16:在当前的新生代分区表的存储率达到极限因子时,将第二索引分区表作为旧生代分区表。
第二索引分区表的角色从新生代分区表变化为旧生代分区表。
17:并将新增加的主键存入所述获取到的第三索引分区表中。
第三索引分区表为当前的新生代分区表,对该第三索引分区表采用上述相同的方式进行处理,本方法还包括:
在第三索引分区表的存储率达到极限因子之前,删除第二索引分区表中存储的主键以及该主键对应的索引数据项,获取第四索引分区表,作为再一次使用的当前分区表;
在第三索引分区表的存储率达到极限因子时,将第三索引分区表作为备用分区表,并将新增加的主键存入所述获取到的第四索引分区表中;
其中,所述第三索引分区表、第四索引分区表与第一索引分区表和第二索引分区表具有相同的结构。
对第四索引分区表以及后续新生成的索引分区表的处理方式与上述第三索引分区表的处理方式相同,不再赘述。
由上所述,本方案中所提供的数据存储过程中(初始点除外),包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,本方法包括如下操作:
将数据表的主键存入新生代状态的索引分区表中;
当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;
当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。
通过重复执行上述处理,在关系型数据库中实现了一种基于最近最少使用(Least Recently Used,LRU)的存储机制。
进一步的,本方案中当删除所述主键对应的索引数据项时,若该索引数据项中包括正在被使用的第一索引数据项,则保留该第一索引数据项,并将第一索引数据项对应的主键写入当前的新生代分区表中。以及,当旧生代状态的索引分区表中的数据被访问时,将被访问的旧生代分区表中的数据转移至新生代分区表中。通过这种处理,将系统中活跃的数据都筛选并保存在新生代分区表中,以提高数据访问的性能。
本发明实施例采用两个结构相同的索引分区表交替进行数据存储,并将最新的数据存储在处于新生代状态的索引分区表中,实现了一种基于最近最少使用(Least Recently Used,LRU)机制的关系型数据库存储方案。
利用本发明实施例的存储方案,能够较好地对网络中存储有海量数据的子系统中的数据进行筛选,仅存储该子系统中的部分数据,既满足了存储容量限制的要求,又保证了数据读取性能。
本发明实施例二对本方案的一个具体应用场景进行说明,参见图2,数据访问操作包括步骤1至3,在数据访问执行的同时,还可以执行数据回收和数据同步操作,数据回收操作步骤4至8,数据同步操作包括步骤9。
1:客户端向中间件服务器发送访问请求。
中间件服务器能够对关系型数据库进行访问和控制。
2:中间件服务器根据该访问请求在关系型数据库(如Mysql)中查找数据。
查找数据时,先在关系型数据库的索引分区表中查找索引分区表,得到访问数据所对应的主键,然后根据该主键查找到被访问数据。
3:关系型数据库通过中间件服务器将查询结果返回至客户端。
4:定时服务器定时检查是否达到回收条件。
该回收条件即是新生代分区表的存储率达到填充因子(如90%)。
5:关系型数据库向定时服务器返回查询结果。
6:当检测到的新生代分区表的存储率达到填充因子时,确定满足回收条件。
7:定时服务器触发关系型数据库中旧生代数据的回收。
关系型数据库删除旧生代分区表中存储的主键以及该主键对应的索引数据项,释放这些数据所占用的空间。
8:关系型数据库向定时服务器返回数据回收结果。
9:外系统同步服务对关系型数据库中的新生代分区表中的数据进行同步。
当系统中的数据发生更改时,例如系统所存储的用户信息发生变化时,当变化后的用户信息存储在新生代分区表中,外系统同步服务将新生代分区表中的数据修改为与变化后的用户信息保持一致,或是,当变化后的用户信息存储在旧生代分区表中,现将该信息转移至新生代分区表中,再将该信息修改为与变化后的用户信息保持一致。
上述中间件和外系统同步服务都可以客户端类库实现。上述定时服务器可以一台普通计算机实现。
由上所述,本发明实施例至少具有如下优点:
1、在关系型数据库中实现了一种基于LRU机制的存储方案;
2、通过填充因子,定时器启动时间等参数可配置,可根据不同的场景调整容量限制,应用范围较广;
3、采用自增列方式计算已经使用空间,计算效率较高;
4、回收空间时基于新旧生代的替换机制,将筛选出的活跃数据保留在新生代分区表中,不但保证了数据访问效率,降低对存储空间的要求,;
5、定时器服务器和所使用的客户端类库分别独立运行,避免了并行开销。
参见图3,本发明实施例三还提供了一种存储系统,所述系统包括设置有存储控制装置的关系型数据库31、定时服务器32和中间件服务器33。中间件服务器33能够对关系型数据库进行访问和控制。
如图4所示,所述存储控制装置包括设置单元41、存储单元42和更新剔除单元43,其中:
所述设置单元41,用于为索引分区表设置填充因子,以及在初始时创建两个结构相同的空的索引分区表,设置其中一个为新生代状态,另一个为旧生代状态;
所述存储单元42,用于将数据表的主键存入新生代状态的索引分区表中;
所述更新剔除单元43,用于当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;以及,当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。
进一步的,上述设置单元41,还用于为索引分区表设置极限因子,所述定时服务器32,还用于每隔预定时间检测新生代状态的索引分区表的存储率,判断该索引分区表的存储率是否达到极限因子,并将检测结果通知更新剔除单元;所述更新剔除单元43,用于当新生代状态的索引分区表的存储率达到极限因子时,确认新生代状态的索引分区表存储满。
进一步的,所述定时服务器32,还用于每隔预定时间检测新生代分区表的存储率是否达到的填充因子,并将检测结果通知所述更新剔除单元43。
进一步的,本实施例中所述索引分区表自身的索引分区表主键由依次递增的数值构成,所述定时服务器32,每隔预定时间检测新生代状态的索引分区表中最后一个索引分区表主键的数值,根据该索引分区表主键的数值获知该索引分区表的存储率,得到检测结果。
进一步的,本方案中的更新剔除单元43,还用于当删除所述主键对应的索引数据项时,若该索引数据项中包括正在被使用的第一索引数据项,则保留该第一索引数据项,并将第一索引数据项对应的主键写入当前的新生代分区表中。以及,当旧生代分区表的数据被访问时,将被访问的旧生代分区表中的数据转移至新生代分区表中。通过这种处理,将系统中活跃的数据都筛选并保存在新生代分区表中,以提高数据访问的性能。
本发明系统实施例中各设备和单元的具体工作方式可以参见本发明方法实施例中的相关内容。
本发明实施例采用两个结构相同的索引分区表交替进行数据存储,并将最新的数据存储在作为新生代分区表的索引分区表中,实现了一种基于LRU机制的关系型数据库存储方案。
利用本发明实施例的存储方案,能够较好地对网络中存储有海量数据的子系统中的数据进行筛选,仅存储该子系统中的部分数据,既满足了存储容量限制的要求,又保证了数据读取性能。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。

关系型数据库的数据存储方法和存储系统.pdf_第1页
第1页 / 共14页
关系型数据库的数据存储方法和存储系统.pdf_第2页
第2页 / 共14页
关系型数据库的数据存储方法和存储系统.pdf_第3页
第3页 / 共14页
点击查看更多>>
资源描述

《关系型数据库的数据存储方法和存储系统.pdf》由会员分享,可在线阅读,更多相关《关系型数据库的数据存储方法和存储系统.pdf(14页珍藏版)》请在专利查询网上搜索。

1、(10)申请公布号 CN 103164431 A(43)申请公布日 2013.06.19CN103164431A*CN103164431A*(21)申请号 201110415135.0(22)申请日 2011.12.13G06F 17/30(2006.01)(71)申请人北京神州泰岳软件股份有限公司地址 100089 北京市海淀区万泉庄路28号万柳新贵大厦A座6层601室(72)发明人国兴旺(74)专利代理机构北京市隆安律师事务所 11323代理人权鲜枝(54) 发明名称关系型数据库的数据存储方法和存储系统(57) 摘要本发明公开一种关系型数据库的数据存储方法和存储系统,既能满足存储容量限制的。

2、要求,又保证了数据读取性能。本发明实施例提供的数据存储方法包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述方法包括:将数据表的主键存入新生代状态的索引分区表中;当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。(51)Int.Cl.权利要求书2页 说明书7页 附图4页(19)中华人民共和。

3、国国家知识产权局(12)发明专利申请权利要求书2页 说明书7页 附图4页(10)申请公布号 CN 103164431 ACN 103164431 A1/2页21.一种关系型数据库的数据存储方法,其特征在于,包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述方法包括:将数据表的主键存入新生代状态的索引分区表中;当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;当新生代状态的索引分区表存储满时,将该。

4、索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。2.根据权利要求1所述的方法,其特征在于,所述方法还包括:在初始时,创建两个结构相同的空的索引分区表,设置其中一个为新生代状态,另一个为旧生代状态;将数据表主键先存入新生代状态的索引分区表中;当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,原旧生代状态的索引分区表设置为新生代状态。3.根据权利要求1或2所述的方法,其特征在于,为索引分区表设置极限因子,通过如下方式获知新生代状态的索引分区表存储满:当新生代状态的索引分区表的存储率达到极限因子时,获知新生代状态的索引分区表已存储满。4.根据权利要求3所述的方法。

5、,其特征在于,所述方法还包括:每隔预定时间检测新生代状态的索引分区表的存储率;判断所述新生代状态的索引分区表的存储率达到填充因子包括:根据检测结果判断该索引分区表的存储率是否达到填充因子;以及,判断所述新生代状态的索引分区表存储满包括:根据检测结果判断该索引分区表的存储率是否达到极限因子。5.根据权利要求4所述的方法,其特征在于,所述索引分区表自身的索引分区表主键由依次递增的数值构成,所述每隔预定时间检测新生代状态的索引分区表的存储率包括每隔预定时间检测新生代状态的索引分区表中最后一个索引分区表主键的数值,根据该索引分区表主键的数值获知该索引分区表的存储率。6.根据权利要求4所述的方法,其特征。

6、在于,所述方法还包括:根据接收到的调整指示,调整填充因子、极限因子、和/或所述预定时间的数值。7.根据权利要求3所述的方法,其特征在于,所述方法还包括:当删除所述主键对应的索引数据项时,若该索引数据项中包括正在被使用的第一索引数据项,则保留该第一索引数据项,并将第一索引数据项对应的主键从旧生代状态的索引分区表中写入新生代状态的分区表中;以及,当旧生代状态的索引分区表中的数据被访问时,将被访问的数据转移至新生代状态的索引分区表中。8.根据权利要求3所述的方法,其特征在于,所述索引分区表中为数据表的每一主键设置有时间戳信息,所述方法还包括:当数据表的主键所对应的索引数据项发生变化时,索引分区表中更。

7、新该数据表主键所对应的时间戳信息。权 利 要 求 书CN 103164431 A2/2页39.一种存储系统,其特征在于,所述系统包括设置有存储控制装置的关系型数据库,所述关系型数据库中包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述存储控制装置包括存储单元和更新剔除单元,所述存储单元,用于将数据表的主键存入新生代状态的索引分区表中;所述更新剔除单元,用于当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表。

8、结构相同;以及,当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。10.根据权利要求9所述的系统,其特征在于,所述系统还包括定时服务器,所述定时服务器,用于每隔预定时间检测新生代分区表的存储率是否达到的填充因子,并将检测结果通知所述更新剔除单元;以及,所述定时服务器,还用于每隔预定时间检测新生代状态的索引分区表的存储率,判断该索引分区表的存储率是否达到极限因子,并将检测结果通知更新剔除单元;所述更新剔除单元,用于当新生代状态的索引分区表的存储率达到极限因子时,确认新生代状态的索引分区表存储满。权 利 要 求 书CN 103164431 。

9、A1/7页4关系型数据库的数据存储方法和存储系统技术领域0001 本发明涉及数据存储技术领域,特别涉及一种关系型数据库的数据存储方法和存储系统。背景技术0002 关系型数据库是建立在关系模型基础上的数据库,是目前最常用的数据库类型之一,广泛应用在各种软件系统和互联网项目中。0003 在传统软件系统或互联网项目的构建中,在很多时候会遇到如下场景:0004 网络中存在一个存储有海量数据的子系统B,能够提供网络运行所需的各种数据,然而由于网络布局或者数据读取速度的考虑,通常不采用直接与子系统B进行数据交互的方法,而是设置一个规模较小的子系统A,子系统A依赖于子系统B中的数据,通过对子系统A中数据的读。

10、写,实现与子系统B中数据的交互。0005 针对如何实现上述场景中的子系统A,现有方案中还没有提出较明确的解决方案,若在每次访问子系统A时,子系统A都需要从子系统B中同步获取数据,则数据读取性能会非常低下;若采用将从子系统B中得到的数据都存储在子系统A中,由于子系统A的存储容量限制,在实际操作中的可行性非常小。发明内容0006 本发明提供的一种关系型数据库的数据存储方法和存储系统,以解决现有技术中每次访问时都需要同步获取数据造成数据读取性能低下或是无法满足系统存储容量限制的问题。0007 为达到上述目的,本发明实施例采用了如下技术方案:0008 本发明实施例提供了一种关系型数据库的数据存储方法,。

11、该方法包括:包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述方法包括:0009 将数据表的主键存入新生代状态的索引分区表中;0010 当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;0011 当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。0012 本发明实施例还提供了一种存储系统,所述系统包括设置有存储控制装置的关系型数据库,所述。

12、关系型数据库中包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,所述存储控制装置包括设置单元、存储单元和更新剔除单元,0013 所述存储单元,用于将数据表的主键存入新生代状态的索引分区表中;说 明 书CN 103164431 A2/7页50014 所述更新剔除单元,用于当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;以及,当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创。

13、建的索引分区表设置为新生代状态。0015 本发明实施例的有益效果是:0016 本发明实施例采用两个结构相同的索引分区表交替进行数据存储,并将最新的数据存储在处于新生代状态的索引分区表中,实现了一种基于LRU机制的关系型数据库存储方案。0017 利用本发明实施例的存储方案,能够较好地对网络中存储有海量数据的子系统中的数据进行筛选,仅存储该子系统中的部分数据,既满足了存储容量限制的要求,又保证了数据读取性能。附图说明0018 图1为本发明实施例一提供的一种关系型数据库的数据存储方法流程示意图;0019 图2为本发明实施例二提供的一个具体应用场景的示意图;0020 图3为本发明实施例三提供的一种存储。

14、系统的结构示意图;0021 图4为本发明实施例三提供的一种存储控制装置结构示意图。具体实施方式0022 为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。0023 本方案的主要技术构思在于,通过对数据表的主键(Primary Key,PK)建立两个结构一致的索引分区表作为基本的数据结构,当前正执行主键存储的一个的索引分区表为处于新生代状态的索引分区表(或称之为新生代分区表),另一个索引分区表为处于旧生代状态的索引分区表(或称之为旧生代分区表)。在运行过程中,通过两个索引分区表所存储的数据的新旧角色的替换来达到数据筛选,剔除旧数据并回收相应的存储空间。0。

15、024 参见图1,为本发明实施例一提供的一种关系型数据库的数据存储方法,该方法包括:0025 11:设置两个结构相同的索引分区表存储数据表的主键,所述索引分区表包括第一索引分区表(如表示为L1Index)和第二索引分区表(如表示为L2Index),在初始时,将第一索引分区表设置为新生代状态,将第二索引分区表设置为旧生代状态,下文中将处于新生代状态的索引分区表称之为新生代索引分区表,将处于旧生代状态的索引分区表称之为旧生代索引分区表。本方案并不对具体的名称进行限定,上述的“新生代”和“旧生代”指示了索引分区表中存储数据的新旧状态,新生代状态下的索引分区表存储了当前时间段内最新增加的数据以及活跃度。

16、较高的数据,而旧生代状态下的索引分区表中的数据存储了当前时间段之前的数据。0026 为了便于清楚描述本发明实施例的技术方案,在发明的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分,本领域技术人员可以理说 明 书CN 103164431 A3/7页6解“第一”、“第二”等字样并不对数量和执行次序进行限定。0027 本发明实施例中仍以存储海量数据的子系统B和规模较小且依赖于子系统B的子系统A的场景进行说明,其中,子系统A上具有关系型数据库(如Mysql),关系型数据库中的数据以行和列的形式存储,一组行和列构成一个数据表,由一个或多个数据表构成关系型数据库。在该。

17、关系型数据库中使用了本方案的数据存储方法。0028 当存储的数据为涉及用户资料的数据时,数据表中存储用户资料(UserInfo),数据表的主键为用户标识(UserId)。这时,所设置的索引分区表中存储UserId,索引分区表自身的索引分区表主键表示为Id。0029 参见表1,数据表中存储的UserInfo可以包括姓名(Name)、性别(Gender)、生日(Birthday)、移动电话(Mobile)、公司(Company)、血型(Blood)、主页(Homepage)、电子邮件(Email)、其他信息(OtherInfo)等内容。0030 表10031 0032 参见表2,显示了一种L1In。

18、dex和L12ndex的示例。索引分区表中还可以设置时间戳(Timestamp)信息,通常在发生用户资料的查询事件和用户资料的变更事件时,需要对时间戳信息进行更新。利用该时间戳信息可以查找最新的数据,获知最新数据的执行情况等。0033 表20034 Id UserId Timestamp1 200034731 2011-11-18 12:20:192 200034732 2011-11-18 12:20:233 200034733 2011-11-18 12:20:50. . .0035 若mysql中UserInfo的存储能力是2000万时,两个索引分区表L1Index和说 明 书CN 10。

19、3164431 A4/7页7L12ndex的存储能力可以分别设置为为1000万。0036 初始时所设置的第一索引分区表和第二索引分区表中存储的内容为空。0037 12:将数据表的主键先存入第一索引分区表中。0038 当前的新生代分区表为第一索引分区表,将数据存储至第一索引分区表。在本方案中当前正在进行数据存储的索引分区表都被设置为新生代分区表中,即新生代分区中存储的是最新的数据。0039 13:当第一索引分区表存储满时,将第一索引分区表作为旧生代分区表,将第二索引分区表作为新生代分区表。0040 进一步的,本实施例中为索引分区表设置极限因子,通过如下方式获知新生代状态的索引分区表存储满:004。

20、1 当新生代状态的索引分区表的存储率达到极限因子时,获知新生代状态的索引分区表已存储满。0042 上述的极限因子指示第一索引分区表的存储率已接近最大允许的存储能力,如100。这时,将L1Index和L12ndex的角色互换。0043 进一步的,本方案中在所述索引分区表中依次存储数据表的主键,参见表2,所述索引分区表自身的索引分区表主键(Id)由按顺序依次递增的数值构成,如从0开始顺序加1的自然数。这时,根据每个索引分区表中最后一个索引分区表主键的数值(即索引分区表主键中的最大数值)获知该索引分区表的存储率。这种自增列的处理方式避免了传统的使用Mysql的count函数统计已使用空间所带来的额外。

21、计算量,能够快速获知索引分区表的空间占用情况,提高存储效率。0044 14:将新增加的主键存入第二索引分区表中。0045 当Mysql从子系统A中接收到新增加的索引数据时,会产生新的主键。0046 由于第二索引分区表还未被使用,内容为空,这时,新增加的主键会直接被送入第二索引分区表。0047 15:在当前的新生代分区表的存储满之前,如在当前的新生代分区表的存储率达到极限因子之前,删除当前的旧生代分区表中存储的主键以及该主键对应的索引数据项,并获取第三索引分区表,作为下一次使用的新生代分区表。0048 本步骤中当前的新生代分区表为第二索引分区表,当第二索引分区表也写满数据后,则L1Index和L。

22、12ndex都存满了数据,必须为后续新增的数据设置新的存储空间。0049 本方案在当前的新生代分区表存满之前,生成或创建一个全新的空索引分区表(如第三索引分区表),该新的空索引分区表具有与L1Index和L12ndex相同的结构,本方案用于存储数据表主键的索引分区表都具有相同的结构。0050 具体的,本方案中设置了为索引分区表设置填充因子,如90,每隔预定时间检测新生代分区表的存储率,根据检测结果判断该索引分区表的存储率是否达到填充因子,当达到填充因子时,删除当前的旧生代数据,包括当前的旧生代分区表中存储的主键以及该主键对应的索引数据项。通过删除操作,释放旧数据所占用的空间,以满足容量限制。0。

23、051 上述第三索引分区表可以表示为L3Index,然而,由于在删除了旧生代数据后,旧生代分区表(L1Index)也会被删除或不再使用,可以用L1Index表示第三索引分区表,即Mysql中存在的两个索引分区表可以始终采用L1Index和L12ndex来表示。说 明 书CN 103164431 A5/7页80052 进一步的,在获取上述第三索引分区表时,也可以采用清空后的旧生代分区表实现,然而,考虑直接删除旧生代分区表(即第一索引分区表)并生成一个新的空表的操作更加便捷、快速,本方案中在Mysql中的两个索引分区表都存满数据后,删除旧生代分区表,并创建(Create)一个新的空索引分区表作为下。

24、一次使用的新生代分区表。0053 进一步的,上述检测时所间隔的预定时间,以及所使用的填充因子和极限因子的具体数值都可以根据具体的应用场景进行调整。当应用场景发生变化时,根据接收到的调整指示信息,对填充因子、极限因子和预定时间中的一个或多个进行调整。例如,当主键存入索引分区表中速度变快时,缩短预定时间的数值,当索引分区表的容量限制降低时,即索引分区表所能存储的数据量变大时,提高填充因子的数值。0054 16:在当前的新生代分区表的存储率达到极限因子时,将第二索引分区表作为旧生代分区表。0055 第二索引分区表的角色从新生代分区表变化为旧生代分区表。0056 17:并将新增加的主键存入所述获取到的。

25、第三索引分区表中。0057 第三索引分区表为当前的新生代分区表,对该第三索引分区表采用上述相同的方式进行处理,本方法还包括:0058 在第三索引分区表的存储率达到极限因子之前,删除第二索引分区表中存储的主键以及该主键对应的索引数据项,获取第四索引分区表,作为再一次使用的当前分区表;0059 在第三索引分区表的存储率达到极限因子时,将第三索引分区表作为备用分区表,并将新增加的主键存入所述获取到的第四索引分区表中;0060 其中,所述第三索引分区表、第四索引分区表与第一索引分区表和第二索引分区表具有相同的结构。0061 对第四索引分区表以及后续新生成的索引分区表的处理方式与上述第三索引分区表的处理。

26、方式相同,不再赘述。0062 由上所述,本方案中所提供的数据存储过程中(初始点除外),包括两个结构相同的索引分区表,其中一个为新生代状态,另一个为旧生代状态且已存储数据表的主键,本方法包括如下操作:0063 将数据表的主键存入新生代状态的索引分区表中;0064 当新生代状态的索引分区表的存储率达到填充因子时,删除原旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;0065 当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。0066 通过。

27、重复执行上述处理,在关系型数据库中实现了一种基于最近最少使用(Least Recently Used,LRU)的存储机制。0067 进一步的,本方案中当删除所述主键对应的索引数据项时,若该索引数据项中包括正在被使用的第一索引数据项,则保留该第一索引数据项,并将第一索引数据项对应的主键写入当前的新生代分区表中。以及,当旧生代状态的索引分区表中的数据被访问时,将被访问的旧生代分区表中的数据转移至新生代分区表中。通过这种处理,将系统中活跃的数据都筛选并保存在新生代分区表中,以提高数据访问的性能。说 明 书CN 103164431 A6/7页90068 本发明实施例采用两个结构相同的索引分区表交替进行。

28、数据存储,并将最新的数据存储在处于新生代状态的索引分区表中,实现了一种基于最近最少使用(Least Recently Used,LRU)机制的关系型数据库存储方案。0069 利用本发明实施例的存储方案,能够较好地对网络中存储有海量数据的子系统中的数据进行筛选,仅存储该子系统中的部分数据,既满足了存储容量限制的要求,又保证了数据读取性能。0070 本发明实施例二对本方案的一个具体应用场景进行说明,参见图2,数据访问操作包括步骤1至3,在数据访问执行的同时,还可以执行数据回收和数据同步操作,数据回收操作步骤4至8,数据同步操作包括步骤9。0071 1:客户端向中间件服务器发送访问请求。0072 中。

29、间件服务器能够对关系型数据库进行访问和控制。0073 2:中间件服务器根据该访问请求在关系型数据库(如Mysql)中查找数据。0074 查找数据时,先在关系型数据库的索引分区表中查找索引分区表,得到访问数据所对应的主键,然后根据该主键查找到被访问数据。0075 3:关系型数据库通过中间件服务器将查询结果返回至客户端。0076 4:定时服务器定时检查是否达到回收条件。0077 该回收条件即是新生代分区表的存储率达到填充因子(如90)。0078 5:关系型数据库向定时服务器返回查询结果。0079 6:当检测到的新生代分区表的存储率达到填充因子时,确定满足回收条件。0080 7:定时服务器触发关系型。

30、数据库中旧生代数据的回收。0081 关系型数据库删除旧生代分区表中存储的主键以及该主键对应的索引数据项,释放这些数据所占用的空间。0082 8:关系型数据库向定时服务器返回数据回收结果。0083 9:外系统同步服务对关系型数据库中的新生代分区表中的数据进行同步。0084 当系统中的数据发生更改时,例如系统所存储的用户信息发生变化时,当变化后的用户信息存储在新生代分区表中,外系统同步服务将新生代分区表中的数据修改为与变化后的用户信息保持一致,或是,当变化后的用户信息存储在旧生代分区表中,现将该信息转移至新生代分区表中,再将该信息修改为与变化后的用户信息保持一致。0085 上述中间件和外系统同步服。

31、务都可以客户端类库实现。上述定时服务器可以一台普通计算机实现。0086 由上所述,本发明实施例至少具有如下优点:0087 1、在关系型数据库中实现了一种基于LRU机制的存储方案;0088 2、通过填充因子,定时器启动时间等参数可配置,可根据不同的场景调整容量限制,应用范围较广;0089 3、采用自增列方式计算已经使用空间,计算效率较高;0090 4、回收空间时基于新旧生代的替换机制,将筛选出的活跃数据保留在新生代分区表中,不但保证了数据访问效率,降低对存储空间的要求,;0091 5、定时器服务器和所使用的客户端类库分别独立运行,避免了并行开销。0092 参见图3,本发明实施例三还提供了一种存储。

32、系统,所述系统包括设置有存储控制说 明 书CN 103164431 A7/7页10装置的关系型数据库31、定时服务器32和中间件服务器33。中间件服务器33能够对关系型数据库进行访问和控制。0093 如图4所示,所述存储控制装置包括设置单元41、存储单元42和更新剔除单元43,其中:0094 所述设置单元41,用于为索引分区表设置填充因子,以及在初始时创建两个结构相同的空的索引分区表,设置其中一个为新生代状态,另一个为旧生代状态;0095 所述存储单元42,用于将数据表的主键存入新生代状态的索引分区表中;0096 所述更新剔除单元43,用于当新生代状态的索引分区表的存储率达到填充因子时,删除原。

33、旧生代状态的索引分区表中存储的主键以及该主键对应的索引数据项,并创建新的索引分区表,设为旧生代状态,所述新的索引分区表与新生代状态的索引分区表结构相同;以及,当新生代状态的索引分区表存储满时,将该索引分区表设置为旧生代状态,将所述新创建的索引分区表设置为新生代状态。0097 进一步的,上述设置单元41,还用于为索引分区表设置极限因子,所述定时服务器32,还用于每隔预定时间检测新生代状态的索引分区表的存储率,判断该索引分区表的存储率是否达到极限因子,并将检测结果通知更新剔除单元;所述更新剔除单元43,用于当新生代状态的索引分区表的存储率达到极限因子时,确认新生代状态的索引分区表存储满。0098 。

34、进一步的,所述定时服务器32,还用于每隔预定时间检测新生代分区表的存储率是否达到的填充因子,并将检测结果通知所述更新剔除单元43。0099 进一步的,本实施例中所述索引分区表自身的索引分区表主键由依次递增的数值构成,所述定时服务器32,每隔预定时间检测新生代状态的索引分区表中最后一个索引分区表主键的数值,根据该索引分区表主键的数值获知该索引分区表的存储率,得到检测结果。0100 进一步的,本方案中的更新剔除单元43,还用于当删除所述主键对应的索引数据项时,若该索引数据项中包括正在被使用的第一索引数据项,则保留该第一索引数据项,并将第一索引数据项对应的主键写入当前的新生代分区表中。以及,当旧生代。

35、分区表的数据被访问时,将被访问的旧生代分区表中的数据转移至新生代分区表中。通过这种处理,将系统中活跃的数据都筛选并保存在新生代分区表中,以提高数据访问的性能。0101 本发明系统实施例中各设备和单元的具体工作方式可以参见本发明方法实施例中的相关内容。0102 本发明实施例采用两个结构相同的索引分区表交替进行数据存储,并将最新的数据存储在作为新生代分区表的索引分区表中,实现了一种基于LRU机制的关系型数据库存储方案。0103 利用本发明实施例的存储方案,能够较好地对网络中存储有海量数据的子系统中的数据进行筛选,仅存储该子系统中的部分数据,既满足了存储容量限制的要求,又保证了数据读取性能。0104 以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。说 明 书CN 103164431 A10。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1