一种面向虚拟实验的非结构化数据访问方法

文档序号:6356680阅读:235来源:国知局
专利名称:一种面向虚拟实验的非结构化数据访问方法
技术领域
本发明属于计算机应用领域,具体涉及一种面向虚拟实验的非结构化数据访问方 法,该方法适合于对虚拟实验中存在海量非结构化数据的复杂查询,并提供简单、统一、安 全和高效的访问接口。
背景技术
随着信息化程度的提高,数据已超出它原始的范畴,它包含各种业务操作数据、报 表统计数据、办公文档、电子邮件、超文本、表格、报告以及图片、音视频等各种数据信息。人 们用海量数据来形容巨大的、空前浩瀚的、还在不断增长的数据。根据业界分析报告,非结 构化数据占有整个信息量的85%以上,数据量极其庞大,是信息资源管理的核心。作为传统实验教学的一种有效的补充,虚拟实验教学已经成为加强实践教学、提 高教学质量的重要手段,它不仅可以在一定程度上代替传统的实验教学,而且可以克服传 统实验的各种制约和弊端,从而有效地解决目前实验教学中迫切需要解决的规模与质量、 实验资源不均衡等问题,达到优化教育资源、提高教学质量的目的。在对虚拟实验中元元器件、实验场景等数据的统一建模、整合已有的虚拟实验资 源并开发新的实验的过程中,包含了多种多样的文本、图片、flash、语音、视频等非结构化 数据。非结构化数据是指不具有或者具有一定结构但语义不确定的数据,一般为文本、图像 文件。在进行虚拟实验的过程中90%以上的数据请求都是这些非结构化数据,对它们的请 求频率远高于对用户信息、用户权限等传统关系型数据,这类数据是进行虚拟实验的核心 数据。因此,如何有效地组织管理非结构化数据、为上层应用程序数据访问提供支撑,依然 是一个有待解决的问题。非结构化数据包括文本、图像、音频、视频、PDF、电子表格等。非结构化数据存储通 常有两种方式,但各自在存储非结构化数据方面存在一些缺点将非结构化数据以文件的方式存储在文件系统中,同时将指向文件的链接或路径 存储在数据库表中。这种方式数据读写的速度较快,但数据管理会存在问题,无法实现文件 的事务性访问,需要额外考虑事务处理的一致性和数据的安全性。将非结构化数据存储在传统数据库表的二进制大对象字段(BLOB,Binary Large Object)中。这种方式充分利用数据库的事务、管理和安全特性,但在数据查询和读写性能 不高,并且用户优化空间比较小。近年来,为了满足非结构化数据的高效存储访问、高可用和高可扩展性,非关 系型数据库技术的受到广泛关注。非关系型数据库打破了长久以来关系型数据库对 ACID (AtomicityConsistency、Isolation 以及 Durability)理论的依赖需求,数据存储不 需要固定的表结构,通常也不存在连接操作。非关系型数据库在大数据存取操作上具备关 系型数据库无法比拟的性能优势。目前实施的案例大多是面向Web 2.0应用,针对*吐2.0 的具体应用场景进行特定的改进,非结构化数据的存储与检索技术不具有普适性。改进和 优化非结构化数据的存储与检索方法还处在研究与探索之中。

