内置读取couchdb文档大小的方法?
我正在尝试将couchdb用作消息存储,并希望报告消息大小 理想情况下,最好读取一个_size属性。最糟糕的情况是,我可以检查整个文档JSON的字符串长度。我甚至可能想将大小用作视图键 您认为记录文档大小的最佳方法是什么?为什么您认为该方法最好?您可以查看内置读取couchdb文档大小的方法?,couchdb,Couchdb,我正在尝试将couchdb用作消息存储,并希望报告消息大小 理想情况下,最好读取一个_size属性。最糟糕的情况是,我可以检查整个文档JSON的字符串长度。我甚至可能想将大小用作视图键 您认为记录文档大小的最佳方法是什么?为什么您认为该方法最好?您可以查看 function (doc) { emit(doc._id, JSON.stringify(doc).length); } 您可以提出HEAD请求: $ curl -X HEAD -I http://USER:PASS@localh
function (doc) {
emit(doc._id, JSON.stringify(doc).length);
}
您可以提出HEAD请求:
$ curl -X HEAD -I http://USER:PASS@localhost:5984/db/doc_id
HTTP/1.1 200 OK
Server: CouchDB/1.1.1 (Erlang OTP/R14B03)
Etag: "1-c0b6a87a64fa1b1f63ee2aa7828a5390"
Date: Tue, 17 Jan 2012 21:32:43 GMT
Content-Type: text/plain;charset=utf-8
Content-Length: 740047
Cache-Control: must-revalidate
Content Length标头包含文档的长度(以字节为单位)。这是非常快的,因为您不需要下载完整的文档
但是有一个警告:Content Length是文档的utf-8版本的字节数(参见Content-Type标题);是字符串中16位utf-16代码单元的数目
i、 例如,他们正在计算不同的内容,字节与代码单位,文档的不同编码,utf-8与utf-16。根据公认的答案,我建议进行以下改进:
function (doc) {
emit([JSON.stringify(doc).length, doc._id], doc._id);
}
这有以下优点:
- 文档长度作为第一个关键部分,允许您按文档大小进行排序
- 作为第二个关键部分的文档id确保具有相同大小的文档显示为单独的条目
- 值部分中的doc id使得在futon中复制id更容易(因为关键部分在那里为您提供了一个链接指针)
长度
值是否包括\u附件
?