CN102750300A - 一种支持多粒度查询的高性能非结构化数据存取协议 - Google Patents

一种支持多粒度查询的高性能非结构化数据存取协议 Download PDF

Info

Publication number
CN102750300A
CN102750300A CN2011104437733A CN201110443773A CN102750300A CN 102750300 A CN102750300 A CN 102750300A CN 2011104437733 A CN2011104437733 A CN 2011104437733A CN 201110443773 A CN201110443773 A CN 201110443773A CN 102750300 A CN102750300 A CN 102750300A
Authority
CN
China
Prior art keywords
data
key
return
client
flags
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
CN2011104437733A
Other languages
English (en)
Other versions
CN102750300B (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.)
Zhejiang University ZJU
Original Assignee
Zhejiang University ZJU
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 Zhejiang University ZJU filed Critical Zhejiang University ZJU
Priority to CN201110443773.3A priority Critical patent/CN102750300B/zh
Publication of CN102750300A publication Critical patent/CN102750300A/zh
Application granted granted Critical
Publication of CN102750300B publication Critical patent/CN102750300B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

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

Abstract

本发明公开了一种支持多粒度查询的高性能非结构化数据存取协议,用于在一个客户端向多个分布式服务器的缓存中存取和查询多种类型的非结构化数据的具体实现,该协议包括普通数据存取协议的实现、流数据存取协议的实现和查询协议的实现;其中,普通协议可以方便高效地把数据存储,取出,删除;流协议可以在有限的内存条件下存储大文件,消除内存拷贝,减少延迟;对象协议可以在存储OO对象时可以做到语言无关性,可以存储或者获取OO对象中的某个子对象的内容;查询协议不再局限于键完全匹配的查寻,提供了灵活多样的查寻方式;支持对OO对象建立索引,提高查询的效率。

Description

