我的環境是本地機器: 的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