couchdb - 袋 DB : database size

标签 couchdb pouchdb

我在 CouchDB 的同一个文档中存储了大约 2500 张图像作为附件。这些图像在硬盘驱动器中大约占用 15MB,结果 CouchDB 大约为 17MB。

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

  • 将 X 图像附件上传到 CouchDB 文档。
  • 紧凑型 CouchDB
  • 完全清除客户端缓存
  • 重新加载客户端(在我的应用程序中,我在重新加载时复制数据)。

  • 这是结果:
    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
    

    所以,似乎:
  • PouchDB 向每个附件添加了大约 2K 的控制数据。
  • 添加更多附件时,此控制数据会增加。 (1.6K -> 2.3K -> 2.6K -> 2.8K...)

  • 图像在 CouchDB 和 PouchDB 中都有 content_type:image/png 。我知道这应该可以防止将它们存储为 base64。我对么?

    有没有人更早看到这个?有没有人能够解决它?
    当目标是在 iOS 50MB 空间限制内适合应用程序时,这是一个大问题。

    编辑

    我继续检查 pouchDB 与原始文件中一些图像的大小:
  • 文件 1:原始文件大小 = 7.4K/PouchDB 大小 = 10.2K
  • 文件 2:原始文件大小 = 5.1K/PouchDB 大小 = 6.8K

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

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

    最佳答案

    一个很好的问题,但答案取决于您使用的适配器,从描述中不清楚。

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

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

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

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

    更新: Chrome 团队修复了这个问题,从 Chrome v43 开始,PouchDB 支持 Blob。 :)

    关于couchdb - 袋 DB : database size,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23724331/

    相关文章:

    node.js - 为 PouchDB 启用 CORS 以与 CouchDB 配合使用

    couchdb - pouchdb 从 couchdb : very slow 复制

    javascript - 关于 PouchDB 的复杂开始键/结束键查询未返回预期结果

    postgresql - 将 PouchDB 离线同步到 PostgreSQL

    javascript - pouchDB 并按日期或日期范围查询

    couchdb - 启用 JSONP 时有什么方法可以限制对 CouchDB View 的访问?

    ubuntu - CouchDB 无法启动,没有具体错误

    couchdb - CouchDB 服务器的默认密码(Fauxton UI)

    javascript - ng-repeat 仅在窗口单击后填充 - AngularJS 和 PouchDB

    macos - 无法访问 CouchDB Web GUI (OSX)