一种支持多粒度查询的高性能非结构化数据存取协议
技术领域
本发明涉及Web应用技术领域,尤其涉及一种支持多粒度查询的高性能非结构化数据存取协议。 
背景技术
非结构化数据缓存是动态分布式Web应用的重要实现技术,它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态、数据库驱动网站的速度,最终减轻数据库负载。基于分布式内存对象的非结构化数据存储协议是分布式复杂数据对象缓存的具体实现形式和功能展现。当前非结构化数据对象缓存协议memcached是基于存储键/值对的hashmap实现,其存储协议中提供了支持分布式操作的数据存取(set,cas)功能和数据获取(get,gets)功能。基于混合型非关系数据库Cassandra采用DHT(分布式哈希表)的完全P2P架构实现,其数据存储协议提供了比分布式存储键/值对方式更丰富的功能,主要增加了基于自定义键值范围设定的数据查询功能等。Hadoop Common产品中的基于Google BigTable的分布式数据库HBase,适合存储非结构化或半结构化的稀疏数据,但其存储协议中缺少数据表同表之间关联查询的需求。数据库网络接口Tokyo Tyrant拥有memcached兼容协议,包括网络层流数据的缓存协议,可通过HTTP进行数据交换,并实现数据的持久存储,但其不能获取数据的指定区域。综上所述,当前的非结构化数据存取协议存在以下不足: 
1、存入前必须提前知道数据块的大小,不利于大对象或者应用层流对象的存入。 
2、获取数据必须是整块数据,不能获取数据的指定区块。 
3、对于数据不能做复杂检索,只能根据键值获取。 
发明内容
本发明的目的在于针对现有技术的不足,提供一种支持多粒度查询的高性能非结构化数据存取协议。 
本发明的目的是通过以下技术方案来实现的:一种支持多粒度查询的高性能非结构化数据存取协议,用于在一个客户端向多个分布式服务器的缓存中存取和查询多种类型的非结构化数据的具体实现,,其特征在于,该协议包括: 
(1)普通数据存取协议的实现,即在一个客户端向多个分布式服务器的缓存中存取普通类型的非结构化数据的具体实现:
(1.1)普通数据存储协议的实现,包括实现以下两种命令:
客户端以“key”为主键,向缓存中存储“data block”,所存储的数据大小为“bytes”,数据有效期至“exptime”, 附加存储的数据为“flags”,命令格式如下:“set <key> <flags> <exptime> <bytes>\r\n <data block>\r\n”,若存储成功,则返回“STORED\r\n”:
客户端以“key”为主键,向缓存中存储“data block”,所存储的数据大小为“bytes”,数据有效期至“exptime”,所要求的数据版本号为“cas unique”,附加存储的数据为“flags”,命令格式如下: “cas <key> <flags> <exptime> <bytes> <cas unique>\r\n <data block>\r\n”, 如果输入的版本号存在且存储成功,则返回“EXISTS\r\n”, 如果输入的版本号不存在,则返回“NOT_FOUND\r\n”:
(1.2)普通数据获取协议的实现,包括实现以下两种命令:
客户端以“key”为主键,获取相应的“data block”,命令格式如下: “gets <key>*\r\n”;若获取数据成功,则返回“ <VALUE <key> <flags> <bytes> \r\n<data block>\r\n>*END\r\n”:
客户端以“key”为主键,获取相应的“data block”和相应的版本号,命令格式如下:“gets <key>*\r\n”;若获取数据成功,则返回“ <VALUE <key> <flags> <bytes> <cas unique>\r\n<data block>\r\n>*END\r\n”:
(1.3)数据删除命令的实现:
客户端在缓存中删除以“key”为主键的相应数据,命令格式如下:“delete <key>\r\n”,若删除成功,则返回“DELETED\r\n”,若以该“key”为主键的值不存在,则返回” NOT_FOUND\r\n”;
(1.4)获取缓存状态命令的实现:
客户端想获取服务器的状态列表,命令格式如下:“stats\r\n”,若获取状态成功,则返回“ <STAT <name> <value>\r\n>*END\r\n”:
(2)流数据存取协议的实现,即在一个客户端向多个分布式服务器的缓存中存取流数据的具体实现:
(2.1)流数据存储协议的实现,包括实现以下两种命令:
客户端以“key”为主键,向缓存中存储数据帧(data frames),数据帧的格式如图1所示;
可见,数据帧的存储时分段实现的,每个分段的数据前加控制命令以表 明该段数据的大小,因此可以存储大容量的数据并维持数据的一致性,数据有效期至“exptime”,附加存储的数据为“flags”,命令格式如下:“sset<key><flags><exptime>\r\n<data frames>\r\n”,若存储成功,则返回“STORED\r\n”;
客户端以“key”为主键,向缓存中存储data frames,所存储的数据版本号为“cas unique”,数据有效期至“exptime”,附加存储的数据为“flag”,命令格式如下:“scas<key><flags><exptime><cas unique>\r\n<data frames>\r\n”,如果输入的版本号存在且存储成功,则返回“EXISTS\r\n”;如果输入的版本号不存在,则返回“NOT_FOUND\r\n”;如果输入的数据格式不合要求,则返回“DATA_ERROR\r\n”;
(2.2)流数据获取协议的实现,包括实现以下两种命令:
客户端以”key”为主键,从缓存中获取某个数据中以“offset”为偏移量,大小为“bytes”的某个数据中的部分数据,命令格式如下:“sget <<key> <offset> <bytes>>*\r\n”,若数据获取成功,则返回“<VALUE <key> <flags> <offset> <bytes> \r\n<data block>\r\n>*END\r\n”;
客户端以“key”为主键,从缓存中获取某个数据中以“offset”为偏移量,大小为“bytes”的某个数据中的一块以及该数据的版本号,命令格式如下: “sgets <<key> <offset> <bytes>>*\r\n”,若数据获取成功,则返回“ <VALUE <key> <flags> <offset> <bytes> <cas unique>\r\n<data block>\r\n>*END\r\n”;
(3)对象数据存取协议的实现,即在一个客户端向多个分布式服务器的缓存中存取对象数据的具体实现:
(3.1)对象数据存储协议的实现,包括实现以下两种命令:
客户端以“key[(.field)*]”表明其所要存取的数据在xml或json文件中的具体位置,向缓存中存取data block,数据有效期至“exptime”, 附加存储的数据为“flags”,命令格式如下:“<xmlset | jsonset> <key[(.field)*]> <flags> <exptime> <bytes>\r\n <data block>\r\n”,若存储成功,则返回“STORED\r\n”,若要存储的数据格式不合要求,则返回“DATA_ERROR\r\n”, 如果要存储的数据标签对应关系不正确,则返回“PARSE_ERROR\r\n”;
客户端以“key[(.field)*]”表明其所要存取的数据在xml或json文件中的具体位置,向缓存中存取data block,数据有效期至“exptime”, 附加存储的数据为“flags”, 所要求的数据版本号为“cas unique”,命令格式如下:“<xmlcas | jsoncas> <key[(.field)*]> <flags> <exptime> <bytes> <case unique>\r\n <data block>\r\n”,若输入的版本号存在且存储成功,则返回“EXISTS\r\n”,若输入的版本号不存在,则返回“NOT_FOUND\r\n”,若要存储的数据格式不合要求,则返回“DATA_ERROR\r\n”, 如果要存储的数据标签对应关系不正确,则返回“PARSE_ERROR\r\n”;
(3.2)普通数据获取协议的实现,包括实现以下两种命令:
客户端以“key[(.field)*]”表明要从缓存中的xml或jason文件的某个具体位置获取相应的数据,命令格式如下:“<xmlgets | jasongets> < key[(.field)*]>*\r\n”;如果数据获取成功,则返回“<VALUE < key[(.field)*]> <flags> <bytes>\r\n<data block>\r\n>*END\r\n”;
客户端以“key[(.field)*]”表明要从缓存中的xml或jason文件的某个具体位置获取相应的数据和其所对应的版本号,命令格式如下:“<xmlgets | jasongets> < key[(.field)*]>*\r\n”;如果数据获取成功,则返回“<VALUE < key[(.field)*]> <flags> <bytes> <cas unique>\r\n<data block>\r\n>*END\r\n”;
(3.3)对象数据删除命令的实现:
客户端在缓存中的xml或jason文件中的“key[(.field)*]”位置处删除相应内容,命令格式如下:“<xmldelete | jsondelete> <key[(.field)*]>\r\n”,若xml或jason文件中的对应内容已被删除成功,则返回” DELETED\r\n”,若xml或jason文件中不存在相应的“key[(.field)*]”位置的内容,则返回” NOT_FOUND\r\n”;
(4)查询协议的实现,即在一个客户端向多个分布式服务器的缓存中对数据键值和内容的复杂混合查询等的具体实现:
(4.1)键查询协议的实现,包括实现以下的命令:
客户端以“keyprefix”为数据主键的开头前置查询相关数据,命令格式如下: “query key.startwith(“<keyprefix>”) [KEY_ONLY]\r\n”,可选择返回查找到的数据主键还是整个数据,若数据获取成功,则返回查找到的键值、附加存储的内容“flags”、数据大小“bytes”,如果要求返回整个数据,则同时返回data block,格式如下: “<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n”;
(4.2)正则查询协议的实现,包括实现以下的命令:
客户端以“regular expression”为正则表达式查询匹配该正则表达式的主键和主键所对应的数据,命令格式如下:“query key.like(“<regular expression>) [KEY_ONLY]\r\n”,可选择返回查找到的数据主键还是整个数据,若数据获取成功,则返回查找到的主键值、附加存储的内容”flags”、数据大小为“bytes”,如果要求返回整个数据,则同时返回data block,格式如下: “<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n”;
(4.3)值查询协议的实现,包括实现以下的命令:
客户端以“regular expression”为正则表达式查询匹配该正则表达式的数据和数据所对应的主键,命令格式如下: “query value.querywith(“ <query expression>) [KEY_ONLY]\r\n”, 可选择返回查找到的数据主键还是整个数据,若数据获取成功,则返回查找到的主键值、附加存储的内容“flags”、数据大小为“bytes”,如果要求返回整个数据,则同时返回data block,格式如下: “<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n”;值查询命令还可以支持多个运算符,比如‘>’‘<‘‘>=‘‘<=‘‘=‘‘<>’‘like’等,支持连接符,比如‘and’, ‘or’, ‘(’, ‘)’等,返回格式不变
(4.4)混合查询协议的实现,包括实现以下的命令:
该查询是多个值查询以“and”和“or”相结合的复杂键值查询和值查询的实现方式,命令格式(举例)如下:“query key.startwith(keyprefix>”) and key.like(<regular expression>“) 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 <error>\r\n,SERVER_ERROR <error>\r\n”。
本发明具有的有益效果是: 
1、普通协议:可以方便高效地把数据存储,取出,删除。
2、流协议:可以在有限的内存条件下存储大文件,消除内存拷贝,减少延迟:可以存储大小未知的数据;对于OO的对象,可以边编码边传输,减少延迟非常明显;可以获取大数据块中的指定区块。 对于超大的数据块提供了多线程并行下载的可能性;非常适合对于流媒体文件存放。可以获取播放任意一段流媒体。 
3、对象协议:存储OO对象时可以做到语言无关性;可以存储或者获取OO对象中的某个子对象的内容。 
4、查询协议:不再局限于键完全匹配的查寻,提供了灵活多样的查寻方式;支持对OO对象建立索引,提高查询的效率。 
附图说明
图1为数据帧的格式图。 
具体实施方式
    非结构化数据缓存协议是复杂数据对象分布式存储的重要实现形式和功能展现,广泛应用于动态分布式Web应用的大型系统中。当前的非结构化数据对象缓存协议只提供了支持分布式操作的简单数据对象的存取和获取功能和简单的自定义键值的数据查询,所要存取的数据对象大小事先必须已知且受内存大小的限制。本专利在现有的多个非结构化数据对象缓存协议的基础上,通过改进和重新设计memcached中的协议模块,实现了一个支持多粒度查询的高性能非结构化数据存取协议,包括实现了大规模流对象数据的存取和获取、数据的自定义部分存取以及多种灵活的复杂数据检索的实现,同时保证数据存取的高效性。 
