我在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倍。
为什么?
答案 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,因为这可以帮助(暂时)降低存储空间。