如何使值过期而不是键?

时间:2017-03-06 11:00:16

标签: java database couchbase

现在我有一些映射,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:0020170306-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:00id1_20170306-00:00:00等密钥,以访问存储在Couchbase中的真实密钥。

实际上,id1_20170306-00:01:00的存活时间超过两天。

2 个答案:

答案 0 :(得分:1)

听起来你想要两件不同的东西:

  1. 仅返回最近项目的查询
  2. 定期运行并删除过期项目的清理作业
  3. 这两项任务都很简单,任何关系和许多NoSQL数据库都可以完成。

答案 1 :(得分:0)

<强>概要

使用应用程序层解决问题而不是数据库层。根据您对问题的输入,我相信有两组实体-S1(A,B)和S2(Ai,Bi)。 要进行清理,您可以实现一个作业,以根据超时(缓存在实体存储结构本身中)定期清理S2。并相应地清理S1。 但实时的有效变化取决于整个系统的性能。

<强>详细

数据库不会为您的特定问题提供随时可用的解决方案,因为它们旨在存储数据和查询,而不是通用的业务解决方案。

我相信,您寻求的结果可以通过以下方式获得:

数据库/商店级别

您需要扩展现有的开源数据库(因为您需要源代码)并相应地调整您的功能。但根据您的具体解决方案,它总是在整体查询性能之间进行权衡 - 取决于您希望它实时反映的程度。

申请级别

这是最好的解决方案。您可以通过多种最佳方式解决问题。最终目标是消除不再有效的记录。我将建议一个守护进程来查询和清理这些记录。您可以使用数据库在多个客户端之间提供有效的查询和清理同步(只要您不读脏)。 清理守护程序的优化取决于许多未在问题中描述的因素。