协议模块和相关介绍: 
1、普通协议,用于在一个客户端向多个分布式服务器的缓存中存取普通类型的非结构化数据,包括:
1.1存储命令,其命令格式和返回格式如下:
1.1.1命令格式:
set <key> <flags> <exptime> <bytes>\r\n <data block>\r\n
表明客户端以”key”为主键,向缓存中存储”data block”,所存储的数据大小为”bytes”,数据有效期至”exptime”, 附加存储的数据为”flags”
cas <key> <flags> <exptime> <bytes> <cas unique>\r\n <data block>\r\n
表明客户端以”key”为主键,向缓存中存储”data block”,所存储的数据大小为”bytes”,数据有效期至”exptime”,所要求的数据版本号为”cas unique”,附加存储的数据为”flags”
1.1.2返回格式:
STORED\r\n
对于”set”命令,如果存储成功,则返回此命令.
EXISTS\r\n
对于”cas”命令,如果输入的版本号存在且存储成功,则返回此命令。
NOT_FOUND\r\n
对于”cas”命令,如果输入的版本号不存在,则返回此命令。
1.2取出命令,其命令格式和返回格式如下: 
1.2.1命令格式:
get <key>*\r\n
表明客户端以”key”为主键,获取相应的data block。
gets <key>*\r\n
表明客户端以”key”为主键,获取相应的data block及其版本号。
1.2.2返回格式: 
<VALUE <key> <flags> <bytes> [<cas unique>]\r\n<data block>\r\n>*END\r\n。
1.3删除命令,其命令格式和返回格式如下: 
1.3.1命令格式:
delete <key>\r\n
表明客户端以”key”为主键,删除相应的data block。
1.3.2返回格式: 
DELETED\r\n
若删除成功,则返回此命令。
NOT_FOUND\r\n
若以该”key”为主键的值不存在,则返回此命令。
1.4状态命令,其命令格式和返回格式如下: 
1.4.1命令格式:
stats\r\n
返回当天服务器的状态列表。
1.4.2返回格式: 
<STAT <name> <value>\r\n>*END\r\n
2、流协议,用于在一个客户端向多个分布式服务器的缓存中存取流数据,包括:
2.1存储命令:
2.1.1命令格式:
sset <key> <flags> <exptime>\r\n <data frames>\r\n
表明客户端以”key”为主键,向缓存中存储data frames,所存储的数据大小不规定,数据有效期至“exptime”, 附加存储的数据为“flags”。
scas<key><flags><exptime><cas unique>\r\n<data frames>\r\n 
表明客户端以”key”为主键,向缓存中存储data frames,所存储的数据版本号位”cas unique”,数据有效期至”exptime”,附加存储的数据为”flag” 
2.1.2数据帧(data frames)格式如图1所示。 
由此可见,流协议是对大容量数据的分段存储实现的,并在每个分段的数据前加控制命令以表明该段数据的大小,因此可以存储大容量的数据并维持数据的一致性。 
2.1.2返回格式: 
STORED\r\n
对于”sset”命令,如果存储成功,则返回此命令。
EXISTS\r\n
对于”scas”命令,如果输入的版本号存在且存储成功,则返回此命令。
NOT_FOUND\r\n
对于”scas”命令,如果输入的版本号不存在,则返回此命令。
DATA_ERROR\r\n
对于”sset”或”scas”命令,如果输入的数据格式不符合要求,则返回此命令。
2.2取出命令: 
2.2.1命令格式:
sget <<key> <offset> <bytes>>*\r\n
表明客户端以”key”为主键,从缓存中获取某个数据中以”offset”为偏移量,大小为”bytes”的某个数据中的部分数据。
sgets <<key> <offset> <bytes>>*\r\n
表明客户端以”key”为主键,从缓存中获取某个数据中以”offset”为偏移量,大小为”bytes”的某个数据中的一块以及该数据的版本号。
2.2.2返回格式 
<VALUE <key> <flags> <offset> <bytes> [<cas unique>]\r\n<data block>\r\n>*END\r\n
3、对象协议,用于在一个客户端向多个分布式服务器的缓存中存取对象数据:
3.1存储命令:
3.1.1命令格式:
<xmlset | jsonset> <key[(.field)*]> <flags> <exptime> <bytes>\r\n <data block>\r\n
表明客户端以”key[(.field)*]”表明其所要存取的数据在xml或json文件中的具体位置,向缓存中存取data block,数据有效期至“exptime”, 附加存储的数据为“flags”。
<xmlcas | jsoncas> <key[(.field)*]> <flags> <exptime> <bytes> <case unique>\r\n <data block>\r\n
表明客户端以”key[(.field)*]”表明其所要存取的数据在xml或json文件中的具体位置,向缓存中存取data block,数据有效期至“exptime”, 附加存储的数据为“flags”, 所要求的数据版本号为“cas unique”。
3.1.2返回格式: 
STORED\r\n
对于”xmlset”或”jsonset”命令,如果存储成功,则返回此命令。
EXISTS\r\n
对于”xmlcas”或”jsoncas”命令,如果输入的版本号存在且存储成功,则返回此命令。
NOT_FOUND\r\n
对于”xmlcas”或”jsoncas”命令,如果输入的版本号不存在,则返回此命令。
DATA_ERROR\r\n
如果要存储的数据格式不合要求,则返回此命令。
PARSE_ERROR\r\n
如果要存储的数据标签对应关系不正确,则返回此命令。
3.2取出命令: 
3.2.1命令格式:
<xmlget | jasonget> < key[(.field)*]>*\r\n
表明客户端以”key[(.field)*]”表明要从缓存中的xml或jason文件的某个具体位置获取相应的数据。
<xmlgets | jasongets> < key[(.field)*]>*\r\n
表明客户端以”key[(.field)*]”表明要从缓存中的xml或jason文件的某个具体位置获取相应的数据和其所对应的版本号。
3.2.2返回格式: 
<VALUE < key[(.field)*]> <flags> <bytes> [<cas unique>]\r\n<data block>\r\n>*END\r\n
3.3删除命令:
3.3.1命令格式:
<xmldelete | jsondelete> <key[(.field)*]>\r\n
表明客户端在缓存中的xml或jason文件中的”key[(.field)*]”位置处删除相应内容。
3.3.2返回格式: 
DELETED\r\n
表明xml或jason文件中的对应内容已被删除成功。
NOT_FOUND\r\n
表明xml或jason文件中不存在相应的”key[(.field)*]”位置的内容。
4、查询协议,用于在一个客户端向多个分布式服务器的缓存中对数据键值和内容的复杂混合查询等: 
4.1键查询:
4.1.1前置查询:
4.1.1.1命令格式:
query key.startwith(“<keyprefix>”) [KEY_ONLY]\r\n
表明客户端以”keyprefix”为数据主键的开头查询相关数据,可选择返回该数据的主键还是整个数据。
4.1.1.2返回格式: 
<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n
返回查找到的键值、附加存储的内容”flags”、数据大小”bytes”,如果要求返回整个数据,则同时返回data block。
4.1.2正则查询: 
4.1.2.1命令格式
query key.like(“<regular expression>”) [KEY_ONLY]\r\n
表明客户端以” regular expression”为正则表达式查询匹配该正则表达式的主键和主键所对应的数据。
4.1.2.2返回格式: 
<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n
返回查找到的主键值、附加存储的内容”flags”、数据大小为”bytes”,如果要求返回整个数据,则同时返回data block。
4.2值查询: 
4.2.1命令格式:
query value.querywith(“ <query expression>”) [KEY_ONLY]\r\n
表明客户端以” regular expression”为正则表达式查询匹配该正则表达式的数据和数据所对应的主键。
4.2.1.1支持运算符: 
‘>’‘<‘‘>=‘‘<=‘‘=‘‘<>’‘like’
4.2.1.2支持连接符:
‘and’, ‘or’, ‘(’, ‘)’
4.2.2返回格式:
<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n
返回查找到的主键值、附加存储的内容”flags”、数据大小为”bytes”,如果要求返回整个数据,则同时返回data block。
4.3混合查询: 
该查询是多个值查询以“and”和“or”相结合的复杂查询的实现方式
4.3.1命令示例:
query key.startwith(“<keyprefix>”) and key.like(“<regular expression>”) or value.querywith(“<query expression>”)\r\n
4.3.2支持连接符:
‘and’, ‘or’, ‘(’, ‘)’
4.3.3返回格式:
<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n
4.4、索引建立:
4.4.1命令格式:
vi <.field(.field)*>\r\n
表明客户端对OO对象的某个子键建立索引,自动忽略非OO或者不含此子键的对象。
返回格式: 
CREATED\r\n
表明该索引已被成功创建。
4.5索引删除: 
4.5.1命令格式:
dvi <.field(.field)*>\r\n
表明客户端删除相应的索引。
4.5.2返回格式: 
DELETED\r\n
表明索引删除成功。
NOT_FOUND\r\n
表明相应的索引不存在。
4.6错误代码:表明对协议命令的使用出错或程序运行在客户端或服务端出现其他错误: 
ERROR\r\n
CLIENT_ERROR <error>\r\n
SERVER_ERROR <error>\r\n。
本发明按照上述四个模块来实施,将每一个功能模块单独分开来实施。本发明部分引用memcached协议。下面将就本体系作详细介绍。 
错误代码: 
ERROR\r\n
指令代码不可识别。
CLIENT_ERROR <error>\r\n
识别出相应指令,但是指令格式不符合约定。
SERVER_ERROR <error>\r\n
服务器发生严重错误。一般情况下这种错误并不常见。
协议模块: 
1、普通协议:
1.1存储命令:
1.1.1示例命令:
set key1 0 3000 50\r\n <data block>\r\n
cas key2 1 1272164977406 1000 5\r\n <data block>\r\n
1.1.2命令解析
此命令为将一个数据块存入服务器。
参数解析: 
<key>
将要存储的数据键
<flags>
数据标志位,用户自定义
<exptime>
数据过期时间。
若为0则永不过期 
若为UNIX时间戳,则过期日为此时间
否则过期时间为从现在起的exptime
<bytes>
将要存储的数据块大小
<cas unique>
当前数据版本号,使用cas命令时,此版本号必须与实际版本号匹配,否则插入失败。
<data block>
将要插入的二进制数据块。
1.1.3返回代码: 
STORED\r\n
表述数据存储成功
EXISTS\r\n
表示使用cas命令存储时版本号与实际版本号不匹配。
NOT_FOUND\r\n 
表示用cas命令存储此数据不存在或者已被存储。
1.2取出命令: 
1.2.1命令示例:
get key1 key2 key3\r\n
gets key1\r\n
1.2.2命令解析:
返回键所对应的数据,若无此数据则不返回。gets命令同时返回cas unique版本号。
1.2.3返回示例: 
VALUE key1 0 50\r\n<data block>\r\nVALUE key3 3 50\r\n<data block>\r\nEND\r\n
VALUE key1 0 50 3\r\n<data block>\r\n END\r\n
1.3删除命令:
                                          i.          命令示例:
