我想知道存储在我的 CouchDB 数据库中的文档的大小。我将如何编写一个列出文档大小的视图?
问问题
332 次
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 回答