为什么cassandra中的列值(2 GB)有限,但leveldb没有这样的限制

时间:2017-12-29 04:14:44

标签: cassandra leveldb

Cassandra(2GB)中的列值似乎有限制,但是leveldb(与SSTable和memtable类似的设计)没有这样的限制?

2 个答案:

答案 0 :(得分:3)

你是对的,Cassandra中单个列的大小限制为2GB。在现实世界的应用程序中,您还应远离该值(单个数字MB)并保持完整的行(分区)也很小 - 否则,压缩和性能将受到影响。

Cassandra是一个完整的数据库系统 - 而LevelDB只是一个键值存储库,例如,如果你需要复制 - 第三方软件是必需的,它构建在LevelDB之上(然后可能会增加限制)。

如果您需要存储如此大的值/文件,那么既不会是完美的,也不会看到像Ceph这样的东西。至少将数据拆分成块。

侧提示:LevelDB是磁盘上数据库损坏的传奇。

答案 1 :(得分:1)

实际上,C *中的列值限制远低于2gb,只是来自JVM无法有效地分配堆上大的对象。事实上,如果变量是你的提交日志段的一半(默认为~32mb),你会失败,尽管你可以增加它以使其工作,一切都会表现得很糟糕。也就是说,如果您将较小的值拆分为行,则最终可能会将分区分配到GB或甚至100的gb中,但您需要愿意接受显着的性能影响并进行调整。更不用说热点困难了。

对于这个问题,leveldb对于大值也很差(即100k被认为是大的并且它将以几百个操作/秒开始爬行)。通常建议保持10mb或1mb以下的值。

最有可能两者都无法工作(至少以任何可用的速率),接近2gb。这不是数据库存储的一种东西。