我正在将数据从我们的数据库(RDF存储数据库)传输到AWS Neptune,我面临一些性能问题。
我有一个db.r4.large海王星实例和ec2实例在同一个vpc上。
基本上,我试图使用以下http请求将数据摄取到neptune:<myinstance>:8182/sparql
实际上,我从ec2实例发送了http请求,看起来neptune的处理时间很慢。此外,海王星的处理过程似乎并不平行。
以下是我的测试和结果:
我向海王星发送了以下请求:
time curl -X POST -d @/tmp/my_file_32m.txt http://myneptune-poc.c0zm6uyrnnwp.us-east-1.neptune.amazonaws.com:8182/sparql
/tmp/my_file_32m.txt包含sparql insert命令,此请求的时间为34.037s,而neptune声称它花费了21.846 s
{
“type”:“提交”,
“总计”:21846
}
real 0m34.037s
user 0m0.044s
sys 0m0.062s
atcpdump可以清楚地证明海王星的响应是在34秒的延迟内收到的。
当我发送100米的数据时,花了1分钟多。
当我并行发送同一个32m文件时,时间是2的倍数:
time xargs -I % -P 8 curl -vX POST -d @/tmp/my_file_32m.txt "http://myneptune-poc.c0zm6uyrnnwp.us-east-1.neptune.amazonaws.com:8182/sparql" < <(printf '%s\n' {1..2})<
{
“type”:“提交”,
“总计”:29797
}
{
“type”:“提交”,
“总计”:30362
}
real 0m57.752s
user 0m0.137s
sys 0m0.101s
我拍了一张tcpdump的照片,从wireshark中清楚地看到请求是并行发送的,但两个请求都有~1分钟的延迟,直到海王星返回200 OK
实际上,海王星的处理似乎不是同时进行的。
请求在时间12内发送,两个请求的200 ok在时间69内发送,正好是57秒的延迟。
我试图将neptune实例大小增加到db.r4.xlargedb.r4.2xlarge,db,但是我得到了相同的性能。
我试着以gzip格式发送压缩数据以提高时间,但海王星似乎不支持它(签入wireshark请求被正确发送)。
我想听听你对我的测试和结果的看法:
为什么单个http请求的性能很慢?
为什么海王星的处理不平行?

最佳答案

您正在将time的输出(客户端往返时间)与服务器报告的totalEllapsedMillis进行比较。前者包括网络传输时间,后者只是数据库从接受请求开始计算查询所用的时间。你有什么关于传输100MB文件所花时间的指标吗?
Neptune会并行处理查询(事实上,并行度的大小会随实例类型的变化而变化)。如果您的查询与它在连线上花费的时间相比真的很小,那么它可能看起来像是一个接一个地完成的结果。我想看看你实验的细节,看看你的设置是否有问题。
首先,您的客户机和db端点之间的网络延迟是多少?(例如,向/status api发出请求需要多长时间)

08-25 14:01