delete  key1\r\n
                                        ii.          命令解析:
删除一个键对应的数据。
                                      iii.          返回代码: 
DELETED\r\n
数据被成功删除。
NOT_FOUND\r\n
对应的数据未找到。
1.4状态命令: 
                                          i.          命令解析:
返回当天服务器的状态列表。
                                        ii.          返回示例: 
STAT maxSize 10000\r\nSTAT usedSize 50\r\nEND\r\n
2、流协议:
2.1存储命令:
2.1.1命令示例:
sset  key1 0 0\r\n <data frames>\r\n
scas key1 1 0 5\r\n <data frames>\r\n
2.2.2命令解析:
普通存储命令必须传入数据块大小,在流协议中,数据大小在编码完成前是未知的,所以sset命令中无需<bytes>参数。
同时将<data block>中的内容由raw data改为数据帧(data frames)。数据帧具体格式如附图1。 
每个帧的开头都包含前一帧的数据块长度和当前帧的数据块长度。第一帧的前帧长度为0,整个数据帧以当前帧长为0的帧结束。当校验第一帧的前帧长度不为0,或者后续帧的前帧长度和实际不符,则判断为数据错误,报“DATA_ERROR\r\n”错误。 
2.2.3返回代码: 
STORED\r\n
EXISTS\r\n
NOT_FOUND\r\n
以上同普通存储协议
DATA_ERROR\r\n
数据帧解析失败
2.2取出命令:
2.2.1命令示例:
sget key1 0 100 key2 0 -1\r\n
sgets key1 100 0 key2 100 50\r\n
2.2.2命令解析:
sget命令中key, offset和bytes为一组键参数。键参数可为多组。
执行结果类似于普通的取出命令,但是增加offset参数,并且每组返回数据均为从指定offset开始,最大长度为bytes的数据块。 
若offest越界,则将offset和bytes同时置为0。 
若bytes越界,则获取从offset开始的所有数据。 
返回数据为raw data,而非数据帧。 
其余规则同普通取出命令。 
2.2.3返回示例: 
VALUE key1 0 0 50\r\n<data block>\r\nVALUE key2 3 0 50\r\n<data block>\r\nEND\r\n
VALUE key1 0 100 50 3\r\n<data block>\r\n END\r\n
3、对象协议:
对象协议不局限于xml和jason,可扩展至其他平台无关性数据协议。
3.1存储协议: 
3.1.1命令示例:
xmlset key1 1 0 50\r\n <data block>\r\n
jasoncas key1.a 1 0 100 5\r\n <data block>\r\n
3.1.2命令解析:
键不含子键:
传入数据必须能被指定格式(xml或json,其他格式也可以)解析,否则报“DATA_ERROR\r\n”错误。
键包含子键: 
自动忽略flags和exptime。
输入数据必须包含相应的子键,如:key1.a.b对应的输入必须包含<a><b>value</b></a>,否则报“DATA_ERROR\r\n”错误。 
若对应主键下无数据,则存入相应的子键。 
若对应主键下有数据,解析相应数据,只更新相应的子键。若解析失败则报“PARSE_ERROR\r\n”错误。 
3.1.3返回代码: 
STORED\r\n
EXISTS\r\n
NOT_FOUND\r\n
以上同普通存储
DATA_ERROR\r\n
输入数据解析失败
PARSE_ERROR\r\n
主键下原有数据解析失败
3.2取出命令:
3.2.1命令示例:
xmlget  key1.a.b\r\n
xmlgets key1\r\n
3.2.2命令解析:
若指定主键下的数据不能被指定协议解析,报“PARSE_ERROR\r\n”错误。
若未指定子键,则返回全部数据。 
若指定子键,则只获取子键内容(包含tag信息)。如xmlget key1.a.b,返回内容需为<a><b>value</b></a>,而不仅仅是value. 
若解析错误,作为数据不存在处理,不报错误。
3.2.3返回示例: 
VALUE key1.a.b 0 50\r\n<data block1>\r\nEND\r\n
data block1为:
<a><b>hello world</b></a>
VALUE key1 0 50 3\r\n<data block2>\r\n END\r\n
data block2为:
<a><c>this is</c><b>hello world</b><e><f>haha</f></e></a>
3.3删除命令:
3.3.1命令示例:
jasondelete key1.a.b\r\n
3.3.2命令解析:
删除一个子键。删除整个最内层子键,包含tag信息。
如: 
<a><c>this is</c><b>hello world</b><e><f>haha</f></e></a>在删除.a.b子键后为:
<a><c>this is</c><e><f>haha</f></e></a>
3.3.3返回代码:
DELETED\r\n
删除成功
NOT_FOUND\r\n
对应子键不存在
4、查询协议:
4.1键查询:
4.1.1前置查询:
命令示例:
query key.startwith(“this”) KEY_ONLY\r\n
命令解析:
特殊符号需要转译,如“\””
找到所有键以<keyprefix>打头的数据。若有KEY_ONLY标识,则不返回数据,只返回键和一些相关属性,否则和普通取出命令一样依次返回匹配数据。
返回示例: 
VALUE this0 0 500\r\nVALUE this1 0 500\r\nVALUE this2 0 500\r\nEND\r\n
4.1.2正则查询:
命令示例:
query key.like(“^[0-9]_this”)\r\n
命令解析:
针对正则表达式对所有的键进行匹配,返回所有匹配的键及对应数据,若标识为KEY_ONLY则不返回数据。
正则查询需要对所有的键进行扫描,效率一般较低 
返回示例:
VALUE 0_this 0 500\r\n<data block>\r\nVALUE 1_this 0 500\r\n<data block>\r\n VALUE 2_this 0 500\r\n<data block>\r\nEND\r\n
4.2值查询:
命令示例:
query value.querywith(“.a.b > 10 and .c like \”^E\””) KEY_ONLY\r\n
命令解析:
子键必须以 “.”开头。
自动忽略非OO类型数据,对于OO对象,根据对应类型(xml,json或者其他)解析原有数据,取出对应子键进行比较。自动忽略解析错误的数据。 
如有索引优先使用索引 
若没有索引或者条件复杂时需要全表扫描,效率较低。
返回示例: 
VALUE key1 0 500\r\n VALUE key2 0 500\r\nVALUE key3 0 500\r\nEND\r\n
4.3混合查询:
命令示例:
query value.querywith(“.a.b > 10 and .c like \”^E\””) and (key.startwith(“this”) or key.like(“^[0-9]_this”)) KEY_ONLY\r\n
命令解析
支持键和值混合的复杂查询。
可能涉及全表扫描,效率较低。 
4.4索引建立: 
命令示例:
vi .a.b\r\n
命令解析:
子键需要以“.”开始。
对OO对象的某个子键建立索引,自动忽略非OO或者不含此子键的对象。 
有助于提高非正则查询效率。 
返回代码: 
CREATED\r\n
索引创建成功
4.5索引删除:
命令示例:
dvi .a.b\r\n
命令解析:
删除对应的索引。
返回代码: 
DELETED\r\n
索引删除成功
NOT_FOUND\r\n
指定索引不存在
本发明主要在memcached协议基础上做修改和改进,除了在普通协议部分保留对普通非结构话数据存取和读取的部分功能外,主要实现对大对象或者应用层流对象的数据存取,使客户端在数据存取前不必获取整块完整的数据或确保其数据块不超过内存限制,并能获取指定区块的大容量数据中的局部数据,大大方便了各种类型非结构化应用层数据的灵活存储和获取。此外,提供了多种灵活的数据检索方式,提供既支持键值又支持内容的前置查询、正则查询、关联查询等功能。新的协议的保留基于存储键/值对的hashmap的实现方式,但其增加了基于B+树的支持灵活数据检索的实现方式,从而保证了大容量非结构化数据存储、获取、检索等的效率。

