【发布时间】:2016-03-25 07:37:31
【问题描述】:
我们想使用 Aerospike 作为缓存来删除事件 ID 的重复数据,并带有预定义的 TTL。
我们的用例非常简单:对于我们收到的每个事件,我们都想检查这个事件 id 是否存在于缓存中。如果是这样,我们希望重置 TTL(触摸记录)并在我们的应用程序中将此事件标记为欺诈,否则我们希望执行 put 操作来插入此 id。
我们打算做的事情如下:
(i) 配置单个记录命名空间,因为我们希望存储的唯一内容是 id。我们将使用事件 id 作为键,并将 NullValue 存储为相应的值。 (因为我们真的不需要除了键值之外的任何东西)。
(ii) 对于去重检查,我们将首先检查 client.exists(),然后在写入策略中使用 RecordExistsAction.REPLACE 执行 put 操作(因为这是针对性能优化的)。这两个操作都将在操作()块中调用以实现原子性。
但我们对以下问题有一些疑问:
(i) 关于操作块,我们希望做的这个检查和设置事务似乎是一个非常常见的用例。是否有一个 API 可以以更清洁的方式实现这一目标? (我们找不到任何东西)
(ii) 是否绝对有必要拥有一个垃圾箱?我们只希望存储键而不存储相应的值。我意识到键值从未存储过,Aerospike 只存储摘要,但由于 exists() 是我们唯一关心的事情,有没有办法摆脱额外的 bin 存储开销?
谢谢!
【问题讨论】:
标签: aerospike