Couchdb 数据库大小
我在CouchDB的同一个文档中存储了约2500个图像作为附件。这些图像在硬盘上约占15MB,由此产生的CouchDB约为17MB 当我通过PockDB将此文档推送到我的客户机时,我看到生成的数据库超过40MB。我按照以下步骤进行了一些测试:Couchdb 数据库大小,couchdb,pouchdb,Couchdb,Pouchdb,我在CouchDB的同一个文档中存储了约2500个图像作为附件。这些图像在硬盘上约占15MB,由此产生的CouchDB约为17MB 当我通过PockDB将此文档推送到我的客户机时,我看到生成的数据库超过40MB。我按照以下步骤进行了一些测试: 将X图像附件上载到CouchDB文档 紧凑CouchDB 完全清除客户端缓存 重新加载客户端(在我的应用程序中,我在重新加载时复制数据) 结果是: number of attached files | Total size (KB) in HD | Inc
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
因此,似乎:
那么,为了避免PockDB中二进制大小的增加,还需要做些什么呢?这是一个很好的问题,但答案取决于您使用的适配器,这在描述中并不清楚 编辑:刚刚意识到你说的是Chrome,但我保留了原始答案给后代:)
- 在Node.js中,我们使用LevelDB via,它将二进制数据直接存储在磁盘上
- 在Safari/iOS中,我们使用WebSQL,它存储二进制blob,因此同样没有开销
- 在其他方面,我们使用IndexedDB,它在API级别接受Blob对象,除了Chrome,因为Chrome还不支持它()
更新:Chrome团队解决了这一问题,从Chrome v43开始,PockDB支持Blob.:) 我主要使用Chrome(良好的工具)进行测试。但也尝试了iOS Safari。在那里,我看到了同样的问题,当加载整个数据库时,iOS中专门用于web应用程序的空间约为43MB,而不是20MB左右。所以至少这个问题要问IndexedDB和WebSQL。您是否压缩了客户端数据库?如果在初始复制之前进行压缩,服务器上的压缩只会影响客户端。在Chrome中可以尝试的另一件事是使用新的PockDB('dbname',{adapter:'websql'}),以便查看sqlite数据库的外观。Chrome同时支持IndexedDB和WebSQL。啊,我刚刚想到,在iOS中,大小几乎是原来的两倍(43MB对20MB),因为iOS/Safari将二进制数据强制转换为UTF-16。因此,对于PNG数据,每一个字节都有一个额外的\u0000字节。我不确定,但是可能会有不同的行为,所以你可能想试试。使用websql可以解决Chrome中的问题。