Claims (1)

1.一种支持多粒度查询的高性能非结构化数据存取协议,用于在一个客户端向多个分布式服务器的缓存中存取和查询多种类型的非结构化数据的具体实现,,其特征在于,该协议包括:
(1)普通数据存取协议的实现,即在一个客户端向多个分布式服务器的缓存中存取普通类型的非结构化数据的具体实现:
(1.1)普通数据存储协议的实现,包括实现以下两种命令:
客户端以“key”为主键,向缓存中存储“data block”,所存储的数据大小为“bytes”,数据有效期至“exptime”, 附加存储的数据为“flags”,命令格式如下:“set <key> <flags> <exptime> <bytes>\r\n <data block>\r\n”,若存储成功,则返回“STORED\r\n”:
客户端以“key”为主键,向缓存中存储“data block”,所存储的数据大小为“bytes”,数据有效期至“exptime”,所要求的数据版本号为“cas unique”,附加存储的数据为“flags”,命令格式如下: “cas <key> <flags> <exptime> <bytes> <cas unique>\r\n <data block>\r\n”, 如果输入的版本号存在且存储成功,则返回“EXISTS\r\n”, 如果输入的版本号不存在,则返回“NOT_FOUND\r\n”:
(1.2)普通数据获取协议的实现,包括实现以下两种命令:
客户端以“key”为主键,获取相应的“data block”,命令格式如下: “gets <key>*\r\n”;若获取数据成功,则返回“ <VALUE <key> <flags> <bytes> \r\n<data block>\r\n>*END\r\n”:
客户端以“key”为主键,获取相应的“data block”和相应的版本号,命令格式如下:“gets <key>*\r\n”;若获取数据成功,则返回“ <VALUE <key> <flags> <bytes> <cas unique>\r\n<data block>\r\n>*END\r\n”:
(1.3)数据删除命令的实现:
客户端在缓存中删除以“key”为主键的相应数据,命令格式如下:“delete <key>\r\n”,若删除成功,则返回“DELETED\r\n”,若以该“key”为主键的值不存在,则返回” NOT_FOUND\r\n”;
(1.4)获取缓存状态命令的实现:
客户端想获取服务器的状态列表,命令格式如下:“stats\r\n”,若获取状态成功,则返回“ <STAT <name> <value>\r\n>*END\r\n”:
流数据存取协议的实现,即在一个客户端向多个分布式服务器的缓存中存取流数据的具体实现:
(2.1)流数据存储协议的实现,包括实现以下两种命令:
客户端以“key”为主键,向缓存中存储数据帧(data frames),数据帧的格式如图1所示;
可见,数据帧的存储时分段实现的,每个分段的数据前加控制命令以表明该段数据的大小,因此可以存储大容量的数据并维持数据的一致性,数据有效期至“exptime”,附加存储的数据为“flags”,命令格式如下:“sset<key><flags><exptime>\r\n<data frames>\r\n”,若存储成功,则返回“STORED\r\n”;
客户端以“key”为主键,向缓存中存储data frames,所存储的数据版本号为“cas unique”,数据有效期至“exptime”,附加存储的数据为“flag”,命令格式如下:“scas<key><flags><exptime><cas unique>\r\n<data frames>\r\n”,如果输入的版本号存在且存储成功,则返回“EXISTS\r\n”;如果输入的版本号不存在,则返回“NOT_FOUND\r\n”;如果输入的数据格式不合要求,则返回“DATA_ERROR\r\n”;
(2.2)流数据获取协议的实现,包括实现以下两种命令:
客户端以”key”为主键,从缓存中获取某个数据中以“offset”为偏移量,大小为“bytes”的某个数据中的部分数据,命令格式如下:“sget <<key> <offset> <bytes>>*\r\n”,若数据获取成功,则返回“<VALUE <key> <flags> <offset> <bytes> \r\n<data block>\r\n>*END\r\n”;
客户端以“key”为主键,从缓存中获取某个数据中以“offset”为偏移量,大小为“bytes”的某个数据中的一块以及该数据的版本号,命令格式如下: “sgets <<key> <offset> <bytes>>*\r\n”,若数据获取成功,则返回“ <VALUE <key> <flags> <offset> <bytes> <cas unique>\r\n<data block>\r\n>*END\r\n”;
对象数据存取协议的实现,即在一个客户端向多个分布式服务器的缓存中存取对象数据的具体实现:
(3.1)对象数据存储协议的实现,包括实现以下两种命令:
客户端以“key[(.field)*]”表明其所要存取的数据在xml或json文件中的具体位置,向缓存中存取data block,数据有效期至“exptime”, 附加存储的数据为“flags”,命令格式如下:“<xmlset | jsonset> <key[(.field)*]> <flags> <exptime> <bytes>\r\n <data block>\r\n”,若存储成功,则返回“STORED\r\n”,若要存储的数据格式不合要求,则返回“DATA_ERROR\r\n”, 如果要存储的数据标签对应关系不正确,则返回“PARSE_ERROR\r\n”;
客户端以“key[(.field)*]”表明其所要存取的数据在xml或json文件中的具体位置,向缓存中存取data block,数据有效期至“exptime”, 附加存储的数据为“flags”, 所要求的数据版本号为“cas unique”,命令格式如下:“<xmlcas | jsoncas> <key[(.field)*]> <flags> <exptime> <bytes> <case unique>\r\n <data block>\r\n”,若输入的版本号存在且存储成功,则返回“EXISTS\r\n”,若输入的版本号不存在,则返回“NOT_FOUND\r\n”,若要存储的数据格式不合要求,则返回“DATA_ERROR\r\n”, 如果要存储的数据标签对应关系不正确,则返回“PARSE_ERROR\r\n”;
(3.2)普通数据获取协议的实现,包括实现以下两种命令:
客户端以“key[(.field)*]”表明要从缓存中的xml或jason文件的某个具体位置获取相应的数据,命令格式如下:“<xmlgets | jasongets> < key[(.field)*]>*\r\n”;如果数据获取成功,则返回“<VALUE < key[(.field)*]> <flags> <bytes>\r\n<data block>\r\n>*END\r\n”;
客户端以“key[(.field)*]”表明要从缓存中的xml或jason文件的某个具体位置获取相应的数据和其所对应的版本号,命令格式如下:“<xmlgets | jasongets> < key[(.field)*]>*\r\n”;如果数据获取成功,则返回“<VALUE < key[(.field)*]> <flags> <bytes> <cas unique>\r\n<data block>\r\n>*END\r\n”;
(3.3)对象数据删除命令的实现:
客户端在缓存中的xml或jason文件中的“key[(.field)*]”位置处删除相应内容,命令格式如下:“<xmldelete | jsondelete> <key[(.field)*]>\r\n”,若xml或jason文件中的对应内容已被删除成功,则返回” DELETED\r\n”,若xml或jason文件中不存在相应的“key[(.field)*]”位置的内容,则返回” NOT_FOUND\r\n”;
(4)查询协议的实现,即在一个客户端向多个分布式服务器的缓存中对数据键值和内容的复杂混合查询等的具体实现:
(4.1)键查询协议的实现,包括实现以下的命令:
客户端以“keyprefix”为数据主键的开头前置查询相关数据,命令格式如下: “query key.startwith(“<keyprefix>”) [KEY_ONLY]\r\n”,可选择返回查找到的数据主键还是整个数据,若数据获取成功,则返回查找到的键值、附加存储的内容“flags”、数据大小“bytes”,如果要求返回整个数据,则同时返回data block,格式如下: “<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n”;
(4.2)正则查询协议的实现,包括实现以下的命令:
客户端以“regular expression”为正则表达式查询匹配该正则表达式的主键和主键所对应的数据,命令格式如下:“query key.like(“<regular expression>) [KEY_ONLY]\r\n”,可选择返回查找到的数据主键还是整个数据,若数据获取成功,则返回查找到的主键值、附加存储的内容”flags”、数据大小为“bytes”,如果要求返回整个数据,则同时返回data block,格式如下: “<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n”;
(4.3)值查询协议的实现,包括实现以下的命令:
客户端以“regular expression”为正则表达式查询匹配该正则表达式的数据和数据所对应的主键,命令格式如下: “query value.querywith(“ <query expression>) [KEY_ONLY]\r\n”, 可选择返回查找到的数据主键还是整个数据,若数据获取成功,则返回查找到的主键值、附加存储的内容“flags”、数据大小为“bytes”,如果要求返回整个数据,则同时返回data block,格式如下: “<VALUE <key> <flags> <bytes>\r\n[<data block>\r\n]>*END\r\n”;值查询命令还可以支持多个运算符,比如‘>’、‘<’、‘>=’、‘<=’、‘=’、‘<>’、‘like’等,支持连接符,比如‘and’, ‘or’, ‘(’, ‘)’等,返回格式不变;
(4.4)混合查询协议的实现,包括实现以下的命令:
该查询是多个值查询以“and”和“or”相结合的复杂键值查询和值查询的实现方式,命令格式(举例)如下:“query key.startwith(keyprefix>”) and key.like(<regular expression>“) 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 <error>\r\n,SERVER_ERROR <error>\r\n”。
CN201110443773.3A 2011-12-27 2011-12-27 一种支持多粒度查询的高性能非结构化数据存取方法 Active CN102750300B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110443773.3A CN102750300B (zh) 2011-12-27 2011-12-27 一种支持多粒度查询的高性能非结构化数据存取方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110443773.3A CN102750300B (zh) 2011-12-27 2011-12-27 一种支持多粒度查询的高性能非结构化数据存取方法

