我想在Cassandra中存储键值对,并在达到固定存储大小时以LRU方式自动删除条目.
是否可以使用Cassandra来做到这一点,如果是这样的话,最好的办法是什么.
如果没有,那么可以支持这种用例的任何其他分布式存储系统,而不必将所有数据保存在内存中.
最佳答案 简短的回答是,不,Cassandra不支持开箱即用的LRU.
如果你真的想,你可以在你的Cassandra应用程序中构建一个LRU层来实现同样的效果.这可以通过多种方式完成,但通常您需要维护缓存对象的单独索引以及统计信息/时间戳,并根据需要使用应用程序清除对象.即使这样,由于Cassandra如何存储其数据并管理更新,删除等等,磁盘空间也不会是一个很好的上限.Cassandra不会立即在删除时释放存储,而是设置一个墓碑和旧的数据将在稍后删除(About Deletes).
构建自定义缓存层(即在Cassandra中)的一个优点是,您可以超越简单的LRU驱逐,并确保更频繁(但不是最近)使用的更昂贵的对象和/或对象的权重更重,以便它们保持在缓存更长,即使它们可能被LRU清除.这是否有用将完全取决于您的具体用例.但同样,Cassandra可能会因大量数据流失而变得臃肿,并且需要确保群集得到适当调整并进行日常维护.
实际上,大多数人会部署Memcache(或类似的)来支持这个用例.