CN103092920A - 半结构化数据的存储方法及存储系统 - Google Patents

半结构化数据的存储方法及存储系统 Download PDF

Info

Publication number
CN103092920A
CN103092920A CN2012105741097A CN201210574109A CN103092920A CN 103092920 A CN103092920 A CN 103092920A CN 2012105741097 A CN2012105741097 A CN 2012105741097A CN 201210574109 A CN201210574109 A CN 201210574109A CN 103092920 A CN103092920 A CN 103092920A
Authority
CN
China
Prior art keywords
data
query request
data query
unit
outputting
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
Application number
CN2012105741097A
Other languages
English (en)
Other versions
CN103092920B (zh
Inventor
侯军伟
关启盼
杨海朝
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Sina Technology China Co Ltd
Original Assignee
Sina Technology China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sina Technology China Co Ltd filed Critical Sina Technology China Co Ltd
Priority to CN201210574109.7A priority Critical patent/CN103092920B/zh
Publication of CN103092920A publication Critical patent/CN103092920A/zh
Application granted granted Critical
Publication of CN103092920B publication Critical patent/CN103092920B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种半结构化数据的存储方法及存储系统。该方法包括:关系型数据库插件接收用户的数据查询请求,调用关系型数据库存储引擎查询内存,所述内存通过所述关系型数据库存储引擎用最近最少使用队列维护数据,将预定时间内未被使用的数据从内存中逐出,存放在外部的固态硬盘中;关系型数据库存储引擎判断内存中是否存储有数据查询请求对应的数据;如果有,将查询得到的数据携带在数据查询请求结果中进行输出;如果未存储有,从外部的固态硬盘中进行查询,通过外部的固态硬盘查询,获取数据查询请求结果进行输出。应用本发明,可以提高资源利用率、提升查询响应速度。

Description

半结构化数据的存储方法及存储系统
技术领域
本发明涉及数据存储技术,尤其涉及一种半结构化数据的存储方法及存储系统。
背景技术
随着计算机网络的飞速发展和信息技术的进步,半结构化数据呈现出日益繁荣的趋势。由于半结构化数据的数据结构是不固定、不完全或不规则的,形式是多样化的。主要应用于对存储数据无严格模式限制的万维网以及电子邮件、电子商务、文献检索中。半结构化数据介于模式固定的结构化数据,例如,关系库中的表/元组和对象库中的类型/对象,与完全没有模式的无序数据,例如,正文、声音、图像之间。
半结构化数据的存取方式较为简单,使用开源、高性能的键/值(Key/Value)的Redis存储方式,键/值可根据实际需要进行扩充。
大多数的Key/Value数据,随着时间推移,较少被访问,只是作为存档数据,成为冷数据。研究表明,实际数据的访问一般都符合齐普夫(Zipf)分布,大约有90%的Key/Value数据是冷数据,存储后再也没有被访问过,6.5%的Key/Value数据是偏冷数据,只是偶尔被访问,只有约3.5%的Key/Value数据是偏热数据,经常被访问。
在很多应用场景,对于被经常访问的偏热数据,半结构化的Key/Value数据拥有超大的访问量,并且要求较低的响应时间。但现有半结构化数据的存储方法,访问量较少的数据也必须存储于内存中,从而浪费了大量的内存,资源利用率较低,查询响应速度较慢;同时,Redis使用单进程单线程的方式,在使用Redis时,为了最大限度的发挥Redis的性能,需要通过多个实例来提高性能,而多实例的方式增加了运维的复杂度和成本。
发明内容
本发明的实施例提供一种半结构化数据的存储方法,提高资源利用率、提升查询响应速度。
本发明的实施例还提供一种半结构化数据的存储系统,提高资源利用率、提升查询响应速度。
为达到上述目的,本发明实施例提供的一种半结构化数据的存储方法,包括:
关系型数据库插件接收用户的数据查询请求,调用关系型数据库存储引擎查询内存,所述内存通过所述关系型数据库存储引擎采用最近最少使用队列维护数据,将预定时间内未被使用的数据从内存中逐出,存放在外部的固态硬盘中;
关系型数据库存储引擎判断内存中是否存储有数据查询请求对应的数据;
如果有,将查询得到的数据携带在数据查询请求结果中进行输出;如果未存储有,从外部的固态硬盘中进行查询,通过外部的固态硬盘查询,获取数据查询请求结果进行输出。
其中,所述关系型数据库插件包括应用层模块和MySQL服务层模块,所述应用层模块包括:业务逻辑单元以及服务访问客户端单元,其中,服务访问客户端单元包括:MySQL客户端子单元以及Handlersocket客户端子单元,所述MySQL服务层模块包括:监听程序单元、SQL语句解析层单元、服务器端的接口单元以及Handlersocket插件单元,所述关系型数据库插件接收用户的数据查询请求,调用关系型数据库存储引擎包括:
业务逻辑单元接收用户的数据查询请求,如果确定进行MySQL查询,将数据查询请求通过MySQL客户端子单元输出至监听程序单元,如果确定进行Handlersocket查询,将数据查询请求通过Handlersocket客户端子单元输出至Handlersocket插件单元;
监听程序单元监听MySQL客户端子单元的请求,将接收的数据查询请求转发给SQL语句解析层单元;
SQL语句解析层单元接收数据查询请求,调用服务器端的接口单元,在内存中进行数据查询;
Handlersocket插件单元接收数据查询请求,调用服务器端的接口单元,在内存中进行数据查询。
其中,所述方法进一步包括:
将数据查询请求结果中携带的数据从固态硬盘中写入内存。
一种半结构化数据的存储系统,该系统包括:关系型数据库插件、关系型数据库存储引擎以及固态硬盘,其中,
关系型数据库插件,用于接收用户的数据查询请求,调用关系型数据库存储引擎以使关系型数据库存储引擎访问数据;通过关系型数据库存储引擎接收数据查询请求结果,进行输出;
关系型数据库存储引擎,用于在内存中维护最近最少使用队列,将预定时间内未被使用的数据从内存中逐出,存放在底层的固态硬盘中;接收数据查询请求,查询内存,如果存储有数据查询请求对应的数据,将查询得到的数据携带在数据查询请求结果中,输出至关系型数据库插件;如果未存储有数据查询请求对应的数据,将数据查询请求输出至固态硬盘,接收固态硬盘输出的数据查询请求结果,输出至关系型数据库插件;
固态硬盘,用于接收数据查询请求,进行查询,获取数据查询请求对应的数据,将查询得到的数据携带在数据查询请求结果中,输出至关系型数据库存储引擎。
较佳地,在接收固态硬盘输出的数据查询请求结果之后,所述关系型数据库存储引擎进一步用于将数据查询请求结果中携带的数据从固态硬盘中写入内存。
较佳地,所述关系型数据库插件为Handlersocket,关系型数据库存储引擎为MySQL存储引擎,固态硬盘为Fusion-IO。
较佳地,所述Handlersocket包括应用层模块和MySQL服务层模块,其中,
应用层模块,用于接收用户的数据查询请求,输出至MySQL服务层模块;接收MySQL服务层模块输出的数据查询请求结果,进行输出;
MySQL服务层模块,用于根据接收的数据查询请求,调用MySQL存储引擎;接收MySQL存储引擎输出的数据查询请求结果,输出至应用层模块。
较佳地,所述应用层模块包括:业务逻辑单元以及服务访问客户端单元,其中,服务访问客户端单元包括:MySQL客户端子单元以及Handlersocket客户端子单元;
业务逻辑单元,用于接收用户的数据查询请求,如果确定进行MySQL查询,将数据查询请求输出至MySQL客户端子单元,如果确定进行Handlersocket查询,将数据查询请求输出至Handlersocket客户端子单元;接收数据查询请求结果,进行输出;
MySQL客户端子单元,用于与MySQL服务层模块交互,获取数据查询请求结果,向业务逻辑单元输出;
Handlersocket客户端子单元,用于与MySQL服务层模块交互,获取数据查询请求结果,向业务逻辑单元输出。
较佳地,所述MySQL服务层模块包括:监听程序单元、SQL语句解析层单元、服务器端的接口单元以及Handlersocket插件单元,其中,
监听程序单元,用于监听客户端的请求,接收数据查询请求,并将请求转发给SQL语句解析层单元;接收SQL语句解析层单元输出的数据查询请求结果,输出至MySQL客户端子单元;
SQL语句解析层单元,用于接收数据查询请求,调用服务器端的接口单元进行数据查询;接收调用服务器端的接口单元输出的数据查询请求结果,输出至监听程序单元;
Handlersocket插件单元,用于接收数据查询请求,调用服务器端的接口单元进行数据查询;接收调用服务器端的接口单元输出的数据查询请求结果,输出至Handlersocket客户端子单元;
服务器端的接口单元,用于分别接收来自SQL语句解析层单元以及Handlersocket插件单元的数据查询请求,调用MySQL存储引擎的各接口,获取数据查询请求结果,输出至相应的SQL语句解析层单元以及Handlersocket插件单元。
较佳地,所述MySQL存储引擎包括:队列维护模块、接口模块、第一查询处理模块以及第二查询处理模块,其中,
队列维护模块,用于在内存中维护最近最少使用队列,将预定时间内未被使用的数据从内存中逐出,存放在外部的固态硬盘中;接收第二查询处理模块输出的维护信息,第二查询处理模块获取的数据从外部的固态硬盘中写入内存;
接口模块,用于接收数据查询请求,输出至第一查询处理模块;接收来自第一查询处理模块以及第二查询处理模块的数据查询请求结果,输出至服务器端的接口单元;
第一查询处理模块,用于接收数据查询请求,查询内存,如果存储有数据查询请求对应的数据,将查询得到的数据携带在数据查询请求结果中,输出至接口模块;如果未存储有数据查询请求对应的数据,将数据查询请求输出至第二查询处理模块;
第二查询处理模块,用于接收数据查询请求,输出至固态硬盘,接收固态硬盘输出的数据查询请求结果,输出至接口模块;判断数据查询请求结果中是否包含有数据,如果有,向队列维护模块输出维护信息。
由上述技术方案可见,本发明实施例提供的一种半结构化数据的存储方法及存储系统,关系型数据库插件接收用户的数据查询请求,调用关系型数据库存储引擎查询内存,所述内存通过所述关系型数据库存储引擎采用最近最少使用队列维护数据,将预定时间内未被使用的数据从内存中逐出,存放在外部的固态硬盘中;关系型数据库存储引擎判断内存中是否存储有数据查询请求对应的数据;如果有,将查询得到的数据携带在数据查询请求结果中进行输出,如果未存储有,从外部的固态硬盘中进行查询;通过外部的固态硬盘查询,获取数据查询请求结果进行输出。这样,关系型数据库存储引擎采用LRU List对内存中的数据进行维护,将预定时间内未被使用的数据从内存中读出至底层低速的固态硬盘中,以减少内存的占用量,从而节省内存容量,降低内存中存储的数据量,从而缩短查询所需的时间,提高内存资源的资源利用率以及查询响应速度。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,以下将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,以下描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员而言,还可以根据这些附图所示实施例得到其它的实施例及其附图。
图1为本发明实施例涉及的计算机的硬件结构示意图。
图2为本发明实施例Handlersocket软件结构示意图。
图3为本发明实施例的半结构化数据的存储系统结构示意图。
图4为本发明实施例的半结构化数据的存储方法流程示意图。
具体实施方式
以下将结合附图对本发明各实施例的技术方案进行清楚、完整的描述,显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施例,都属于本发明所保护的范围。
现有半结构化数据的存储方法,使用Redis存储Key/Value数据,Key/Value数据全部存储在内存中,使得访问量较少的数据也必须存在于内存中,无法将冷数据采用一定的替换策略,例如,最近最少使用(LRU,Least Recently Used)算法,从内存中换出到低速的硬件中以减少内存的占用量,从而浪费了大量的内存,资源利用率较低,并导致查询所需的时间较长。
外部部件互连总线接口(PCI-E,Peripheral Component InterconnectExpress)是电脑总线PCI的一种,它沿用了现有的PCI编程概念及通讯标准,但基于更快的串行通信系统,采用点对点串行连接,每个设备都有自己的专用连接,不需要向整个总线请求带宽,而且可以将数据传输率提高到较高的频率,达到PCI所不能提供的高带宽。
PCI-E应用于内部互连,由于PCI-E基于现有的PCI系统,只需通过修改物理层而无须修改软件,就可将现有PCI系统转换为PCI-E系统,并通过PCI-E控制器与所有外部设备进行交互,从而拥有更快的速率,并可替换现有的内部总线,例如,现有的加速图形端口(AGP,Accelerated GraphicPorts)和PCI。
HandlerSocket是关系型数据库管理系统(MySQL)的一个插件,用于跳过MySQL的SQL层面,直接访问内部的InnoDB存储引擎。也就是说,通过监听MySQL以外的两个新的端口,来处理外部的请求。HandlerSocket完全采用新的协议进行通讯,内部将请求进行解析,调用MySQL存储引擎提供的接口来访问数据。
HandlerSocket采用epoll()和worker-thread/thread-pooling架构,为轻量级的连接,支持索引查询(主键索引和非主键的普通索引均可)。
关于PCI-E以及HandlerSocket的详细描述,具体可参见相关技术文献,在此不再赘述。
本发明实施例中,使用高速的PCI-E设备,例如,固态硬盘Fusion-IO和开源MySQL插件HandlerSocket,用于存储半结构化的Key/Value数据,高速的PCI-E设备Fusion-IO直接插在PCI-E插槽中,提供了较低的延迟和较大的吞吐,可以提升数据传输速率,开源MySQL插件HandlerSocket可将冷数据采用预先设置的替换策略,从内存中换出到低速的硬件中,从而提高资源利用率。
图1为本发明实施例涉及的计算机的硬件结构示意图。参见图1,包括:CPU、南桥芯片、北桥芯片、Fusion-IO以及串行连接SCSI(SAS,SerialAttached SCSI),其中,
Fusion-IO与北桥芯片相连,SAS与南桥芯片相连,北桥芯片分别与南桥芯片以及CPU相连;
北桥芯片中包括有PCI-E控制器,南桥芯片中包括有SAS/SATA控制器;
Fusion-IO通过Fusion-IO卡,即Fusion-IO使用SSD推出的一款高速硬件,直接插在PCI-E控制器插槽中,提供了较低的延迟和较大的吞吐;
PCI-E是一种总线和接口标准,主要优势就是数据传输速率高,采用PCI-Ex8,数据传输速率可为2GB/s;SAS与南桥芯片的数据传输速率可为300M/s。
北桥芯片(North Bridge)是主板芯片组中起主导作用的组成部分,也称为主桥(HostBridge)。南桥芯片(South Bridge)负责I/O总线之间的通信,例如,PCI总线、USB、LAN、高级技术配件(ATA,Advanced TechnologyAttachmen)、串行高级技术配件(SATA,Serial Advanced TechnologyAttachment)、音频控制器、键盘控制器、实时时钟控制器、高级电源管理等,不同芯片组中,可能南桥芯片是一样的,不同的只是北桥芯片。
图2为本发明实施例Handlersocket软件结构示意图。参见图2,包括应用层(Client app)和MySQL服务层(mysqld),其中,
应用层用于获取数据,MySQL服务层用于提供数据访问服务。
应用层包括:业务逻辑(Application)以及服务访问客户端,其中,
服务访问客户端包括:libmysql以及libhsclient,其中,
libmysql为mysql的客户端软件包,libhsclient为handlersocket的客户端软件包。
通过MySQL服务层,可以提供两种路径的数据服务,由业务主动进行选择,一种为现有的数据库访问路径,通过监听程序(Listener for libmysql)监听客户端的请求,并将请求转发给SQL语句解析层(SQL Layer),然后,SQL语句解析层调用服务器端的接口(Handler Interface),服务器端的接口调用各个存储引擎的接口提供数据,例如,Innodb、MyISAM以及其他的存储引擎。另一种数据库访问路径为Handlersocket的路径,通过Handlersocket插件直接调用服务器端的接口,服务器端的接口调用各个存储引擎的接口提供数据,该数据访问路径不需要经过SQL语句解析层,因而,有效节约了时间。
本发明实施例中,同时提供两种途径的数据服务,但是主要使用handlersocket的途径进行访问。由于handlersocket只提供有限的访问,例如,按照数据库的主键进行查询,所以不需要进行SQL语句的解析,从而提高了查询的响应时间以及响应速度。
本发明实施例中,Handlersocket以MySQL的插件的形式存在,直接通过Handler Interface访问MySQL存储引擎,避免了SQL的解析提供和Redis一样的高速低延迟访问。
图3为本发明实施例的半结构化数据的存储系统结构示意图。参见图3,该系统包括:关系型数据库插件、关系型数据库存储引擎以及固态硬盘,其中,
关系型数据库插件,用于接收用户的数据查询请求,调用关系型数据库存储引擎以使关系型数据库存储引擎访问数据;通过关系型数据库存储引擎接收数据查询请求结果,进行输出;
关系型数据库存储引擎,用于在内存中维护最近最少使用队列(LRUList),将预定时间内未被使用的数据从内存中逐出,存放在底层的固态硬盘中;接收数据查询请求,查询内存,如果存储有数据查询请求对应的数据,将查询得到的数据携带在数据查询请求结果中,输出至关系型数据库插件;如果未存储有数据查询请求对应的数据,将数据查询请求输出至固态硬盘,接收固态硬盘输出的数据查询请求结果,输出至关系型数据库插件;
本发明实施例中,关系型数据库存储引擎采用LRU List对内存中的数据进行维护,将预定时间内未被使用的数据,即冷数据,采用LRU算法替换策略,从内存中逐出,存放在底层低速的硬件中,例如,存放在固态硬盘中以减少内存的占用量,从而节省内存容量,降低内存中存储的数据量,使之只存储有访问量的数据,缩短查询所需的时间,提高内存资源的资源利用率;当数据的访问量超过预先设置的访问量阈值时,再从底层存储设备(固态硬盘)上将该数据读取出来,存放在内存中,以有效减少后续访问过程中所需的时间。
在接收固态硬盘输出的数据查询请求结果之后,关系型数据库存储引擎进一步用于将数据查询请求结果中携带的数据从固态硬盘中写入内存。
固态硬盘,用于接收数据查询请求,进行查询,获取数据查询请求对应的数据,将查询得到的数据携带在数据查询请求结果中,输出至关系型数据库存储引擎。
本发明实施例中,如果固态硬盘根据数据查询请求进行查询,没有获取数据查询请求对应的数据,则在数据查询请求结果中,携带查询失败信息,输出至关系型数据库存储引擎。
本发明实施例中,较佳地,关系型数据库插件为Handlersocket,关系型数据库存储引擎为MySQL存储引擎,对应于图1中的CPU、南桥芯片、北桥芯片以及串行连接SCSI,固态硬盘为Fusion-IO或其它闪存(FLASH)硬件,对应于图1中的Fusion-IO。其中,
Handlersocket调用MySQL存储引擎接口访问数据,MySQL存储引擎将Fusion-IO作为底层存储设备,在内存中维护最近最少使用队列(LRUList),将最近未被使用的数据从内存中逐出,存放在底层的存储设备Fusion-IO上,当数据需要访问时,再从底层存储设备上读取出来,存放在内存中。
本发明实施例中,Handlersocket包括应用层(Client app)模块和MySQL服务层(mysqld)模块(图中未示出),其中,
应用层模块,用于接收用户的数据查询请求,输出至MySQL服务层模块;接收MySQL服务层模块输出的数据查询请求结果,进行输出;
MySQL服务层模块,用于根据接收的数据查询请求,调用MySQL存储引擎;接收MySQL存储引擎输出的数据查询请求结果,输出至应用层模块。
其中,应用层模块包括:业务逻辑(Application)单元以及服务访问客户端单元,其中,服务访问客户端单元包括:MySQL客户端子单元(libmysql)以及Handlersocket客户端子单元(libhsclient),即libmysql为MySQL的客户端软件包,libhsclient为Handlersocket的客户端软件包。
业务逻辑(Application)单元,用于接收用户的数据查询请求,如果确定进行MySQL查询,将数据查询请求输出至MySQL客户端子单元,如果确定进行Handlersocket查询,将数据查询请求输出至Handlersocket客户端子单元;接收数据查询请求结果,进行输出;
本发明实施例中,MySQL服务层模块可以提供两种路径的数据服务,由业务在发起数据查询请求时主动进行选择。
MySQL客户端子单元,用于与MySQL服务层模块交互,获取数据查询请求结果,向业务逻辑单元输出;
Handlersocket客户端子单元,用于与MySQL服务层模块交互,获取数据查询请求结果,向业务逻辑单元输出。
MySQL服务层模块包括:监听程序单元、SQL语句解析层单元、服务器端的接口单元以及Handlersocket插件(Handlersocket Plugin)单元,其中,
监听程序单元,用于监听客户端的请求,接收数据查询请求,并将请求转发给SQL语句解析层单元;接收SQL语句解析层单元输出的数据查询请求结果,输出至MySQL客户端子单元;
SQL语句解析层单元,用于接收数据查询请求,调用服务器端的接口单元进行数据查询;接收调用服务器端的接口单元输出的数据查询请求结果,输出至监听程序单元;
Handlersocket插件单元,用于接收数据查询请求,调用服务器端的接口单元进行数据查询;接收调用服务器端的接口单元输出的数据查询请求结果,输出至Handlersocket客户端子单元;
服务器端的接口单元,用于分别接收来自SQL语句解析层单元以及Handlersocket插件单元的数据查询请求,调用MySQL存储引擎的各接口,获取数据查询请求结果,输出至相应的SQL语句解析层单元以及Handlersocket插件单元。
本发明实施例中,服务器端的接口单元如果接收到SQL语句解析层单元的数据查询请求,获取数据查询请求结果后,输出至SQL语句解析层单元;如果接收到Handlersocket插件单元的数据查询请求,获取数据查询请求结果后,输出至Handlersocket插件单元。
本发明实施例中,通过Handlersocket插件单元,可以通过各接口,直接与后端的MySQL存储引擎进行Key-value式的交互,无需进行MySQL上层的结构化查询语言(SQL,Structured Query Language)解释、打开关闭表、创建查询计划等,节约了CPU的开销。
本发明实施例中,MySQL存储引擎包括:队列维护模块、接口模块、第一查询处理模块以及第二查询处理模块,其中,
队列维护模块,用于在内存中维护最近最少使用队列,将预定时间内未被使用的数据从内存中逐出,存放在外部的固态硬盘中;接收第二查询处理模块输出的维护信息,将第二查询处理模块获取的数据从外部的固态硬盘中写入内存;
接口模块,用于接收数据查询请求,输出至第一查询处理模块;接收来自第一查询处理模块以及第二查询处理模块的数据查询请求结果,输出至服务器端的接口单元;
第一查询处理模块,用于接收数据查询请求,查询内存,如果存储有数据查询请求对应的数据,将查询得到的数据携带在数据查询请求结果中,输出至接口模块;如果未存储有数据查询请求对应的数据,将数据查询请求输出至第二查询处理模块;
第二查询处理模块,用于接收数据查询请求,输出至固态硬盘,接收固态硬盘输出的数据查询请求结果,输出至接口模块;判断数据查询请求结果中是否包含有数据,如果有,向队列维护模块输出维护信息。
由上述可见,本发明实施例的半结构化数据的存储系统,HandlerSocket可以使用MySQL存储引擎内部的LRU算法,将不常访问的数据换出内存,当该数据重新访问之后,再将数据换入内存中。这样,可以在有限内存的情况下,将热点数据保存在内存中,将非热点数据换出内存,保存在高速的Fusion-IO上,既满足了较高的性能,同时又避免了内存的浪费,提高了资源利用率、提升了查询响应速度;进一步地,Fusion-IO的价格相比内存,更加廉价,因此,通过混合使用Fusion-IO和内存,达到简化系统复杂度,节省内存消耗,可以在性能和价格上获得更好的平衡,从而降低成本;而且,Handlersocket使用多线程的方式来进行存取,也就是说,Handlersocket使用Epoll来处理客户端的请求,Epoll是Linux内核为处理大批量句柄而作了改进的Poll,是Linux下多路复用IO接口select/poll的增强版本,能显著减少程序在大量并发连接中,且只有少量活跃的情况下的系统CPU利用率,因此,HandlerSocket使用单实例的方式,减少了实例数,降低了运维成本。
图4为本发明实施例的半结构化数据的存储方法流程示意图。参见图4,该流程包括:
步骤401,关系型数据库插件接收用户的数据查询请求,调用关系型数据库存储引擎查询内存,所述内存通过所述关系型数据库存储引擎采用最近最少使用队列维护数据,将预定时间内未被使用的数据从内存中逐出,存放在外部的固态硬盘中;
本步骤中,关系型数据库插件包括应用层模块和MySQL服务层模块,所述应用层模块包括:业务逻辑单元以及服务访问客户端单元,其中,服务访问客户端单元包括:MySQL客户端子单元以及Handlersocket客户端子单元,所述MySQL服务层模块包括:监听程序单元、SQL语句解析层单元、服务器端的接口单元以及Handlersocket插件单元,关系型数据库插件接收用户的数据查询请求,调用关系型数据库存储引擎查询内存包括:
业务逻辑单元接收用户的数据查询请求,如果确定进行MySQL查询,将数据查询请求通过MySQL客户端子单元输出至监听程序单元,如果确定进行Handlersocket查询,将数据查询请求通过Handlersocket客户端子单元输出至Handlersocket插件单元;
监听程序单元监听MySQL客户端子单元的请求,将接收的数据查询请求转发给SQL语句解析层单元;
SQL语句解析层单元接收数据查询请求,调用服务器端的接口单元,在内存中进行数据查询;
Handlersocket插件单元接收数据查询请求,调用服务器端的接口单元,在内存中进行数据查询。
步骤402,关系型数据库存储引擎判断内存中是否存储有数据查询请求对应的数据,如果有,执行步骤403,否则,执行步骤404;
步骤403,将查询得到的数据携带在数据查询请求结果中进行输出;
本步骤中,服务器端的接口单元分别接收来自SQL语句解析层单元以及Handlersocket插件单元的数据查询请求,调用MySQL存储引擎的各接口,首先从内存中进行查询,如果内存中没有查询到数据查询请求对应的数据,再从Fusion-IO进行查询,获取数据查询请求结果,输出至相应的SQL语句解析层单元以及Handlersocket插件单元。
步骤404,从外部的固态硬盘中进行查询,通过外部的固态硬盘查询,获取数据查询请求结果进行输出。
本步骤中,固态硬盘可以采用Fusion-IO,Fusion-IO的价格相比内存,更加廉价,用于存储内存中预定时间内未被使用的数据;同时,在数据被使用后,又可以将数据写入内存中。
实际应用中,如果固态硬盘根据数据查询请求进行查询,没有获取数据查询请求对应的数据,则在数据查询请求结果中,携带查询失败信息。
较佳地,该方法在执行步骤404后,可以进一步包括:
步骤405,将数据查询请求结果中携带的数据从固态硬盘中写入内存。
显然,本领域技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也包含这些改动和变型在内。

Claims (10)

1.一种半结构化数据的存储方法,包括:
关系型数据库插件接收用户的数据查询请求,调用关系型数据库存储引擎查询内存,所述内存通过所述关系型数据库存储引擎采用最近最少使用队列维护数据,将预定时间内未被使用的数据从内存中逐出,存放在外部的固态硬盘中;
关系型数据库存储引擎判断内存中是否存储有数据查询请求对应的数据;
如果有,将查询得到的数据携带在数据查询请求结果中进行输出;如果未存储有,从外部的固态硬盘中进行查询,通过外部的固态硬盘查询,获取数据查询请求结果进行输出。
2.根据权利要求1所述的方法,其中,所述关系型数据库插件包括应用层模块和MySQL服务层模块,所述应用层模块包括:业务逻辑单元以及服务访问客户端单元,其中,服务访问客户端单元包括:MySQL客户端子单元以及Handlersocket客户端子单元,所述MySQL服务层模块包括:监听程序单元、SQL语句解析层单元、服务器端的接口单元以及Handlersocket插件单元,所述关系型数据库插件接收用户的数据查询请求,调用关系型数据库存储引擎包括:
业务逻辑单元接收用户的数据查询请求,如果确定进行MySQL查询,将数据查询请求通过MySQL客户端子单元输出至监听程序单元,如果确定进行Handlersocket查询,将数据查询请求通过Handlersocket客户端子单元输出至Handlersocket插件单元;
监听程序单元监听MySQL客户端子单元的请求,将接收的数据查询请求转发给SQL语句解析层单元;
SQL语句解析层单元接收数据查询请求,调用服务器端的接口单元,以在内存中进行数据查询;
Handlersocket插件单元接收数据查询请求,调用服务器端的接口单元,以在内存中进行数据查询。
3.根据权利要求1或2所述的方法,其中,所述方法进一步包括:
将数据查询请求结果中携带的数据从固态硬盘中写入内存。
4.一种半结构化数据的存储系统,其特征在于,该系统包括:关系型数据库插件、关系型数据库存储引擎以及固态硬盘,其中,
关系型数据库插件,用于接收用户的数据查询请求,调用关系型数据库存储引擎以使关系型数据库存储引擎访问数据;通过关系型数据库存储引擎接收数据查询请求结果,进行输出;
关系型数据库存储引擎,用于在内存中维护最近最少使用队列,将预定时间内未被使用的数据从内存中逐出,存放在底层的固态硬盘中;接收数据查询请求,查询内存,如果存储有数据查询请求对应的数据,将查询得到的数据携带在数据查询请求结果中,输出至关系型数据库插件;如果未存储有数据查询请求对应的数据,将数据查询请求输出至固态硬盘,接收固态硬盘输出的数据查询请求结果,输出至关系型数据库插件;
固态硬盘,用于接收数据查询请求,进行查询,获取数据查询请求对应的数据,将查询得到的数据携带在数据查询请求结果中,输出至关系型数据库存储引擎。
5.根据权利要求4所述的系统,其特征在于,在接收固态硬盘输出的数据查询请求结果之后,所述关系型数据库存储引擎进一步用于将数据查询请求结果中携带的数据从固态硬盘中写入内存。
6.根据权利要求5所述的系统,其特征在于,所述关系型数据库插件为Handlersocket,关系型数据库存储引擎为MySQL存储引擎,固态硬盘为Fusion-IO。
7.根据权利要求6所述的系统,其特征在于,所述Handlersocket包括应用层模块和MySQL服务层模块,其中,
应用层模块,用于接收用户的数据查询请求,输出至MySQL服务层模块;接收MySQL服务层模块输出的数据查询请求结果,进行输出;
MySQL服务层模块,用于根据接收的数据查询请求,调用MySQL存储引擎;接收MySQL存储引擎输出的数据查询请求结果,输出至应用层模块。
8.根据权利要求7所述的系统,其特征在于,所述应用层模块包括:业务逻辑单元以及服务访问客户端单元,其中,服务访问客户端单元包括:MySQL客户端子单元以及Handlersocket客户端子单元;
业务逻辑单元,用于接收用户的数据查询请求,如果确定进行MySQL查询,将数据查询请求输出至MySQL客户端子单元,如果确定进行Handlersocket查询,将数据查询请求输出至Handlersocket客户端子单元;接收数据查询请求结果,进行输出;
MySQL客户端子单元,用于与MySQL服务层模块交互,获取MySQL服务层模块输出的数据查询请求结果,向业务逻辑单元输出;
Handlersocket客户端子单元,用于与MySQL服务层模块交互,获取MySQL服务层模块输出的数据查询请求结果,向业务逻辑单元输出。
9.根据权利要求7或8所述的系统,其特征在于,所述MySQL服务层模块包括:监听程序单元、SQL语句解析层单元、服务器端的接口单元以及Handlersocket插件单元,其中,
监听程序单元,用于监听客户端的请求,接收数据查询请求,并将请求转发给SQL语句解析层单元;接收SQL语句解析层单元输出的数据查询请求结果,输出至MySQL客户端子单元;
SQL语句解析层单元,用于接收数据查询请求,输出至服务器端的接口单元以进行数据查询;接收调用服务器端的接口单元输出的数据查询请求结果,输出至监听程序单元;
Handlersocket插件单元,用于接收数据查询请求,输出至服务器端的接口单元以进行数据查询;接收调用服务器端的接口单元输出的数据查询请求结果,输出至Handlersocket客户端子单元;
服务器端的接口单元,用于分别接收来自SQL语句解析层单元以及Handlersocket插件单元的数据查询请求,调用MySQL存储引擎的各接口,获取数据查询请求结果,输出至相应的SQL语句解析层单元以及Handlersocket插件单元。
10.根据权利要求9所述的系统,其特征在于,所述MySQL存储引擎包括:队列维护模块、接口模块、第一查询处理模块以及第二查询处理模块,其中,
队列维护模块,用于在内存中维护最近最少使用队列,将预定时间内未被使用的数据从内存中逐出,存放在外部的固态硬盘中;接收第二查询处理模块输出的维护信息,将第二查询处理模块获取的数据从外部的固态硬盘中写入内存;
接口模块,用于接收数据查询请求,输出至第一查询处理模块;接收来自第一查询处理模块以及第二查询处理模块的数据查询请求结果,输出至服务器端的接口单元;
第一查询处理模块,用于接收数据查询请求,查询内存,如果存储有数据查询请求对应的数据,将查询得到的数据携带在数据查询请求结果中,输出至接口模块;如果未存储有数据查询请求对应的数据,将数据查询请求输出至第二查询处理模块;
第二查询处理模块,用于接收数据查询请求,输出至固态硬盘,接收固态硬盘输出的数据查询请求结果,输出至接口模块;判断数据查询请求结果中是否包含有数据,如果有,向队列维护模块输出维护信息。
CN201210574109.7A 2012-12-26 2012-12-26 半结构化数据的存储方法及存储系统 Active CN103092920B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210574109.7A CN103092920B (zh) 2012-12-26 2012-12-26 半结构化数据的存储方法及存储系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210574109.7A CN103092920B (zh) 2012-12-26 2012-12-26 半结构化数据的存储方法及存储系统

Publications (2)

Publication Number Publication Date
CN103092920A true CN103092920A (zh) 2013-05-08
CN103092920B CN103092920B (zh) 2017-04-12

Family

ID=48205485

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210574109.7A Active CN103092920B (zh) 2012-12-26 2012-12-26 半结构化数据的存储方法及存储系统

Country Status (1)

Country Link
CN (1) CN103092920B (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103646111A (zh) * 2013-12-25 2014-03-19 普元信息技术股份有限公司 大数据环境下实现实时数据关联的系统及方法
CN105320085A (zh) * 2014-06-25 2016-02-10 中兴通讯股份有限公司 工业自动化数据的采集方法及装置、系统
CN105447171A (zh) * 2015-12-07 2016-03-30 北京奇虎科技有限公司 数据缓存方法与装置
CN106156331A (zh) * 2016-07-06 2016-11-23 益佳科技(北京)有限责任公司 冷热温数据服务器系统及其处理方法
CN108052551A (zh) * 2017-11-28 2018-05-18 北京航天云路有限公司 一种在redis上实现的存储大量时序数据的方法
CN108256109A (zh) * 2018-02-07 2018-07-06 福建星瑞格软件有限公司 列簇类型半结构化数据的结构化查询方法及计算机设备
CN108268217A (zh) * 2018-01-10 2018-07-10 北京航天云路有限公司 一种基于时序数据冷热分类的分层存储方法
CN108319654A (zh) * 2017-12-29 2018-07-24 中国银联股份有限公司 计算系统、冷热数据分离方法及装置、计算机可读存储介质
CN110795395A (zh) * 2018-07-31 2020-02-14 阿里巴巴集团控股有限公司 文件部署系统和文件部署方法
CN111078593A (zh) * 2019-12-29 2020-04-28 浪潮电子信息产业股份有限公司 一种对象元数据的访问方法、系统及相关装置
CN111190834A (zh) * 2019-12-24 2020-05-22 华东师范大学 一种非对称读延迟感知的数据放置方法
CN113032349A (zh) * 2019-12-25 2021-06-25 阿里巴巴集团控股有限公司 数据存储方法、装置、电子设备及计算机可读介质

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101739357A (zh) * 2008-11-21 2010-06-16 辉达公司 多类数据高速缓存策略
WO2012074092A1 (ja) * 2010-12-03 2012-06-07 株式会社ディジタルメディアプロフェッショナル 画像処理装置
CN102521405A (zh) * 2011-12-26 2012-06-27 中国科学院计算技术研究所 支持高速加载的海量结构化数据存储、查询方法和系统
CN102646121A (zh) * 2012-02-23 2012-08-22 武汉大学 结合RDBMS和Hadoop云存储的两级存储方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101739357A (zh) * 2008-11-21 2010-06-16 辉达公司 多类数据高速缓存策略
WO2012074092A1 (ja) * 2010-12-03 2012-06-07 株式会社ディジタルメディアプロフェッショナル 画像処理装置
CN102521405A (zh) * 2011-12-26 2012-06-27 中国科学院计算技术研究所 支持高速加载的海量结构化数据存储、查询方法和系统
CN102646121A (zh) * 2012-02-23 2012-08-22 武汉大学 结合RDBMS和Hadoop云存储的两级存储方法

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103646111A (zh) * 2013-12-25 2014-03-19 普元信息技术股份有限公司 大数据环境下实现实时数据关联的系统及方法
CN103646111B (zh) * 2013-12-25 2017-02-15 普元信息技术股份有限公司 大数据环境下实现实时数据关联的系统及方法
CN105320085A (zh) * 2014-06-25 2016-02-10 中兴通讯股份有限公司 工业自动化数据的采集方法及装置、系统
CN105320085B (zh) * 2014-06-25 2019-10-25 南京中兴软件有限责任公司 工业自动化数据的采集方法及装置、系统
CN105447171A (zh) * 2015-12-07 2016-03-30 北京奇虎科技有限公司 数据缓存方法与装置
CN106156331A (zh) * 2016-07-06 2016-11-23 益佳科技(北京)有限责任公司 冷热温数据服务器系统及其处理方法
CN108052551A (zh) * 2017-11-28 2018-05-18 北京航天云路有限公司 一种在redis上实现的存储大量时序数据的方法
CN108319654A (zh) * 2017-12-29 2018-07-24 中国银联股份有限公司 计算系统、冷热数据分离方法及装置、计算机可读存储介质
CN108319654B (zh) * 2017-12-29 2021-12-21 中国银联股份有限公司 计算系统、冷热数据分离方法及装置、计算机可读存储介质
CN108268217A (zh) * 2018-01-10 2018-07-10 北京航天云路有限公司 一种基于时序数据冷热分类的分层存储方法
CN108268217B (zh) * 2018-01-10 2021-04-30 北京航天云路有限公司 一种基于时序数据冷热分类的分层存储方法
CN108256109A (zh) * 2018-02-07 2018-07-06 福建星瑞格软件有限公司 列簇类型半结构化数据的结构化查询方法及计算机设备
CN108256109B (zh) * 2018-02-07 2022-04-15 福建星瑞格软件有限公司 列簇类型半结构化数据的结构化查询方法及计算机设备
CN110795395A (zh) * 2018-07-31 2020-02-14 阿里巴巴集团控股有限公司 文件部署系统和文件部署方法
CN110795395B (zh) * 2018-07-31 2023-04-18 阿里巴巴集团控股有限公司 文件部署系统和文件部署方法
CN111190834A (zh) * 2019-12-24 2020-05-22 华东师范大学 一种非对称读延迟感知的数据放置方法
CN111190834B (zh) * 2019-12-24 2023-03-31 华东师范大学 一种非对称读延迟感知的数据放置方法
CN113032349A (zh) * 2019-12-25 2021-06-25 阿里巴巴集团控股有限公司 数据存储方法、装置、电子设备及计算机可读介质
CN111078593A (zh) * 2019-12-29 2020-04-28 浪潮电子信息产业股份有限公司 一种对象元数据的访问方法、系统及相关装置

Also Published As

Publication number Publication date
CN103092920B (zh) 2017-04-12

Similar Documents

Publication Publication Date Title
CN103092920B (zh) 半结构化数据的存储方法及存储系统
EP3920034B1 (en) Systems and methods for scalable and coherent memory devices
US8819335B1 (en) System and method for executing map-reduce tasks in a storage device
US9058357B1 (en) Strategies for prefetching database blocks
US10826980B2 (en) Command process load balancing system
US11474712B2 (en) Method, apparatus, device and storage medium for managing access request
US11360705B2 (en) Method and device for queuing and executing operation commands on a hard disk
US20150127691A1 (en) Efficient implementations for mapreduce systems
US20120233386A1 (en) Multi-interface solid state disk, processing method and system of multi-interface solid state disk
US8825922B2 (en) Arrangement for processing trace data information, integrated circuits and a method for processing trace data information
KR20080024156A (ko) 검색을 위한 백-오프 메커니즘
US20200364080A1 (en) Interrupt processing method and apparatus and server
CN112632069B (zh) 哈希表数据存储管理方法、装置、介质和电子设备
US11307801B2 (en) Method, apparatus, device and storage medium for processing access request
US20200310690A1 (en) Dynamic near-data processing control mechanism based on computer resource availability on solid-state disk platforms
US20240231653A1 (en) Memory management method and apparatus, processor, and computing device
US11635904B2 (en) Matrix storage method, matrix access method, apparatus and electronic device
GB2545058A (en) Flash memory management
Zhang et al. Design and implementation of a real-time interactive analytics system for large spatio-temporal data
US20110125726A1 (en) Smart algorithm for reading from crawl queue
US20150177987A1 (en) Augmenting memory capacity for key value cache
CN111694777B (zh) 基于PCIe接口的DMA传输方法
US10572671B2 (en) Checking method, checking system and checking device for processor security
CN113220608A (zh) 一种NVMe命令处理器及其处理方法
US9176910B2 (en) Sending a next request to a resource before a completion interrupt for a previous request

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20230418

Address after: Room 501-502, 5/F, Sina Headquarters Scientific Research Building, Block N-1 and N-2, Zhongguancun Software Park, Dongbei Wangxi Road, Haidian District, Beijing, 100193

Patentee after: Sina Technology (China) Co.,Ltd.

Address before: 100080, International Building, No. 58 West Fourth Ring Road, Haidian District, Beijing, 20 floor

Patentee before: Sina.com Technology (China) Co.,Ltd.