Publications (2)

Publication Number Publication Date
CN102750300A true CN102750300A (zh) 2012-10-24
CN102750300B CN102750300B (zh) 2014-05-07

Family

ID=47030492

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110443773.3A Active CN102750300B (zh) 2011-12-27 2011-12-27 一种支持多粒度查询的高性能非结构化数据存取方法

Country Status (1)

Country Link
CN (1) CN102750300B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104750815A (zh) * 2015-03-30 2015-07-01 浪潮集团有限公司 一种基于HBase的Lob数据的存储方法及装置
CN105334364A (zh) * 2014-08-04 2016-02-17 特克特朗尼克公司 具有状态的串行比特流正则表达式
CN106126356A (zh) * 2016-06-24 2016-11-16 努比亚技术有限公司 一种服务器缓存的实现、生成方法及系统
CN106202361A (zh) * 2016-07-07 2016-12-07 上海携程商务有限公司 数据查询方法及系统
CN106534049A (zh) * 2015-09-11 2017-03-22 腾讯科技(深圳)有限公司 基于服务器的数据下发方法、客户端、服务器及系统
CN108733545A (zh) * 2017-04-25 2018-11-02 北京微影时代科技有限公司 一种压力测试方法及装置
CN110717756A (zh) * 2019-09-11 2020-01-21 口碑(上海)信息技术有限公司 基于合约的支付数据处理装置及方法
WO2024040607A1 (zh) * 2022-08-26 2024-02-29 西门子股份公司 数据访问方法、装置、电子设备及计算机可读存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101477532A (zh) * 2008-12-23 2009-07-08 北京畅游天下网络技术有限公司 实现数据存储、读取的方法、装置及系统

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101477532A (zh) * 2008-12-23 2009-07-08 北京畅游天下网络技术有限公司 实现数据存储、读取的方法、装置及系统

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
JAIDEEP SRIVASTAVA EL AT.: "《Web Usage Mining: Discovery and Applications of Usage Patterns from Web Data》", 《SIGKDD EXPLORATIONS》 *
SANDRO ARAYA EL AT.: "《A methodology for web usage mining and its application to target group identi"cation》", 《FUZZY SETS AND SYSTEMS》 *
张骞等: "《Peer-to-Peer环境下多粒度Trust模型构造》", 《JOURNAL OF SOFTWARE》 *
王红滨等: "《:基于非结构化数据的本体学习研究》", 《计算机工程与应用》 *

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105334364B (zh) * 2014-08-04 2020-04-14 特克特朗尼克公司 具有状态的串行比特流正则表达式
CN105334364A (zh) * 2014-08-04 2016-02-17 特克特朗尼克公司 具有状态的串行比特流正则表达式
CN104750815A (zh) * 2015-03-30 2015-07-01 浪潮集团有限公司 一种基于HBase的Lob数据的存储方法及装置
CN104750815B (zh) * 2015-03-30 2017-11-03 浪潮集团有限公司 一种基于HBase的Lob数据的存储方法及装置
CN106534049A (zh) * 2015-09-11 2017-03-22 腾讯科技(深圳)有限公司 基于服务器的数据下发方法、客户端、服务器及系统
CN106534049B (zh) * 2015-09-11 2020-10-20 腾讯科技(深圳)有限公司 基于服务器的数据下发方法、客户端、服务器及系统
CN106126356A (zh) * 2016-06-24 2016-11-16 努比亚技术有限公司 一种服务器缓存的实现、生成方法及系统
CN106202361A (zh) * 2016-07-07 2016-12-07 上海携程商务有限公司 数据查询方法及系统
CN106202361B (zh) * 2016-07-07 2019-08-20 上海携程商务有限公司 数据查询方法及系统
CN108733545A (zh) * 2017-04-25 2018-11-02 北京微影时代科技有限公司 一种压力测试方法及装置
CN110717756A (zh) * 2019-09-11 2020-01-21 口碑(上海)信息技术有限公司 基于合约的支付数据处理装置及方法
CN110717756B (zh) * 2019-09-11 2022-05-24 口碑(上海)信息技术有限公司 基于合约的支付数据处理装置及方法
WO2024040607A1 (zh) * 2022-08-26 2024-02-29 西门子股份公司 数据访问方法、装置、电子设备及计算机可读存储介质

