我如何编写一个列出每个存储文档大小的CouchDB视图?

时间:2012-09-10 12:07:55

标签: javascript couchdb

我想知道CouchDB数据库中存储的文档的大小。我如何编写一个列出文件大小的视图?

2 个答案:

答案 0 :(得分:4)

回答我自己的问题,我发现这是可以接受的(纳入马塞洛的评论):

function(doc) {
  var json = JSON.stringify(doc);
  emit(json.length, null);
}

编辑:合并@ dch的comments,这是对线上大小的更完整估计,但正如他所指出的,这不是磁盘上文档的大小。

function(doc) {
  var json = JSON.stringify(doc);
  var len = json.length;
  if (doc._attachments) {
    for (var attachmentKey in doc._attachments) {
      var attachment = doc._attachments[attachmentKey];
      len += attachment.length;
    }
  }
  emit(len, null);
}

答案 1 :(得分:3)

通常情况下,答案取决于您打算如何处理这些数据。

  • 在CouchDB 1.2.0及更高版本中,snappy压缩将确保每个文档的磁盘大小比字符串化计算小得多。
  • 无论如何,CouchDB将JSON存储为编码的erlang术语,也不是1对1的大小等价。
  • 附件不会记录在您的方法中,但可以在存根元数据中使用:

{
  "_id":"555b17372035fdeb9b4077c68e00053f",
  "_rev":"3-a6fa3aadf3bf64f11b721d7d4333e9ec",
  "_attachments":{
    "preview.png":{
      "content_type":"image/png",
      "revpos":3,
      "digest":"md5-fNhm5TL2NFnsujYKixr+3A==",
      "length":328076,
      "stub":true
    }
  }
}