让NoSql支持简单条件查询

现在随着NoSql的迅速发展 NoSql也已经不是只一种概念,像MongoDB、tokyo tyrant等,一些乱七八糟的对Nosql 的介绍我就不说了,应为他只取决于key-value 的存储方式,所以他的速度就快,但是我如果想进行条件查询怎么版呢?只要改变一些逻辑就可以了,废话不多说了,下面只谈我的思路,怎么安装我就不说了

我测试用的是tokyo tyrant,我也是刚接触不久

比如我要存一条新闻 curl -X PUT http://127.0.0.1:1978/1 -d "{"Title":"This is the title","Content":"This is the content","CreateTime":"2011-4-12"}"

内容是基于Json的数据格式,这条数据的key=1

现在我要找到这条数据的话只能是根据key 来查询,也就是

curl http://127.0.0.1:1978/1

让他只是添加查询也只是多了一个步骤:

就是拆分插入

这是第一条

curl -X PUT http://127.0.0.1:1978/2 -d "{"Title":"This is the title","Content":"This is the content","CreateTime":"2011-4-12"}"

curl -X PUT http://127.0.0.1:1978/Title=This is the title -d "2"

curl -X PUT http://127.0.0.1:1978/Content=This is the content -d "2"

curl -X PUT http://127.0.0.1:1978/CreateTime=2011-4-12 -d "2"

这是第二条

curl -X PUT http://127.0.0.1:1978/3 -d "{"Title":"This is the title2","Content":"This is the content2","CreateTime":"2011-4-12"}"

curl -X PUT http://127.0.0.1:1978/Title=This is the title2 -d "3"

curl -X PUT http://127.0.0.1:1978/Content=This is the content2 -d "3"

curl -X PUT http://127.0.0.1:1978/CreateTime=2011-4-12 -d "3"

这里估计大家都明白了吧,这无非就是将一条数据拆开后再储蓄

这样虽然数据量大了点你但查询的时候就可以用条件查询了

比如我想查询今天的数据 curl http://127.0.0.1:1978/CreateTime=2011-4-12

这样满足这个条件的就会是 2和3 这样就可以再根据这两个value 查询相应的key

当然,也支持与或的多条件查询,分别请求

curl http://127.0.0.1:1978/CreateTime=2011-4-12  这是今天的

curl http://127.0.0.1:1978/Title=This is the title2     标题要等于This is the title2

现在是两个条件匹配重复次数为2的 一条的结果是2和3 另一条的结果是3,这样3重复了两次,结果就是3了

或的查询

curl http://127.0.0.1:1978/Title=This is the title

curl http://127.0.0.1:1978/Title=This is the title2

我要查询标题为这两个的 然后把查询出来的value合并就可以去找结果了

当然可以根据这样的思路你可以去写个与或合并的条件查询,这里由于时间关系我就不多说了

还有就是说字段重复的问题,比如我这边的一条数据有个字段是Title 那边一跳数据格式不一样但也有个字段是Title 这样不就冲突了吗?这个问题你可以用表的概念

比如一个是新闻的Title 你就写 News_Title=This is the title

另一个是产品的Title 你可以写 Products_Title=This is the product title

这样就不不会混淆了,思路来自于关系型数据库,仅供大家拍砖

posted @ 2011-04-12 08:53  sixserve  阅读(3088)  评论(5编辑  收藏  举报