PouchDB压缩对磁盘上的db大小没有影响

问题描述 投票:1回答:2

我使用couchdb / pouchdb将数据从服务器复制到移动设备(数据仅复制到移动设备的下游)。

由于我的数据集很大(大约100,000个文档),我尝试使用pouchdb中的紧凑功能来确保磁盘上数据库的大小仍然很小,并且不会增长到无法管理的大小。

然而,我的测试显示手动压缩数据库对使用的磁盘空间没有影响。在我的测试中,我使用Chrome将100,000个文件从我的couchdb复制到pouchdb。

查看“C:\ Users [USERNAME] \ AppData \ Local \ Google \ Chrome \ User Data \ Default \ databases [SERVER_URL]”目录,我相信Chrome也会保存数据库,复制数据库后生成的文件约71MB。

然后我通过简单地增加每个文件的值来更新couchdb中的20,000个文档。我随后将这些更改复制到Chrome中的pouchdb。这导致数据库增长到81MB。在此之后手动压缩数据库不会影响磁盘上pouchdb的大小。我已经执行了几次这样的操作,并且从未见过Chrome创建的pouchdb文件的大小减小。

测试总结:

  1. 使用100,000个文档填充couchdb
  2. 使用Chome将couchdb复制到pouchdb。结果在71MB数据库中。
  3. 在couchdb中更新20,000个文档。复制到pouchdb。结果在81MB数据库中。
  4. 手动压缩pouchdb。文件大小没有变化。
  5. 在couchdb中更新20,000个文档。复制到pouchdb。结果在83MB数据库中。
  6. 手动压缩pouchdb。文件大小没有变化。
  7. 在couchdb中更新20,000个文档。复制到pouchdb。结果在84MB数据库中。
  8. 手动压缩pouchdb。文件大小没有变化。

我已经创建了一个小示例应用程序来说明我的示例。你可以找到files here(请阅读readme.txt!)你可以用它来重现我的测试。

我误解了pouchdb中的压缩程序吗?我假设通过删除旧版本的文档(并且只保留叶子节点),我的pouchdb的磁盘大小在上面的示例中将保持相对大小。

或者我犯了一个愚蠢的编码错误? (对我来说并不罕见!)

在此先感谢您的帮助,

安德鲁。

更新 - 执行上述测试后,我决定使用小包来检索我的一份文件。我发现_revisions是一个包含4个元素的数组。我的数据库大小不断增长的原因是因为pouchdb会跟踪文档的所有修订ID吗?如果我压缩我的数据库应该是这种情况吗?

pouchdb compact-database
2个回答
1
投票

您似乎正在使用WebSQL适配器。 SQLite有一个奇怪的特性,即除非你做一个显式的VACUUM命令,否则它不一定要清理它的空间使用。在我的脑海中,我不知道VACUUM是否在WebSQL中可用,但您可能希望在压缩后尝试它以便真正清理数据库的大小。

如果该修复工作正常,我们可能也有兴趣在压缩时将VACUUM命令添加到PouchDB本身,这样您就不必手动执行此操作。 :)


1
投票

@nolan,谢谢你的指针。我在pouchdb.cordova-sqlite.js的setup()函数中添加了以下代码行,这是sqllite的pouchDB适配器。

tx.executeSql("PRAGMA auto_vacuum = FULL");

有用!它确实释放了磁盘空间(我在iOS应用程序上查看了它)。谢谢。

© www.soinside.com 2019 - 2024. All rights reserved.