是否可以使用Cassandra作为LRU缓存

时间:2014-03-07 22:20:05

标签: database caching cassandra distributed-caching lru

我想在Cassandra中存储键值对,并且在达到固定存储大小时以LRU方式自动删除条目。

是否可以使用Cassandra执行此操作,如果是这样,那么最好的方法是什么。 如果没有,那么任何其他分布式存储系统都不支持这种用例,而不必将所有数据保存在内存中。

2 个答案:

答案 0 :(得分:2)

简短的回答是,不,Cassandra不支持开箱即用的LRU。

如果你真的想,你可以在你的Cassandra应用程序中构建一个LRU层来实现同样的效果。这可以通过多种方式完成,但通常您希望维护缓存对象的单独索引以及统计信息/时间戳,并让您的应用程序根据需要清除对象。即使这样,由于Cassandra如何存储数据以及管理更新,删除等等,磁盘空间也不会是一个很好的上限.Cassandra不会立即在Delete上释放存储空间,而是设置一个逻辑删除和旧数据将在以后删除(About Deletes)。

构建自定义缓存层(即在Cassandra中)的一个优点是,您可以超越简单的LRU驱逐,并确保更频繁(但不是最近)使用的更昂贵的对象和/或对象的权重更重,以便即使它们可能被LRU清除,它们仍然会在缓存中保留更长时间。这是否有用将完全取决于您的具体用例。但同样,Cassandra可能会因大量数据流失而变得臃肿,并且需要确保群集得到适当调整并进行日常维护。

实际上,大多数人会部署Memcache(或类似的)来支持这个用例。

答案 1 :(得分:0)

Cassandra可以用作LRU,你只需要使用TTL或自己管理删除。

始终追加新数据。删除的数据仅标记为已删除,并在压缩过程中被物理删除。您可能需要调整压缩。

Cassandra的优势在于,数据在发布时就会持久存在,除了极端用例之外,您不必将所有数据都放入内存中,您可以使用复制不丢失数据,并且可以访问它来自多种语言。请注意,新数据可能无法立即获得。

更轻量级的方法是Redis。

相关问题