Also Published As

Publication number Publication date
CN102750300B (zh) 2014-05-07

Similar Documents

Publication Publication Date Title
CN102750300B (zh) 一种支持多粒度查询的高性能非结构化数据存取方法
US8166074B2 (en) Index data structure for a peer-to-peer network
Koloniari et al. Peer-to-peer management of XML data: issues and research challenges
US8880489B2 (en) Discovery across multiple registries
US7933916B2 (en) Querying nonSQL data stores with a SQL-style language
US8938459B2 (en) System and method for distributed index searching of electronic content
JP6062863B2 (ja) 効率的な検索を可能にするためのサーバに基づくメディアコンテンツ及びlanに基づくメディアコンテンツを集約する方法及び装置
US20150039629A1 (en) Method for storing and searching tagged content items in a distributed system
US8214355B2 (en) Small table: multitenancy for lots of small tables on a cloud database
CN102122285A (zh) 一种数据缓存系统和数据查询方法
CN106326381A (zh) 基于MapDB构建的HBase数据检索方法
CN103425726A (zh) 使用业务智能工具访问开放数据
CN103761102B (zh) 一种统一数据服务平台及其实现方法
US20210173888A1 (en) Proxy server caching of database content
Von der Weth et al. Multiterm keyword search in NoSQL systems
CN109918425A (zh) 一种实现数据导入非关系型数据库的方法和系统
JP2014232532A (ja) 範囲クエリを処理するデータベース制御部、方法及びプログラム
Schreiner et al. Bringing SQL databases to key-based NoSQL databases: a canonical approach
CN109542930A (zh) 一种基于ElasticSearch的数据高效检索方法
WO2020243022A1 (en) High density time-series data indexing and compression
CN104391931A (zh) 一种云计算中海量数据高效索引方法
CN109495525B (zh) 网络组件、解析内容标识的方法和计算机可读存储介质
JP2017500640A (ja) ルートノードを変更するための方法および変更装置
CN116628285B (zh) 区块链交易数据查询方法及装置
US11461302B1 (en) Storing multiple instances of data items to implement key overloading in database tables

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant