【问题标题】:ArangoDB Key/Value Model: value maximum sizeArangoDB 键/值模型:值最大大小
【发布时间】:2020-05-22 10:05:04
【问题描述】:

关于 ArangoDB 的 Key/Value 模型,有人知道每个 Value 的最大大小吗?我花了几个小时在互联网上搜索这些信息,但无济于事;你会认为这是机密信息。提前致谢。

【问题讨论】:

    标签: arangodb jnosql


    【解决方案1】:

    答案取决于不同的因素,例如存储引擎以及您是指理论限制还是实际限制。

    在 MMFiles 的情况下,如果关闭了 wal.allow-oversize-entries,则最大文档大小由启动选项 wal.logfile-size 确定。如果开启,则没有立即限制。

    对于 RocksDB,它可能会受到一些服务器启动选项的限制,例如 rocksdb.intermediate-commit-sizerocksdb.write-buffer-sizerocksdb.total-write-buffer-sizerocksdb.max-transaction-size

    使用 arangoimport 导入 1GB 的 JSON 文档时,您将遇到默认的 batch-size 限制。您可以增加它,但似乎最大为 805306368 字节 (0.75GB)。 HTTP API 似乎也有同样的限制(/_api/cursor 与 bindVars)。

    您应该记住:由于存储层的仅追加性质,更改文档可能是一项缓慢的操作。换句话说,具有新修订号的文档的新副本被保留,并且旧修订将在一段时间后被压缩(我不熟悉所有技术细节,但我认为这是公平的说法)。对于一个 500MB 的文档,在相当强大的系统上使用 RocksDB 更新或复制它似乎需要几秒钟。拥有许多但很小的文档会更好。

    【讨论】:

    • 谢谢。我知道 ArangoDb 使用 RocksDB,并且从 3.6.0 版本开始不推荐使用 MMFiles 存储引擎。我还知道 ArangoDB 文档模型中每个值的最大大小为 75 kB。我只想知道 ArangoDB 键/值模型中每个值的最大大小。
    • 没有明确的键/值模型,它被文档模型所包含。每个文档都有一个唯一的_key,通过它可以访问它。密钥是必需的、不可变的,但可以在文档创建时由用户定义。因此,ArangoDB 可以用作键值存储,其中整个文档表示可以通过键获取的值。在现有的大多数关系系统中,主键是可选的,可以在多个字段上定义。无论如何,“值”可以与支持的最大文档一样大,因为一切都是基于 JSON 文档的。
    • 由于传输层的最大批处理大小,文档大小的实际限制似乎为 768MB。但是,使用 arangosh,我成功保存了具有单个字符串属性的 1023MB 文档,因此存储层支持的不仅仅是批量大小。 1GB 是 V8 的字符串大小限制,所以我无法测试更多。不确定文档 API 是否也有 768MB 左右的上限,但使用 Curl 似乎是这样(立即空服务器回复)。
    • 我知道您正在努力提供帮助,但我已经阅读了很多关于 Arangodb、RocksDB 和 MMFiles 的信息;尽管与我的问题无关,但您在这里的很多回答并不是未知的。我可以纠正您的回答中的一些不准确之处,但要避免偏离主题和分散我的简单问题,即 ArangoDB 键/值模型中每个值的最大大小是多少。是的,ArangoDB 中确实有一个独特的键/值模型;你描述的是它的底层实现。
    • 不,没有不同的键/值模型。正如@CodeManX 正确解释的那样,它被文档模型所包含。每个文档都有一个隐含的_key 属性(这显然是键/值模型中的key)并且文档本身就是value。这里的所有都是它的。 Arango 内部使用 VelocyPack 对数据进行序列化,这种格式可以存储 64 位值作为各种类型的大小指示符。但是,AFAIK 最大。 文档 大小为 2GB。也就是说,大型文档真的会影响性能!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-08
    • 2023-04-02
    相关资源
    最近更新 更多