为什么在 cassandra 中对列值(2 GB)有限制但在 leveldb 中没有这样的限制
why there is limit on column value (2 GB) in cassandra but no such limit in leveldb
Cassandra (2GB) 中的列值似乎有限制,但是 leveldb(与 SSTable 和 memtable 类似的设计)没有这样的限制?
你说得对,在 Cassandra 中,单个列的大小限制为 2GB。在现实世界的应用程序中,您还应该远离该值(个位数 MB)并保持完整的行(分区)也很小——否则会影响性能和性能。
Cassandra 是一个完整的数据库系统 - 而 LevelDB 只是一个键值存储库,例如,如果你需要复制 - 第三方软件是必要的,它建立在 LevelDB 之上(然后可能会增加限制) .
如果你需要存储如此大的 values/files 两者都不是完美的并且期待像 Ceph 这样的东西。至少将您的数据分成块。
附带提示:LevelDB 因磁盘上的数据库损坏而闻名。
实际上,C* 中的列值限制远低于 2gb,只是由于 JVM 无法有效地在堆上分配这么大的对象。事实上 post 2.1 如果突变是提交日志段大小的一半(默认为 ~32mb),你会失败,尽管你可以增加它以使其工作,但一切都会表现得很糟糕。也就是说,如果您将较小的值分成几行,您最终可能会将分区分成 GB 甚至 100 GB,但您需要愿意承担重大的性能损失并对其进行调整。更不用说热点难度了。
就此而言,leveldb 对大值也表现不佳(即 100k 被认为很大,它会开始爬取几百 ops/sec)。通常建议将值保持在 10mb 或 1mb 以下。
很可能两者都无法在接近 2gb 的情况下工作(至少在任何可用速率下)。那不是数据库存储的那种东西。
Cassandra (2GB) 中的列值似乎有限制,但是 leveldb(与 SSTable 和 memtable 类似的设计)没有这样的限制?
你说得对,在 Cassandra 中,单个列的大小限制为 2GB。在现实世界的应用程序中,您还应该远离该值(个位数 MB)并保持完整的行(分区)也很小——否则会影响性能和性能。
Cassandra 是一个完整的数据库系统 - 而 LevelDB 只是一个键值存储库,例如,如果你需要复制 - 第三方软件是必要的,它建立在 LevelDB 之上(然后可能会增加限制) .
如果你需要存储如此大的 values/files 两者都不是完美的并且期待像 Ceph 这样的东西。至少将您的数据分成块。
附带提示:LevelDB 因磁盘上的数据库损坏而闻名。
实际上,C* 中的列值限制远低于 2gb,只是由于 JVM 无法有效地在堆上分配这么大的对象。事实上 post 2.1 如果突变是提交日志段大小的一半(默认为 ~32mb),你会失败,尽管你可以增加它以使其工作,但一切都会表现得很糟糕。也就是说,如果您将较小的值分成几行,您最终可能会将分区分成 GB 甚至 100 GB,但您需要愿意承担重大的性能损失并对其进行调整。更不用说热点难度了。
就此而言,leveldb 对大值也表现不佳(即 100k 被认为很大,它会开始爬取几百 ops/sec)。通常建议将值保持在 10mb 或 1mb 以下。
很可能两者都无法在接近 2gb 的情况下工作(至少在任何可用速率下)。那不是数据库存储的那种东西。