我在Redis中存储了大约50,000个json对象。 这适用于通过其唯一键查找对象的主要用例。
我现在必须添加一个功能,以根据基于对象数据的复杂查询来搜索对象。例如,2011-03-01和2012-01-12期间发布的所有具有“lex”作者的项目,库存超过5件。
使用SQL这很简单。 我不太了解Redis,但没有看到任何类似的东西。
所以我想有一个小的关系数据库,我将存储Redis密钥和我需要搜索的数据。当需要一个复杂的查询时,我点击SQL并获得一组密钥以退出Redis。
我不经常更改数据,我会知道何时以及发生了什么变化。所以我可以在更新时将数据导入到rmdb和Redis中。
这种做法是个好主意吗?
答案 0 :(得分:5)
查询是否动态?因为您可以在Redis中构建结构,就像您描述的那样进行查询。例如,使用有序集合作为时间,为库存数量设置另一个有序集合,查询并交叉它们。如果你很清楚你想要运行什么搜索,你可以让Redis为你做得非常快。如果查询一直在变化(与数据进行标记,分析等等),那么这不是一个非常好的解决方案。
所以存储东西
set key object1
zadd time_set object1.time object1
zadd inventory_set object1.inventory object1
查询时间和库存
zrangebyscore time_set min_time max_time
zrangebyscore inventory_set min_inventory max_inventory
Then you intersect them yourself, since results are just ids this is really fast. Once you intersected them just do an
mget item1, item 2...
一般情况下,当您确切知道将在其上运行哪些查询时,Redis的效果非常好。
答案 1 :(得分:3)
您需要的是文档数据库(NoSQL优惠之一)。
正如@Sergio建议的那样,MongoDB就是其中之一。还有其他人(CouchDB,RavenDB等),您必须检查哪个最适合您。它们在性能,复制能力,稳定性,成熟度,支持等方面存在差异。