nco*_*hen 5 couchdb attachment
我在 couchdb 中遇到附件问题。
假设我有一个带有大附件的文档 (100 MB)。这意味着每次您修改文档(不是附件,只是文档的一个字段)时,都会复制 100 MB 的附件。
是否可以强制couchdb在未修改附件时创建附件的引用(couchdb可以轻松验证附件是否已使用MD5修改)?
编辑:根据这个它应该能够做到,但是怎么做呢?我的(个人安装)默认情况下不这样做!
通常,您期望找到的是 CouchDB 的默认行为。我认为这可能取决于 API 的使用方式。例如,以下示例场景工作正常(在 CouchDB 1.5上)
所有命令均以 bash 语法给出,因此您可以轻松重现(只需确保使用正确的文档id和revision 编号)。
创建10M示例文件用于上传
dd if=/dev/urandom of=attach.dat bs=1024 count=10240
创建测试数据库
curl -X PUT http://127.0.0.1:5984/attachtest
data_size此时数据库预计约为几个字节。您可以按如下方式查询,并查找data_size属性。
curl -X GET http://127.0.0.1:5984/attachtest
在我的测试中给出:
{"db_name":"attachtest","doc_count":1,"doc_del_count":0,"update_seq":2,"purge_seq":0,"compact_running":false,"disk_size":8287,"data_size":407,"instance_start_time":"1413447977100793","disk_format_version":6,"committed_update_seq":2}
创建样本文档
curl -X POST -d '{"hello": "world"}' -H "Content-Type: application/json" http://127.0.0.1:5984/attachtest
id此命令给出带有 document和ision的输出rev,稍后应使用它们
现在,将示例文件附加到文档中;命令应使用上一个输出中记录的 ision id:rev
curl -X PUT --data-binary @attach.dat -H "Content-Type: application/octet-stream" http://127.0.0.1:5984/attachtest/DOCUMENT-ID/attachment\?rev\=DOCUMENT-REVISION-1
最后一个命令输出表示修订版 2 已创建,因此文档确实已更新。现在可以查看数据库大小,应该在10000000(10M)左右。data_size再次在以下命令的输出中查找:
curl -X GET http://127.0.0.1:5984/attachtest
现在,从数据库取回文档。然后将使用它来更新它。重要的是其中包含:
curl -o document.json -X GET http://127.0.0.1:5984/attachtest/DOCUMENT-ID
更新文档内容,而不更改附件本身(保留存根)。在这里,这只会更改一个属性值。
sed -i 's/world/there/' document.json
并更新数据库中的文档
curl -X PUT -d @document.json -H "Content-Type: application/json" http://127.0.0.1:5984/attachtest/DOCUMENT-ID
最后一个命令输出表示修订版 3 已创建,因此我们现在该文档确实已更新。
最后,现在我们可以验证数据库大小!预期的 data_size 仍然在 10000000 (10M) 左右,而不是 20M:
curl -X GET http://127.0.0.1:5984/attachtest
这应该可以正常工作。例如,在我的机器上它给出:
{"db_name":"attachtest","doc_count":1,"doc_del_count":0,"update_seq":8,"purge_seq":0,"compact_running":false,"disk_size":10535013,"data_size":10493008,"instance_start_time":"1413447977100793","disk_format_version":6,"committed_update_seq":8}
所以,还是10M。
| 归档时间: |
|
| 查看次数: |
1016 次 |
| 最近记录: |