Pouch DB:数据库大小

时间:2014-05-18 16:36:59

标签: couchdb pouchdb

我在CouchDB中将〜2500张图像作为附件存储在同一个文档中。这些图像在硬盘驱动器中占据大约15MB,因此CouchDB大约为17MB。

当我通过PouchDB将此文档推送到我的客户端时,我看到结果数据库超过40 MB。我按照以下步骤进行了一些测试:

  1. 将X图像附件上传到CouchDB文档。

  2. Compact CouchDB

  3. 完全清除客户端缓存

  4. 重新加载客户端(在我的应用中,我在重新加载时复制数据)。

  5. 结果如下:

    number of attached files | Total size (KB) in HD | Inc | Size in Indexed DB | Inc
    17                         129                           207
    27                         168.2                   39.2  267                  60
    37                         219.6                   51.4  335                  68
    47                         275.5                   55.9  414                  79
    57                         327.7                   52.2  493                  79
    67                         384.9                   57.2  579                  86
    77                         428.5                   43.6  654                  75
    

    所以,似乎:

    1. PouchDB为每个附件增加了大约2K的控制数据。

    2. 添加更多附件时,此控制数据会增加。 (1.6K - > 2.3K - > 2.6K - > 2.8K ......)

    3. 图像在CouchDB和PouchDB中都有content_type:image / png。我明白这应该防止将它们存储为base64。我是对的吗?

      之前有人见过这个吗?有没有人能够解决它? 当想要在iOS 50MB空间限制内安装应用程序时,这是一个大问题。

      修改

      我继续检查pouchDB中的一些图像与原始文件的大小:

      1. 文件1:orig大小= 7.4K / PouchDB大小= 10.2K

      2. 文件2:orig大小= 5.1K / PouchDB大小= 6.8K

      3. 所以我认为在PouchDB中存储附件时大小的增加不是来自任何控制数据(至少它不相关),而是来自二进制文件存储在浏览器IndexedDB中的方式(我使用Chrome进行这些计算) )。

        那么,为了避免PouchDB中二进制大小的增加,还需要做些什么吗?

1 个答案:

答案 0 :(得分:6)

一个非常好的问题,但答案取决于您使用的适配器,这在描述中并不清楚。

编辑:刚刚意识到你确实说过Chrome,但我保留了后代的原始答案:)

  • 在Node.js中,我们通过LevelUP使用LevelDB,它将二进制数据直接存储在磁盘上。
  • 在Safari / iOS中,我们使用存储二进制blob的WebSQL,因此无需开销。
  • 在其他所有内容中,我们使用IndexedDB,它在除Chrome之外的所有内容中都采用API级别的Blob对象,因为Chrome尚不支持(issue)。

我猜猜你正在使用Chrome进行测试。因此,您看到性能不佳的原因是因为我们必须将所有内容存储在base64中作为解决方法(source)。

从好的方面来说,Chromium bug非常活跃(最后评论是48小时前),所以可能是Chrome团队正在使用它并将很快发布修复程序。当他们这样做时,PouchDB将自动检测到blob支持是否可用并开始使用它。

更新:Chrome团队解决了此问题,自Chrome v43起,PouchDB支持Blob。 :)