在Redis和/或关系数据库中存储数据

时间:2012-02-21 14:47:45

标签: relational-database redis

我在Redis中存储了大约50,000个json对象。 这适用于通过其唯一键查找对象的主要用例。

我现在必须添加一个功能,以根据基于对象数据的复杂查询来搜索对象。例如,2011-03-01和2012-01-12期间发布的所有具有“lex”作者的项目,库存超过5件。

使用SQL这很简单。 我不太了解Redis,但没有看到任何类似的东西。

所以我想有一个小的关系数据库,我将存储Redis密钥和我需要搜索的数据。当需要一个复杂的查询时,我点击SQL并获得一组密钥以退出Redis。

我不经常更改数据,我会知道何时以及发生了什么变化。所以我可以在更新时将数据导入到rmdb和Redis中。

这种做法是个好主意吗?

2 个答案:

答案 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就是其中之一。还有其他人(CouchDBRavenDB等),您必须检查哪个最适合您。它们在性能,复制能力,稳定性,成熟度,支持等方面存在差异。