couchdb文件的大小

时间:2012-03-15 08:35:17

标签: couchdb

我在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个字节。我的文档都是这样的(给出或取几个字节,因为有些字段有不同的长度)。

在我的数据库中,我目前有大约6百万个文档,它们使用15 GB。这提供了大约2.5KBytes /文档。这意味着文件在CouchDB上占用的空间是在磁盘上的8倍。

为什么?

2 个答案:

答案 0 :(得分:4)

问题与文档ID的使用方式有关:它不仅存储在文档中,还存储在其他数据结构中。这意味着使用标准UUID(000013a7-4df6-403b-952c-ed767b61554a 36个字符)会占用大量磁盘空间。如果collission是一个小问题,使用base64你可以只用4个字符编号1600万个文档, 超过10万个5个字符的文件。字典的一个很好的选择是有序的(在“查看整理”意义上):

-@0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ

使用此方法,我将数据库的大小从2.5Kbytes / doc减少到0.4Kbytes / doc。我的新数据库仅使用旧数据库的16%的空间,我认为这是一个非常大的改进。

答案 1 :(得分:0)

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

如果您不使用复制,可以降低要保留的修订数量,或者知道这些冲突永远不会发生的情况。

您也可能希望熟悉compaction,因为这可以帮助(暂时)降低存储空间。