现在我有一些映射,A->(A1,A2,A3,A4),B->(B1,B2,B3)
我想将A1,A2,A3 ......的过期时间设置为两天,所以我只能在两天内获得增值。如果A的所有值都已过期,则密钥A已过期,应删除。
什么解决方案或数据库可以实现此功能? 非常感谢。
################################################## ## -好吧,我应该更详细地描述这个问题。
许多键值对已存储在Couchbase中。键值对是这样的:{id1_20170306-00:01:00 => value1} {id1_20170306-10:01:00 => value2} {id2_20170306-00:01:00 => value3}
。所有键值对的到期时间为两天。
当用户发送id1
请求时,应返回其密钥以id1
开头且未过期的所有键值对。
我的解决方案并不是特别好。
将密钥转换为当天的开头。对于20170306-00:01:00
和20170306-10:01:00
,它是20170306-00:00:00
。创建这样的映射
id1_20170306-00:00:00 => (id1_20170306-00:01:00,id1_20170306-10:01:00)
。
将id1_20170306-00:00:00
的到期时间设置为上次修改后的两天。
当用户发送id1请求时,会生成id1_20170305-00:00:00
和id1_20170306-00:00:00
等密钥,以访问存储在Couchbase中的真实密钥。
实际上,id1_20170306-00:01:00
的存活时间超过两天。
答案 0 :(得分:1)
听起来你想要两件不同的东西:
这两项任务都很简单,任何关系和许多NoSQL数据库都可以完成。
答案 1 :(得分:0)
<强>概要强>
使用应用程序层解决问题而不是数据库层。根据您对问题的输入,我相信有两组实体-S1(A,B)和S2(Ai,Bi)。 要进行清理,您可以实现一个作业,以根据超时(缓存在实体存储结构本身中)定期清理S2。并相应地清理S1。 但实时的有效变化取决于整个系统的性能。
<强>详细强>
数据库不会为您的特定问题提供随时可用的解决方案,因为它们旨在存储数据和查询,而不是通用的业务解决方案。
我相信,您寻求的结果可以通过以下方式获得:
数据库/商店级别
您需要扩展现有的开源数据库(因为您需要源代码)并相应地调整您的功能。但根据您的具体解决方案,它总是在整体查询性能之间进行权衡 - 取决于您希望它实时反映的程度。
申请级别
这是最好的解决方案。您可以通过多种最佳方式解决问题。最终目标是消除不再有效的记录。我将建议一个守护进程来查询和清理这些记录。您可以使用数据库在多个客户端之间提供有效的查询和清理同步(只要您不读脏)。 清理守护程序的优化取决于许多未在问题中描述的因素。