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

问题描述 投票:-1回答:2

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

cassandra leveldb
2个回答
1
投票

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

就此而言,leveldb在大值时表现不佳(即100k被认为是大而且它将以几百次操作/秒开始爬行)。通常建议保持10mb或1mb以下的值。

很可能两者都不能用2gb附近的任何东西(至少以任何可用的速率)工作。这不是数据库存储的有点东西。


3
投票

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

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

如果您需要存储如此大的值/文件,那么它们将不会是完美的,并且会看起来像Ceph。至少将数据拆分成块。

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

© www.soinside.com 2019 - 2024. All rights reserved.