发明内容
本发明的目的在于提供一种面向虚拟实验的非结构化数据访问方法,该方法可以 针对形式各异的海量非结构化数据建立索引、快速定位查找并提供统一访问接口,为虚拟 实验的正确、稳定、高效运行提供存储支撑环境,同时提供了复杂查询方法以满足不同层次 的需求。本发明提供的一种面向虚拟实验的非结构化数据访问方法,其特征在于,其步骤 包括(1)用户访问相应资源的URI,数据请求方法如果为POST,则进入步骤(2)执行 POST请求;数据请求方法如果为GET,则进入步骤( 执行GET请求;数据请求方法如果为 DELETE,则进入步骤(4)执行DELETE请求;(2) POST数据请求处理(2. 1)进行安全认证,校验请求URI是否合法,如果不合法则结束该次请求;否则, 对传入的数据进行哈希运算得到其键值,读取该类型数据对应的模式,进行数据提取,然后 进入步骤(2. 2);(2.2)在文档数据库中匹配是否存在相同键值的数据,如果存在则进入步骤 (2. 3),否则进入步骤(2.4);(2. 3)更新文档数据库中信息,进行数据缓存,返回该键值;并结束该次请求;(2. 4)在文档数据库中添加该数据,进行数据缓存,返回该键值并结束该次请求;(3) GET数据请求处理流程包括对数据本身的GET请求以及对数据索引的GET请求 两个部分(3. 1)数据 GET 请求:(3. 1. 1)进行安全认证,校验请求URI是否合法,如果不合法则结束该次请求;否 则,进入步骤(3. 1.2);(3. 1. 2)按照请求URI提供的键值,从系统缓存中获取其对应的数据,数据不为空 则返回该数据,结束该次请求;否则,进入步骤(3. 1. 3);(3. 1. 3)按照请求URI提供的键值,从文档数据库获取器对应的数据,如果不为空 则进入步骤(3. 1. 4);否则,直接返回空数据结束该次请求;(3. 1. 4)返回数据,进行数据缓存,结束该次请求;(3. 2)列表GET数据请求处理(3. 2. 1)进行复杂查询,获取满足查询语句的最终结果集;根据用户在URI中的设 定,设置返回列表数据格式(支持XML、JS0N);(3. 2. 2)返回列表数据,然后对该请求URI进行哈希,进行数据缓存,结束该次请 求;(4) DELETE数据请求处理(4. 1)进行安全认证,校验请求URI是否合法,如果不合法则结束该次请求;否则, 进入步骤(4. 2);(4. 2)按照请求URI提供的键值,从文档数据库将该键值对应的数据标记为不可 用,进入步骤(4.3);
(4. 3)删除系统缓存中该键值对应的数据,并返回该键值、结束该次请求。本发明为了解决非结构化数据中存储组织形式、检索方法与检索效率中存在的问 题,针对非结构化数据的特点并综合考虑现有成熟技术,设计了一种基于文档数据的非结 构化数据存储检索方法,本发明具有以下几个特点(1)高可用与可扩展性。为了防止数据丢失或数据失效即保证数据的高可用性,将 所有数据按照工业界的经验标准在不同的物理机上保留三个备份,同时采用异步写入策略 以防止降低写入效率,为了保证在异步写入时能读取到正确的数据,采用NWR模型,N代表N 个设备,W代表要写入至少W份才认为成功,R表示至少读取R个备份,要求W+R > N实现每次 读取至少一个最新版本。在文档数据库系统上构建master-slave结构,通过不断增减slave 节点实现扩展,并采用一致性哈希将数据散列分配,尽量减少由节点增删引起的数据移动。(2)透明性。通过 REST (REpresentational State Transfer)架构抽象所有非结 构化数据为资源,映射到URI (Uniform Resource Identifier)上唯一对应,对所有资源实 现CRUD (Create、Read、Update以及Delete)操作,降低了基于该系统接口二次开发的复杂 性。暴露给用户的仅仅是URI,用户不必关心存储系统内部数据的组织形式、存储方式、容错 处理以及处理方法,只需调用URI指向所需资源并附带动作命令GET、POST或DELETE执行 对应的CRUD操作。(3)安全性。在REST架构中,所有操作都是无状态的,在请求过程中不会带有 Session和Cookie,即不会保存与会话相关的任何信息。基于这一特点,可以按照HTTP请 求的方式以及链接对数据请求进行过滤,并采用数据摘要式安全认证杜绝非法访问。(3)查询方式。结合现有的SQL语法以及对非结构化数据的查询需求,采用 key-value的形式对SQL查询语法进行转换,通过WHERE、SKIP、LIMIT和SORT子句进行代 数关系运算、集合运算,并实现基于正则表达式的模糊查询。


图1是本发明的系统结构图2是本发明的RESTful接口设计原则示意图
图3是本发明方法的数据请求交互流程图4是本发明的写入(更新)数据流程图5是本发明的读取数据流程图6是本发明的删除数据流程图7是本发明的数据列表访问流程图8是本发明的数据提取层设计示意图9是本发明的级联缓存机制示意图10是本发明的数字签名生成示意图11是本发明的接口认证流程图12是本发明的复杂查询实现流程图。
具体实施例方式
本发明根据非结构化数据的特点,引入了一种基于REST架构的安全数据访问方法,可以优化非结构化数据存储、索引的构建以及检索的效率,并保证数据的安全性。在本 发明的系统中,非结构化数据具有如下特点(1)文件大小相对较小,全都是小于1MB的文件;(2)文件总数达到十万数量级,虚拟实验学科众多,每一学科也有很多具体实验, 每一个具体实验中会对应很多不同种类的实验元器件;(3)文件一旦写入就基本不会进行更改,改动频率低,数据读取操作占到了访问量 的95%以上;(4)文件类型、格式不一,数据格式很难预先确定;(3. 2.)文件之间有一定的学科相关性、具体实验相关性;(6)访问这些数据的客户端也多种多样,具有平台差异(LiniDuWindows操作系统 等)和语言差异(C、C++、Java、Python等)。下面针对这些特点结合附图对本发明做出详细说明1为了避免大量小文件访问的磁盘10、提高吞吐量,将对应于一个具体实验元器 件的全部文件(包括逻辑运算文件、图形可视化文件)视为一个实验元器件对象,以该对象 作为数据访问的最小单元,并采用数据缓存;2数据更新(写入、更新与删除)操作所占比重较低,因此采用消息队列执行此类 操作,数据修改操作异步执行,将应用与数据解耦,同时也解决了数据并发写入时的合并问 题;3由于实验文件类型、格式不一,每一类数据都有其对应的解析模式,在进行数据 解析时动态绑定相对应的模式;4根据虚拟实验中数据的学科相关性与具体实验相关性,预先加载热点访问数据 所在学科或具体实验中定义的所有数据,与此同时,采用级联缓存结构,自顶向下缓存粒度 逐渐加大,上层为下层缓存数据的子集;5为了独立于平台与语言,采用基于HTTP协议的REST架构,针对用户数据需求提 供多种类型的RESTful接口,并提供基于URI的安全认证机制与复杂查询方法。如图1所示,本发明方法所基于的基本组成部分包括数据访问层采用REST架构,将数据访问抽象为简单、统一的接口,并提供复杂查 询功能。使用数字签名的形式进行权限认证;数据提取层为每一类非结构化数据提供模式提取文件的属性以及数据。对于没 有模式的非结构化数据则提取其元数据属性及其属性值。写入时采用消息队列,将应用与 逻辑分离,降低系统延迟与写入丢失。对于数据的多个写入版本,以最后一次写入为准,单 点写入,弱化一致性方面的开发难度;索引同步层在内存中以键值对的形式,保存所有非结构化数据索引信息以及热 点访问数据。在对非结构化数据执行更新、添加或删除操作的同时,更新内存中的索引信 息,尽量减少磁盘IO次数;文件存储层负责保证数据文件的高可靠性与高可用性,同时为防止单个文件目 录过大、热点数据过于集中,需要将进行目录切分、数据移动,并更新索引表。当数据文件达 到规定大小时将其进行归档、设置为只读。本发明方法利用RESTful接口对所有数据资源提供POST (增加/更新)、GET (获取)、DELTE(删除)三种方法,这三种方法的访问都需要进行安全认证,并另外针对列表访 问接口提供了复杂查询功能。结构如图2所示。用户访问本系统(下文如无特别说明,均指按照本发明方法实现的系统)数据时, 系统需要做出相应的处理,具体请求处理流程如图3所示,其中,POST数据请求处理流程如 图4所示,数据GET请求如图5所示,列表GET数据请求处理流程如图7所示,DELETE数据 请求处理流程如图6所示。在上述过程中,涉及到数据提取、数据缓存、安全认证和复杂查询过程,下面举例 具体说明其实现方式。(A)数据提取过程数据提取层采用“可插拔”的设计,每一模式(schema)都可与一个或多个非结构 化数据类型进行绑定以及取消绑定,即实现非结构化数据类型的注册/注销,针对其注册 的类型提取模式中定义的关键字及其所对应的数据,如图8所示,按如下步骤实施(Al)数据提取层接收输入的数据,提取数据元数据信息或其在模式中定义的关键 字及其所对应的数据;(A2)将元数据信息与其所包含的模式类型进行匹配,并返回匹配成功之后的 第一个对应模式,这样同时也解决了同一类型定义了多个模式的问题,其中返回结果为 {key lvalue}形式的键值对;如果匹配失败,否则仅提取其元数据;(A3)将解析的最终数据进行数据整合输出,结束该次请求。(B)数据缓存过程为了提高系统的吞吐率和降低延迟,采用多级缓存机制。热点数据缓存、数据库缓 存、文件系统缓存,让数据更加靠近用户,并逐渐增大缓存的粒度。同时,根据数据本身的相 关性,预取一部分数据到缓存,用一部分命中率来换取数据访问的效率,如图9所示,其中, 数据库文件包缓存含了全部的实验元器件对象(简称实验对象)数据,学科数据缓存包含 了一个学科的全部实验对象数据,实验对象缓存中是部分来自数据库文件缓存和学科数据 缓存的实验对象数据,列表数据缓存中存储的是部分实验对象的索引(Bi)将最近使用的数据库文件从分布式文件系统缓存到本地文件系统,避免数据 库文件网络传输,同时提高了数据的可用性;(B2)实验对象为系统处理的基本数据单元,根据当前实验对象数据访问的热点 (热点指访问量最大的实验对象),设置学科数据缓存,将热点数据所在的学科全部元器件 一次性加载到内存。当前实验对象的热点改变时,再作废当前缓存数据重新载入新的学科 数据;(B4)列表数据一直都是系统中的热点数据,按照查询URI的哈希值作为键值缓存列 表数据。(C)安全认证过程为了独立于平台与语言,针对用户数据需求提供多种类型的RESTful接口,并提 供基于URI的安全认证机制与复杂查询方法本系统采用数字签名的方式,对请求URI进行认证,流程如图10所示。其中,用户 密钥系统与用户约定的加密密文,保证该用户为认证用户;加密算法系统与用户约定的 加密算法;令牌通过令牌数据库生成,仅用于标识一次请求,之后作废。系统与系统用户 之间约定(或者定期变更)密钥,采用MD5进行加密,密钥用于验证用户是否为系统认证用户;在系统用户执行每一次请求时,需向系统请求令牌,用于标识用户的该次请求,用户执 行完该次请求之后,该令牌作废。通过两次密钥请求的方式杜绝非法访问。具体步骤如下 (如图11所示)(Cl)系统用户通过与系统约定的方式获取密钥;(C2)系统用户每执行一次数据请求,均需生成此次数据请求的URI,通过URI标识 此次请求的数据类别和键值;(C3)系统用户向系统请求令牌,将该令牌与数据类别、键值等信息以及密钥作为 加密字符串,获取数字签名,执行请求;(C4)系统获取该次请求URI及数字签名,从请求URI中标识此次请求的数据类别、 键值和令牌,判断数据库中是否存在该令牌,如果存在进入步骤(C5),否则返回空值并结束 该次请求;(C5)系统采用与系统用户约定的密钥,使用相同的方法生成数据签名,与请求 URI中的数字签名进行比对,如果匹配则返回其键值,进入步骤(C6),否则返回空值,进入 步骤(C6);(C6)删除该次请求中所使用的令牌,结束该次请求。(D)复杂查询过程在本系统中,复杂查询功能支持查询关键字Where、Skip、limit、SOrt,分别对应于 查询条件、偏移量(数字,跳过多少条记录)、记录数(数字,取多少条记录)以及排序。这 四个查询关键字可任意组合。用符号“&”进行连接,故在查询的字段和字段值中不允许带 有特殊字符“&”、“? ”、“ = ”。查询不区分大小写。系统收到用户的URI请求,对其进行解析 转换为对应的数据查询语句。转换流程如图12所示。具体步骤如下(Dl)解析查询字符串中的关键字,将关键字为Where、Skip、limit或sort的字符 串及其所对应的值转换为{key:ValUe}的键值对形式;(D2)如果存在关键字where,则解析其所对应的值是否形如{字段操作符条 件},详细定义如表1所示。如果是,则按照该筛选条件从文档数据库中取出满足条件的数 据,进入步骤(D3);否则返回空列表数据,并结束该次请求;表1 where查询语句
权利要求
1.一种面向虚拟实验的非结构化数据访问方法,其特征在于,其步骤包括(1)用户访问相应资源的URI,数据请求方法如果为POST,则进入步骤⑵执行POST请 求;数据请求方法如果为GET,则进入步骤(3)执行GET请求;数据请求方法如果为DELETE, 则进入步骤(4)执行DELETE请求;(2)POST数据请求处理(2. 1)进行安全认证,校验请求URI是否合法,如果不合法则结束该次请求;否则,对传 入的数据进行哈希运算得到其键值,读取该类型数据对应的模式,进行数据提取,然后进入 步骤(2. 2);(2. 2)在文档数据库中匹配是否存在相同键值的数据,如果存在则进入步骤(2. 3),否 则进入步骤(2. 4);(2. 3)更新文档数据库中信息,进行数据缓存,返回该键值;并结束该次请求;(2. 4)在文档数据库中添加该数据,进行数据缓存,返回该键值并结束该次请求;(3)GET数据请求处理流程包括对数据本身的GET请求以及对数据索引的GET请求两个 部分(3. 1)数据GET请求(3. 1. 1)进行安全认证,校验请求URI是否合法,如果不合法则结束该次请求;否则,进 入步骤(3. 1. 2);(3. 1. 2)按照请求URI提供的键值,从系统缓存中获取其对应的数据,数据不为空则返 回该数据,结束该次请求;否则,进入步骤(3. 1. 3);(3. 1. 3)按照请求URI提供的键值,从文档数据库获取器对应的数据,如果不为空则进 入步骤(3. 1. 4);否则,直接返回空数据结束该次请求;(3. 1. 4)返回数据,进行数据缓存,结束该次请求;(3. 2)列表GET数据请求处理(3. 2. 1)进行复杂查询,获取满足查询语句的最终结果集;根据用户在URI中的设定, 设置返回列表数据格式;(3. 2. 2)返回列表数据,然后对该请求URI进行哈希,进行数据缓存,结束该次请求;(4)DELETE数据请求处理(4. 1)进行安全认证,校验请求URI是否合法,如果不合法则结束该次请求;否则,进入 步骤(4. 2);(4. 2)按照请求URI提供的键值,从文档数据库将该键值对应的数据标记为不可用,进 入步骤(4. 3);(4. 3)删除系统缓存中该键值对应的数据,并返回该键值、结束该次请求。
2.根据权利要求1所述的非结构化数据访问方法,其特征在于,所述数据提取的过程 如下(Al)数据提取层接收输入的数据,提取数据元数据信息或其在模式中定义的关键字及 其所对应的数据;(A2)将元数据信息与其所包含的模式类型进行匹配,并返回匹配成功之后的第一个对 应模式;(A3)将解析的最终数据进行数据整合输出,结束该次请求。
3.根据权利要求1所述的非结构化数据访问方法,其特征在于,所述数据缓存的过程 如下(Bi)将最近使用的数据库文件从分布式文件系统缓存到本地文件系统; (B2)实验对象为系统处理的基本数据单元,根据当前实验对象数据访问的热点,设置 学科数据缓存,将热点数据所在的学科全部元器件一次性加载到内存;当前实验对象的热 点改变时,再作废当前缓存数据重新载入新的学科数据;(B4)列表数据一直都是系统中的热点数据,按照查询URI的哈希值作为键值缓存列表 数据。
4.根据权利要求1所述的非结构化数据访问方法,其特征在于,所述安全认证的过程 如下(Cl)系统用户通过与系统约定的方式获取密钥;(C2)系统用户每执行一次数据请求,均需生成此次数据请求的URI,通过URI标识此次 请求的数据类别和键值;(C3)系统用户向系统请求令牌,将该令牌与数据类别、键值等信息以及密钥作为加密 字符串,获取数字签名,执行请求;(C4)系统获取该次请求URI及数字签名,从请求URI中标识此次请求的数据类别、键值 和令牌,判断数据库中是否存在该令牌,如果存在进入步骤(C5),否则返回空值并结束该次 请求;(C5)系统采用与系统用户约定的密钥,使用相同的方法生成数据签名,与请求URI中 的数字签名进行比对,如果匹配则返回其键值,进入步骤(C6),否则返回空值,进入步骤 (C6);(C6)删除该次请求中所使用的令牌,结束该次请求。
5.根据权利要求1所述的非结构化数据访问方法,其特征在于,所述复杂查询的过程 如下(Dl)解析查询字符串中的关键字,将关键字为Where、Skip、limit或sort的字符串及 其所对应的值转换为{key:ValUe}的键值对形式;(D2)如果存在关键字where,则解析其所对应的值是否形如{字段操作符条件}, 如果是,则按照该筛选条件从文档数据库中取出满足条件的数据,进入步骤(D3);否则返 回空列表数据,并结束该次请求;(D3)如果存在关键字sort,则解析其所对应的值是否形如{字段升序/降序},如果 是,则按照指定字段进行升序或降序排序,进入步骤04);否则返回空列表数据,并结束该 次请求;(D4)如果存在关键字limit,则判断其值是否为正整数N,如果是,则返回结果集的前N 条记录;否则返回空列表数据,并结束该次请求(D5)如果存在关键字skip,判断其值是否为正整数M,如果是,则在返回结果集中剔除 前M条记录;否则返回空列表数据,结束该次请求;(D6)返回满足查询语句的最终结果集, 结束该次请求。
全文摘要
本发明公开了一种面向虚拟实验的非结构化数据访问方法,步骤为①为了避免大量小文件访问的磁盘IO、提高吞吐量,将对应于一个具体实验元器件的全部文件视为一个实验元器件对象,以该对象作为数据访问的最小单元;②数据更新操作所占比重较低,采用消息队列执行此类操作,数据修改操作异步执行,将应用与数据解耦,同时也解决了数据并发写入时的合并问题;③由于实验文件类型、格式不一,每一类数据都有其对应的解析模式,在进行数据解析时动态绑定相对应的模式;④根据虚拟实验中数据的学科相关性与具体实验相关性,预先加载热点访问数据所在学科或具体实验中定义的所有数据,与此同时,采用级联缓存结构,自顶向下缓存粒度逐渐加大,上层为下层缓存数据的子集;⑤为了独立于平台与语言,采用基于HTTP协议的REST架构,针对用户数据需求提供多种类型的RESTful接口,并提供基于URI的安全认证机制与复杂查询方法。
文档编号G06F17/30GK102129469SQ20111007114
公开日2011年7月20日 申请日期2011年3月23日 优先权日2011年3月23日
发明者刘超, 张磊, 李 浩, 蒋文斌, 金海 申请人:华中科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1