arangodump:我怎么知道最新的“修订”?

时间:2018-07-31 00:55:09

标签: arangodb

我正在从arangodump中手动解析和导入数据,其中包含每个文档的每个修订版本的记录。问题是,我无法确定哪个项目是最新版本。

(在删除文档的情况下,如果在arangodump中会有带有修订但文档为空的记录,这也是有问题的。)

docs

  

客户可以使用修订版本ID进行简单的相等/不相等比较(例如,检查文档是否已更改),但客户不应使用修订版本ID进行比其更大/更少的比较来检查是否文档修订版本比另一个版本旧,即使在某些情况下也可行。

文档没有给我希望。这有可能吗?

如果没有,将arangodump手动导入到其他应用程序中的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

ArangoDump旨在为您尽快提供现有数据库的快照。因此,它不会为您提供集合级别的内容,而是磁盘上的内容。就像@CoDEmanX指出的那样,在牺牲数据库服务器ArangoExport的资源使用量的前提下,这会给您带来好处。

要回答使用旧版本文档的原因,我们将不得不更深入地研究数据库本身。

插入数据库将创建一个带有_key的新文档。一旦您尝试将其替换为UPDATE,实际发生的就是写了一个不可见的文档(又名Marker),即删除了旧版本。之后,将创建文档的新版本。

这一切都完成了,所以您有了write ahead log-又名WAL。这是以线性方式编写的,但是仅定义了部分内容已将其同步到磁盘。一旦事务要求文档为sealed-暂停执行,直到内核答复它可以确保此阶段已同步到存储。

关于磁盘的方式就这么多。实施该方法的目的是为您提供最大的吞吐量,同时确保您已写入某些内容(并且没有卡在磁盘缓存中的地方)。

以后的工作将尝试清理所有内容,并绑紧松散的一端。这称为“集合”。它将从WAL收集文档,并将其存储在永久数据库文件中。它还将尝试将删除标记与现有文档结合在一起,以使它们最终消失。

因此,一旦运行了集合,删除的文档及其删除标记将实际上消失。如果多个数据库文件的大小受到某个阈值的限制,则可以将它们合并为一个数据库文件。甚至可能发生某些删除标记只有在这样的组合之后才能找到其文档。