Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Cassandra中存储二进制blob_Cassandra_Blobstore_Astyanax - Fatal编程技术网

在Cassandra中存储二进制blob

在Cassandra中存储二进制blob,cassandra,blobstore,astyanax,Cassandra,Blobstore,Astyanax,我正在构建一个简单的HTTP服务,它存储任意二进制对象。这项服务由卡桑德拉支持。它是亚马逊S3的简化版。系统必须能够承受沉重的写入负载,并且在写入和读取路径上应具有高可用性 存储的数据是不可变的。它可以删除,但不能更新。因此,数据不一致不是问题。数据存储必须能够有效地使旧数据过期 该服务使用Netflix的库,该库提供了一个用于在Cassandra中存储(大型)二进制对象的库 我认为解决这个问题有两种方法,各有利弊。对我来说,很难估计哪种方式更适合卡桑德拉 带TTL的单表 Astyanax自动将

我正在构建一个简单的HTTP服务,它存储任意二进制对象。这项服务由卡桑德拉支持。它是亚马逊S3的简化版。系统必须能够承受沉重的写入负载,并且在写入和读取路径上应具有高可用性

存储的数据是不可变的。它可以删除,但不能更新。因此,数据不一致不是问题。数据存储必须能够有效地使旧数据过期

该服务使用Netflix的库,该库提供了一个用于在Cassandra中存储(大型)二进制对象的库

我认为解决这个问题有两种方法,各有利弊。对我来说,很难估计哪种方式更适合卡桑德拉

带TTL的单表 Astyanax自动将大型对象分块成小块,并将其存储到单个表中。为每个blob分配一个TTL,使其在一段时间后过期。当TTL过期时,压缩运行将删除blob

这个解决方案很有效,而且很容易实现。我开始使用
SizeTieredCompactionStrategy
,但我认为在处理TTL数据时,
DateTieredCompactionStrategy
可能是更好的选择

我主要关心的是:卡桑德拉的压实度能跟上吗?有人有过类似用例的经验吗

按时间分片数据 另一种方法是按时间分割数据。我可以为每天创建一个表,并将数据块存储在该表中。在这种情况下,我可以删除完整的表来删除过期的数据

此解决方案在实现过程中需要付出更多的努力,但简化并可能加快过期数据的删除


卡桑德拉扔桌子的表现如何

适合您的场景的正确选项是DateTieredCompactionStrategy,并将TTL分配给每个blob

参考:

您在研究过程中发现了什么?这是一个S3兼容的对象存储,使用Clojure编写的Cassandra。它看起来非常有趣。我不确定它在自动过期数据中有多好。