【发布时间】:2020-05-22 10:05:04
【问题描述】:
关于 ArangoDB 的 Key/Value 模型,有人知道每个 Value 的最大大小吗?我花了几个小时在互联网上搜索这些信息,但无济于事;你会认为这是机密信息。提前致谢。
【问题讨论】:
关于 ArangoDB 的 Key/Value 模型,有人知道每个 Value 的最大大小吗?我花了几个小时在互联网上搜索这些信息,但无济于事;你会认为这是机密信息。提前致谢。
【问题讨论】:
答案取决于不同的因素,例如存储引擎以及您是指理论限制还是实际限制。
在 MMFiles 的情况下,如果关闭了 wal.allow-oversize-entries,则最大文档大小由启动选项 wal.logfile-size 确定。如果开启,则没有立即限制。
对于 RocksDB,它可能会受到一些服务器启动选项的限制,例如 rocksdb.intermediate-commit-size、rocksdb.write-buffer-size、rocksdb.total-write-buffer-size 或 rocksdb.max-transaction-size。
使用 arangoimport 导入 1GB 的 JSON 文档时,您将遇到默认的 batch-size 限制。您可以增加它,但似乎最大为 805306368 字节 (0.75GB)。 HTTP API 似乎也有同样的限制(/_api/cursor 与 bindVars)。
您应该记住:由于存储层的仅追加性质,更改文档可能是一项缓慢的操作。换句话说,具有新修订号的文档的新副本被保留,并且旧修订将在一段时间后被压缩(我不熟悉所有技术细节,但我认为这是公平的说法)。对于一个 500MB 的文档,在相当强大的系统上使用 RocksDB 更新或复制它似乎需要几秒钟。拥有许多但很小的文档会更好。
【讨论】:
_key,通过它可以访问它。密钥是必需的、不可变的,但可以在文档创建时由用户定义。因此,ArangoDB 可以用作键值存储,其中整个文档表示可以通过键获取的值。在现有的大多数关系系统中,主键是可选的,可以在多个字段上定义。无论如何,“值”可以与支持的最大文档一样大,因为一切都是基于 JSON 文档的。
_key 属性(这显然是键/值模型中的key)并且文档本身就是value。这里的所有都是它的。 Arango 内部使用 VelocyPack 对数据进行序列化,这种格式可以存储 64 位值作为各种类型的大小指示符。但是,AFAIK 最大。 文档 大小为 2GB。也就是说,大型文档真的会影响性能!