datatypeとドキュメントのサイズ。

ログ。

{ "a" : "1" }

のドキュメントを/test_data に10000件放り込む。サイズが1.1MBになる。

$ ls -al /opt/local/var/lib/couchdb/test_data.couch 
-rw-r--r--  1 couchdb  couchdb  1199137  5 16 01:36 /opt/local/var/lib/couchdb/test_data.couch
$ curl -X GET http://localhost:5984/test_data
{"db_name":"test_data","doc_count":10000,"doc_del_count":0,"update_seq":10000,"purge_seq":0,"compact_running":false,"disk_size":1199137,"instance_start_time":"1242405387471218"}

同じようにして、

{"a" : 1}

のドキュメントを/test_data2 に10000件放り込む。サイズが1.1MBになる。

$ ls -al /opt/local/var/lib/couchdb/test_data2.couch  
-rw-r--r--  1 couchdb  couchdb  1158022  5 16 01:39 /opt/local/var/lib/couchdb/test_data2.couch
$ curl -X GET http://localhost:5984/test_data2
{"db_name":"test_data2","doc_count":10000,"doc_del_count":0,"update_seq":10000,"purge_seq":0,"compact_running":false,"disk_size":1158022,"instance_start_time":"1242405567779251"}

ということで、1ドキュメントあたり、(1199137 - 1158022) / 10000 = 4.1 byte の削減?になる。まあでも、ストレージに蓄積されるサイズより、ネットワークに乗っかるサイズを考えないとだめだと思う。

で、

{ "a" : "1" }

で放り込んだ10000件について、Viewで { "a" : 1 } に直すという方法にする。これだと、HTTP経由ではもともと { "a" : 1 } と入れた場合と同じ量のコンテンツがネットワークに乗っかることになる。

function(doc){
   emit(null, { a : parseInt(doc.a) } )
}

一応ディスクサイズ確認。

これを_design/test/hoge というビューとして作っておいて、Viewに一度アクセスする(FutonでやればOK)。
View の結果ファイルは /${DBDIR}/.${db_name}_design/${design}.view にできあがるので、そのファイルを確認すると、

$ ls -al /opt/local/var/lib/couchdb/.test_data_design/test.view 
-rw-r--r--  1 couchdb  couchdb  480530  5 16 01:45 /opt/local/var/lib/couchdb/.test_data_design/test.view

オーバーヘッドは40KBと意外と小さい?大きい?。