[发明专利]一种支持多粒度查询的高性能非结构化数据存取协议有效
| 申请号: | 201110443773.3 | 申请日: | 2011-12-27 |
| 公开(公告)号: | CN102750300A | 公开(公告)日: | 2012-10-24 |
| 发明(设计)人: | 王新宇;王新根;李善平;杨小虎 | 申请(专利权)人: | 浙江大学 |
| 主分类号: | G06F17/30 | 分类号: | G06F17/30 |
| 代理公司: | 杭州求是专利事务所有限公司 33200 | 代理人: | 周烽 |
| 地址: | 310058 浙江*** | 国省代码: | 浙江;33 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | 本发明公开了一种支持多粒度查询的高性能非结构化数据存取协议,用于在一个客户端向多个分布式服务器的缓存中存取和查询多种类型的非结构化数据的具体实现,该协议包括普通数据存取协议的实现、流数据存取协议的实现和查询协议的实现;其中,普通协议可以方便高效地把数据存储,取出,删除;流协议可以在有限的内存条件下存储大文件,消除内存拷贝,减少延迟;对象协议可以在存储OO对象时可以做到语言无关性,可以存储或者获取OO对象中的某个子对象的内容;查询协议不再局限于键完全匹配的查寻,提供了灵活多样的查寻方式;支持对OO对象建立索引,提高查询的效率。 | ||
| 搜索关键词: | 一种 支持 粒度 查询 性能 结构 数据 存取 协议 | ||
【主权项】:
一种支持多粒度查询的高性能非结构化数据存取协议,用于在一个客户端向多个分布式服务器的缓存中存取和查询多种类型的非结构化数据的具体实现,,其特征在于,该协议包括:(1)普通数据存取协议的实现,即在一个客户端向多个分布式服务器的缓存中存取普通类型的非结构化数据的具体实现:(1.1)普通数据存储协议的实现,包括实现以下两种命令:客户端以“key”为主键,向缓存中存储“data block”,所存储的数据大小为“bytes”,数据有效期至“exptime”, 附加存储的数据为“flags”,命令格式如下:“set \r\n \r\n”,若存储成功,则返回“STORED\r\n”:客户端以“key”为主键,向缓存中存储“data block”,所存储的数据大小为“bytes”,数据有效期至“exptime”,所要求的数据版本号为“cas unique”,附加存储的数据为“flags”,命令格式如下: “cas \r\n \r\n”, 如果输入的版本号存在且存储成功,则返回“EXISTS\r\n”, 如果输入的版本号不存在,则返回“NOT_FOUND\r\n”:(1.2)普通数据获取协议的实现,包括实现以下两种命令:客户端以“key”为主键,获取相应的“data block”,命令格式如下: “gets *\r\n”;若获取数据成功,则返回“ \r\n\r\n>*END\r\n”:客户端以“key”为主键,获取相应的“data block”和相应的版本号,命令格式如下:“gets *\r\n”;若获取数据成功,则返回“ \r\n\r\n>*END\r\n”:(1.3)数据删除命令的实现:客户端在缓存中删除以“key”为主键的相应数据,命令格式如下:“delete \r\n”,若删除成功,则返回“DELETED\r\n”,若以该“key”为主键的值不存在,则返回” NOT_FOUND\r\n”;(1.4)获取缓存状态命令的实现:客户端想获取服务器的状态列表,命令格式如下:“stats\r\n”,若获取状态成功,则返回“ \r\n>*END\r\n”: 流数据存取协议的实现,即在一个客户端向多个分布式服务器的缓存中存取流数据的具体实现:(2.1)流数据存储协议的实现,包括实现以下两种命令:客户端以“key”为主键,向缓存中存储数据帧(data frames),数据帧的格式如图1所示;可见,数据帧的存储时分段实现的,每个分段的数据前加控制命令以表明该段数据的大小,因此可以存储大容量的数据并维持数据的一致性,数据有效期至“exptime”,附加存储的数据为“flags”,命令格式如下:“sset\r\n\r\n”,若存储成功,则返回“STORED\r\n”;客户端以“key”为主键,向缓存中存储data frames,所存储的数据版本号为“cas unique”,数据有效期至“exptime”,附加存储的数据为“flag”,命令格式如下:“scas\r\n\r\n”,如果输入的版本号存在且存储成功,则返回“EXISTS\r\n”;如果输入的版本号不存在,则返回“NOT_FOUND\r\n”;如果输入的数据格式不合要求,则返回“DATA_ERROR\r\n”;(2.2)流数据获取协议的实现,包括实现以下两种命令:客户端以”key”为主键,从缓存中获取某个数据中以“offset”为偏移量,大小为“bytes”的某个数据中的部分数据,命令格式如下:“sget < >*\r\n”,若数据获取成功,则返回“ \r\n\r\n>*END\r\n”;客户端以“key”为主键,从缓存中获取某个数据中以“offset”为偏移量,大小为“bytes”的某个数据中的一块以及该数据的版本号,命令格式如下: “sgets < >*\r\n”,若数据获取成功,则返回“ \r\n\r\n>*END\r\n”;对象数据存取协议的实现,即在一个客户端向多个分布式服务器的缓存中存取对象数据的具体实现:(3.1)对象数据存储协议的实现,包括实现以下两种命令:客户端以“key[(.field)*]”表明其所要存取的数据在xml或json文件中的具体位置,向缓存中存取data block,数据有效期至“exptime”, 附加存储的数据为“flags”,命令格式如下:“ \r\n \r\n”,若存储成功,则返回“STORED\r\n”,若要存储的数据格式不合要求,则返回“DATA_ERROR\r\n”, 如果要存储的数据标签对应关系不正确,则返回“PARSE_ERROR\r\n”;客户端以“key[(.field)*]”表明其所要存取的数据在xml或json文件中的具体位置,向缓存中存取data block,数据有效期至“exptime”, 附加存储的数据为“flags”, 所要求的数据版本号为“cas unique”,命令格式如下:“ \r\n \r\n”,若输入的版本号存在且存储成功,则返回“EXISTS\r\n”,若输入的版本号不存在,则返回“NOT_FOUND\r\n”,若要存储的数据格式不合要求,则返回“DATA_ERROR\r\n”, 如果要存储的数据标签对应关系不正确,则返回“PARSE_ERROR\r\n”;(3.2)普通数据获取协议的实现,包括实现以下两种命令:客户端以“key[(.field)*]”表明要从缓存中的xml或jason文件的某个具体位置获取相应的数据,命令格式如下:“ < key[(.field)*]>*\r\n”;如果数据获取成功,则返回“ \r\n\r\n>*END\r\n”;客户端以“key[(.field)*]”表明要从缓存中的xml或jason文件的某个具体位置获取相应的数据和其所对应的版本号,命令格式如下:“ < key[(.field)*]>*\r\n”;如果数据获取成功,则返回“ \r\n\r\n>*END\r\n”;(3.3)对象数据删除命令的实现:客户端在缓存中的xml或jason文件中的“key[(.field)*]”位置处删除相应内容,命令格式如下:“ \r\n”,若xml或jason文件中的对应内容已被删除成功,则返回” DELETED\r\n”,若xml或jason文件中不存在相应的“key[(.field)*]”位置的内容,则返回” NOT_FOUND\r\n”;(4)查询协议的实现,即在一个客户端向多个分布式服务器的缓存中对数据键值和内容的复杂混合查询等的具体实现:(4.1)键查询协议的实现,包括实现以下的命令:客户端以“keyprefix”为数据主键的开头前置查询相关数据,命令格式如下: “query key.startwith(“”) [KEY_ONLY]\r\n”,可选择返回查找到的数据主键还是整个数据,若数据获取成功,则返回查找到的键值、附加存储的内容“flags”、数据大小“bytes”,如果要求返回整个数据,则同时返回data block,格式如下: “ \r\n[\r\n]>*END\r\n”;(4.2)正则查询协议的实现,包括实现以下的命令:客户端以“regular expression”为正则表达式查询匹配该正则表达式的主键和主键所对应的数据,命令格式如下:“query key.like(“”) [KEY_ONLY]\r\n”,可选择返回查找到的数据主键还是整个数据,若数据获取成功,则返回查找到的主键值、附加存储的内容”flags”、数据大小为“bytes”,如果要求返回整个数据,则同时返回data block,格式如下: “ \r\n[\r\n]>*END\r\n”;(4.3)值查询协议的实现,包括实现以下的命令:客户端以“regular expression”为正则表达式查询匹配该正则表达式的数据和数据所对应的主键,命令格式如下: “query value.querywith(“ ”) [KEY_ONLY]\r\n”, 可选择返回查找到的数据主键还是整个数据,若数据获取成功,则返回查找到的主键值、附加存储的内容“flags”、数据大小为“bytes”,如果要求返回整个数据,则同时返回data block,格式如下: “ \r\n[\r\n]>*END\r\n”;值查询命令还可以支持多个运算符,比如‘>’、‘<’、‘>=’、‘<=’、‘=’、‘<>’、‘like’等,支持连接符,比如‘and’, ‘or’, ‘(’, ‘)’等,返回格式不变;(4.4)混合查询协议的实现,包括实现以下的命令:该查询是多个值查询以“and”和“or”相结合的复杂键值查询和值查询的实现方式,命令格式(举例)如下:“query key.startwith(“keyprefix>”) and key.like(““) or value.querywith(“query expression>“)\r\n”,返回格式同值查询相同(4.5)建立索引的协议实现,包括实现以下的命令:客户端对OO对象的某个子键建立索引,自动忽略非OO或者不含此子键的对象,命令格式如下:“vi <.field(.field)*>\r\n”,若索引已被成功创建,则返回“CREATED\r\n”;(4.6)删除索引的协议实现,包括实现以下的命令:客户端删除相应的索引,命令格式如下:“dvi <.field(.field)*>\r\n”,若索引删除成功,则返回“DELETED\r\n”若相应索引不存在,则返回” NOT_FOUND\r\n”;(5)上述命令如果在使用时出错或程序运行在客户端或服务端出现其他错误,则会返回以下出错信息,如“ERROR\r\n,CLIENT_ERROR \r\n,SERVER_ERROR \r\n”。
下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江大学,未经浙江大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/patent/201110443773.3/,转载请声明来源钻瓜专利网。
- 上一篇:一种大功率电磁脉冲换能器
- 下一篇:一种高强钢连续热处理的冷却方法





