【发布时间】:2016-04-29 13:01:34
【问题描述】:
我有一组存储类 json 数据的键。在一段时间内,我的应用程序经常更新这些密钥,但之后它们就会过期并且不会(或很少会)再次更新。
但是,需要在整个历史记录中对这些“键”(包括过期键和当前键)运行类似聚合的查询(例如 SELECT SUM(value) FROM keys WHERE property1='...')。
目前我使用redis + sqlite的组合。 Redis 将当前的一组键存储在内存中。然后工作scans redis,将数据导出到sqlite。
当我需要运行聚合查询时,我首先在 sqlite 上运行它,然后scan redis 以获取其他值。
虽然这个组合似乎有效,但也有一些烦恼:
需要维护两个独立的服务。如果由于某种原因 redis 停止工作或作业失败或 sqlite 表损坏,我最终会处于未定义状态。
非统一的 API。我需要将查询分成几部分,一份用于sqlite,一份用于redis,分别运行,分别处理结果并将它们组合起来。
对 redis 运行查询可能会很耗时,因为没有键的索引。调用
keys会阻塞服务器,调用scan通常会导致迭代次数过多。
是否有一个数据库可以满足我的需求?也许redis有一些配置选项?
【问题讨论】: