couchdb文档的大小

couchdb文档的大小,couchdb,Couchdb,我在couchdb数据库中有以下文档: { "_id": "000013a7-4df6-403b-952c-ed767b61554a", "_rev": "1-54dc1794443105e9d16ba71531dd2850", "tags": [ "auto_import" ], "ZZZZZZZZZZZ": "910111", "UUUUUUUUUUUUU": "OOOOOOOOO", "RECEIVING_OPERATOR": "07

我在couchdb数据库中有以下文档:

{
   "_id": "000013a7-4df6-403b-952c-ed767b61554a",
   "_rev": "1-54dc1794443105e9d16ba71531dd2850",
   "tags": [
       "auto_import"
   ],
   "ZZZZZZZZZZZ": "910111",
   "UUUUUUUUUUUUU": "OOOOOOOOO",
   "RECEIVING_OPERATOR": "073",
   "type": "XXXXXXXXXXXXXXXXXXX",
   "src_file": "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
}
如果保存在本地文件系统中,这个JSON文件正好需要319字节。我的文档都是这样的(给定或获取两个字节,因为有些字段的长度不同)

在我的数据库中,我目前有大约600万个文档,它们使用15GB。这使得每个文档大约有2.5k字节。这意味着CouchDB上的文档占用的空间是磁盘上的8倍


为什么会这样?

CouchDB使用了一种称为MVCC的东西,这基本上意味着它会在您修改文档时保留文档的早期版本。它使用这些以前的版本来帮助在发生冲突时进行复制,默认情况下保留1000个修订版本(有关更多信息,请参阅)

如果您不使用复制,或者您知道这些冲突永远不会发生,那么您可以减少要保留的修订数量


您可能还想熟悉一下,因为这有助于(暂时)降低存储占用空间。

问题与文档id的使用方式有关:它不仅存储在文档中,而且存储在其他数据结构中。这意味着使用标准UUID(
000013a7-4df6-403b-952c-ed767b61554a
36个字符)将占用大量磁盘空间。如果冲突是一个小问题,那么使用base64,您可以用4个字符处理1600万个文档, 以及超过10亿个5个字符的文档。字典的一个好选择是有序的(在“查看排序规则”的意义上):


使用此方法,我将数据库的大小从2.5KB/doc减少到了0.4KB/doc。我的新数据库只使用了旧数据库的16%的空间,这是一个很大的改进。

无修订:这是一个新创建的数据库,只插入了新文档。没有更新任何文件。事实上,在与couchdb人员检查了这个问题之后,我发现了问题:couchdb内部用于许多结构的文档id对数据库大小有很大影响。如果您想减小文档的大小,一件简单的事情是使用base64(或base62,或其他)编码的文档id。
-@0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