我在要缓存“timeitems”的项目中使用Redis,即具有start-(“t_start”)和endtime(“t_end”)的对象。使用Redis的无界多维索引
我想使用也有一个开始 - (“w_start”)和结束时间(“w_end)。我希望有一个时间窗口发现,在重叠的时间窗口,以任何方式都timeitems查询缓存。
我已经成功地实现了这个使用排序设定的分数,(使用得分= t_start +(t_end - t_start),但只给我打,其中timeitem的中心是在时间窗口内
重叠。在代码中查询很简单:
bool overlap = t_start < w_end && w_start < t_end
现在,我在这里阅读了有关多维索引的文档:http://redis.io/topics/indexes#multi-dimensional-indexes
但是,在今天的大部分时间里,我开始认为它不适用于这种情况,因为问题是无限的(?)。也就是说,它应该检测时间窗口之前开始和结束之后的时间项目的重叠。
如果有人已经在类似的线性化问题上工作,我很乐意听到它。
感谢您的回复。是的,这些确实是范围,但是我感觉到有序的集合中的所有时间项或多或少都会被检索(在Redis之外进行过滤)。尤其是使用第二种方法(两个有序集合)。问题是如果使用redis.io中描述的技术在redis服务器内部执行“redimensioning”和intersection是可能的? –
是的 - 使用Lua脚本。对于redimension,您可以使用我的端口:https://www.reddit.com/r/redis/comments/3s0h73/luaredimension_redis_multidimensional_query/ –
好吧,我一定会尝试找时间尝试你的Lua。从数学的角度来看(在使用StackExchange.Redis开始实现它之后),我有我的疑惑,因为这些示例涉及到查找多维点是否位于特定范围内(同一维度),而此场景涉及查找范围insects与另一个范围。让我回到你身边。 –