我的环境是本地机器: 的Ubuntu 12.04 ArangoDB 2.2.4或2.2.3 Perl驱动程序(ArangoDB) CPU:3核6线程 MEM:3GB我怎样才能提高ArangoDB
我用保存方法。保存方法等于HTTP_GET和HTTP_POST。 执行结果如下:
- 一个perl进程,插入30000个文件。平均700个请求/秒。 350个HTTP_GET和350个HTTP_POST。
- 10 perl进程,插入30000文件。平均1000个请求/秒。 500个HTTP_GET和500个HTTP_POST。
运行30秒后,会报告HTTP 500错误。我修改了perl驱动程序(ArangeDB)代码以重试它。所以我可以完成这个测试。
当它报告HTTP 500错误时,arangodb的日志正在跟踪。
2014-10-04T14:46:47Z [26642] DEBUG [./lib/GeneralServer/GeneralServerDispatcher.h:403] shutdownHandler called, but no handler is known for task
2014-10-04T14:46:47Z [26642] DEBUG [./lib/GeneralServer/GeneralServerDispatcher.h:403] shutdownHandler called, but no handler is known for task
我希望我的程序可以执行平均3000-5000个请求/秒并减少HTTP 500错误。我可以使用哪些改进。谢谢!
UPDATE BY 7/10/2014,我的插入示例脚本如下。我用AQL替换了保存方法。 一个perl进程,插入10000个文档,Avg 900个请求/秒,1000个HTTP_POST/s。 (无HTTP 500) 一个perl进程,插入30000个文档,Avg 700个请求/秒,700个HTTP_POST/s。 (会发出HTTP 500,需要重试)
#!/usr/bin/perl
use warnings;
use strict;
use ArangoDB;
my $itdb = ArangoDB->new(
{
host => '10.211.55.2',
port => 8529,
keep_alive => 1,
}
);
# Find or create collection
$itdb->create('Node_temp',{isVolatile => JSON::true});
ImpNodes();
sub ImpNodes{
for(1..30000){
my $sth = $itdb->query('INSERT {
"id": "Jony",
"value": "File",
"popup": "public",
"version": "101",
"machine": "10.20.18.193",
"text": {
"Address": ["center","bold","250","100"]
},
"menuitem":[
{
"value": "New",
"onclick": "CreateNewDoc",
"action": "CreateNewDoc"
}
,
{
"value": "Open",
"onclick": "OpenNewDoc",
"action": "OpenNewDoc"
},
{
"value": "Close",
"onclick": "CloseDoc",
"action": "CloseDoc"
},
{
"value": "Save",
"onclick": "SaveDoc",
"action": "SaveDoc"
}]
} in Node_temp');
my $cursor = $sth->execute({
do_count => 1,
batch_size => 10,
});
}
}
而且我已经修改了Arangodb-0.08,以便在Connection.pm中顺利插入。 HTTP_POST方法:
$retries = 100 #for testing
for(1..$retries){
(undef, $code, $msg, undef, $body) = $self->{_http_agent}->request(
%{ $self->{_req_args} },
method => 'POST',
path_query => $path,
headers => $headers,
content => $data,
);
last if ($code < 500 || $code >= 600);
print "The return code is 5xx,retry http_post!\n";
print $code, " : " , $msg , " : " , $body;
select(undef, undef, undef, 3);
}
是否有任何与HTTP 500错误返回的消息?另外,是否有可能为您的perl测试程序提供修改的驱动程序以进行复制? – stj 2014-10-06 11:00:10
实际上是否需要进行GET和POST操作?保存一个文档只需要一个HTTP POST,所以我想你正在发布GET来确保文档还没有在那里,对吗?如果您的目标只是保存文档,那么HTTP GET可以完全省略。 – stj 2014-10-06 11:01:44
返回的消息是“500:内部响应:无法连接到10.211.55.2:8529:无法在/home/netdisco/.plenv/versions/5.19.8/lib/perl5/site_perl/5.19.8/ArangoDB分配请求的地址/Connection.pm 73行“。该消息来自Connection.pm中的http_post。 – Hansen 2014-10-07 08:12:14