6

今天写了一个性能测试程序,用于向couchdb插入数据和添加附件。服务器软件是 couchbase(它是 couchdb 的包装器),操作系统是 Windows 2003 服务器。程序是C#开发的,couchdb驱动是LoveSeat(封装了一些http方法处理couchdb)。资料挺简单的,不过附件也不小,每个70kb左右。大约有 200 个附件,我反复附加它们。我在客户端程序中启动了 5 个线程。

一切看起来都很好,直到 couchdb 服务器意外终止。事实上,这不是第一次坠毁。起初我以为是因为客户端程序。但最后我发现couchdb 崩溃了。我不认为这是因为数据或附件。因为我正在插入相同的数据并重复添加相同的附件。该程序运行了大约一个小时没有问题,直到它崩溃。

[Tue, 05 Jul 2011 11:00:19 GMT] [info] [<0.142.0>] 192.168.1.135 - - 'GET' /test/67366 200

[Tue, 05 Jul 2011 11:00:19 GMT] [info] [<0.108.0>] 192.168.1.135 - - 'GET' /test/7136 200

[Tue, 05 Jul 2011 11:00:19 GMT] [info] [<0.108.0>] 192.168.1.135 - - 'GET' /test/47306 200

[Tue, 05 Jul 2011 11:00:19 GMT] [info] [<0.108.0>] 192.168.1.135 - - 'GET' /test/27257 200

[Tue, 05 Jul 2011 11:00:19 GMT] [info] [<0.108.0>] 192.168.1.135 - - 'PUT' /test/7136/f?rev=1-334efd144dcdc52fd3a3a981dce4472f 201

[Tue, 05 Jul 2011 11:00:25 GMT] [error] [<0.145.0>] ** Generic server <0.145.0> terminating 
** Last message in was {pread_iolist,4294342003}
** When Server state == {file,{file_descriptor,prim_file,{#Port<0.3143>,1464}},
                              0,4295164786}
** Reason for termination == 
** {{badmatch,{ok,<<183,92,29,219,169,127,153,2,50,217,252,186,178,175,202,
                    144,215,209,191,69,109,230,227,154,114,174,173,157,231,
                    153,246,124,105,239,174,51,143,24,108,175,101,215,175,
                    221,35,99,53,124,108,109,249,112,202,29,85,87,81,176,94,
                    219,11,103,129,231,25,111,242,108,246,207,107,72,173,172,
                    57,246,195,16,236,79,243,134,211,93,131,218,180,93,240,
                    173,213,199,226,175,176,217,250,154,89,39,237,157,250,77,
                    173,151,156,139,248,106,85,21,134,253,85,234,108,85,208,
                    67,177,130,124,247,161,98,77,173,126,170,111,80,84,45,
                    212,201,72,149,90,138,252,89,23,85,165,252,105,187,191,
                    41,86,125,148,106,149,175,252,78,185,198,154,207,172,142,
                    148,101,83,140,99,222,102,26,41,131,206,132,221,31,74,3,
                    172,176,158,236,136,71,120,169,63,35,161,251,208,86,202,
                    1,95,208,25,51,76,250,100,182,177,122,31,91,230,249,214,
                    245,229,250,212,118,86,167,120,116,6,173,78,113,18,171,
                    143,215,191,38,207,51,92,150,10,10,83,164,98,154,181,157,
                    ......... a loooooot of numbers. 
4

3 回答 3

2

很抱歉你有这个错误。我可以建议在 Couchbase 论坛上发布这个问题吗?我们的支持人员比 SO 更密切地监控这些:http: //www.couchbase.org/forums/

于 2011-07-05T13:03:00.397 回答
2

我想我找到了原因。文件大小达到4GB。但是根据这个 wiki 页面,Erlang/OTP 版本 R14B01 不再有这个错误。所以我认为 couchbase 使用了 R14B01 之前的嵌入式erlang/otp 版本。(我还在机器上安装了一个独立的 Erlang/OTP R14B03,但似乎没有使用它)

于 2011-07-06T01:32:40.280 回答
2

最后的结论:

couchbase 1.02 不支持在 windows 2003 32 位机器上大于 4GB 的数据文件。

couchbase 2.0 开发者预览版在windows 2003 32 位机器上支持大于 4GB 的数据文件。但据我所知,2.0 版至少比 1.02 版慢 5 倍。

此链接中的 couchdb 1.1在 windows 2003 32 位机器上支持大于 4GB 的文件。但它和 couchbase 2.0一样慢。

Couchdb在 Windows 上太慢了(至少在我的用户案例中它很慢)。最后,我尝试使用 mysql 来存储文件。事实证明,Mysql 快了 8 倍!将附件插入 couchdb 需要 650 毫秒,而 mysql 的数字仅为 80 毫秒。

于 2011-07-06T11:38:49.713 回答