让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
这样就不不会混淆了,思路来自于关系型数据库,仅供大家拍砖