2

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

4

2 回答 2

4

回答我自己的问题,我发现这是可以接受的(包括 Marcello 的评论):

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

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

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);
}
于 2012-09-10T12:08:58.817 回答
3

像往常一样,答案在一定程度上取决于您打算如何处理这些数据。

  • 在 CouchDB 1.2.0 及更高版本中,快速压缩将确保每个文档的磁盘大小比您的字符串化计算小很多。
  • 在任何情况下,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
    }
  }
}

于 2012-09-10T17:28:45.860 回答