如何使用VelocyPack(VPack)将图像存储在ArangoDB中?

时间:2018-12-19 22:53:50

标签: database storage binaryfiles arangodb

在有意义的用例中,将二进制数据存储在数据库中而不是文件系统中,那么使用ArangoDB 3.3版或更高版本应该怎么做?我期望使用Foxx,但如果有其他选择,我也愿意开放。

此主题为discussed three years prior,但此后Arango对其内部数据存储技术进行了重大更改。特别是,ArangoDB现在使用VelocyPack,如下所述:

GitHub - arangodb/velocypack: A fast and compact format for serialization and storage

据说VPack可以“覆盖所有JSON数据类型,以及日期,整数,二进制数据和任意精度数字。”

先前接受的答案是:“在ArangoDB中存储二进制数据是一项长期存在的功能请求。目前无法立即使用。”

如果我正确理解VPack,则似乎答案现在不正确。因此,假定需要一个新问题。

在阅读了ArangoDB手册here中有关Foxx中文件访问的知识,再加上有关VPack的阅读并且对这些事情没有任何经验之后,我不确定该采取哪种方法。

另一种方法是按如下所述将图像存储在文件系统上:

Handling Binary Data in Foxx 3.0 - J@ArangoDB

但是,如ArangoDB手册所述,

  

ArangoDB主要是一个数据库。因此,在大多数情况下,存储数据的最佳位置是在数据库内部,而不是文件系统上。

1 个答案:

答案 0 :(得分:1)

答案仍然是正确的IMO,因为主要传输格式是JSON,不直接支持二进制数据。您在GitHub上进行了长时间的讨论。

您还应该考虑到两个存储引擎都遵循仅追加原则。对文档的任何更改都会创建一个新的文档修订版,这意味着必须复制大多数数据。如果您在文档中存储大量数据,则与小文档相比,任何属性的更新都将花费更长的时间来保存。

因此,您不应在单个文档中存储兆字节的数据,而应在文件系统中引用文件。