我正在将数据从我们的数据库(一个 rdf 存储数据库)传输到 AWS Neptune,我正面临一些性能问题。
我在与db.r4.large
Neptune 相同的 vpc 上有一个 Neptune 实例和 ec2 实例。
基本上,我正在尝试使用以下 http 请求将数据摄取到 Neptune <myinstance>:8182/sparql
:.
实际上,我从我的 ec2 实例发送 http 请求,似乎 Neptune 处理时间很慢。此外,海王星的处理似乎不是并行的。
以下是我的测试和结果:
我向 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 插入命令,这个请求的时间是34.037s
海王星声称它花费的时间21.846 s
:{ “类型”:“提交”, “totalElapsedMillis”:21846 }
real 0m34.037s
user 0m0.044s
sys 0m0.062s
一个
tcpdump
罐头清楚地证明,收到来自海王星的响应延迟了 34 秒。当我发送一个 100m 的数据时,花了超过 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})<
{ “类型”:“提交”, “totalElapsedMillis”:29797 } { “类型”:“提交”, “totalElapsedMillis”:30362 }
real 0m57.752s
user 0m0.137s
sys 0m0.101s
我
tcpdump
清楚地看到请求是并行发送的,但是在 Neptune为这两个请求wireshark
返回之前有大约 1 分钟的延迟。200 OK
实际上,Neptune 的处理似乎不是并发的。
请求是在时间 12 发送的,并且
200 ok
对于两个请求都是在时间 69 发送的,这恰好是 57 秒的延迟。我试图将我的 Neptune 实例大小增加到
db.r4.xlarge
dbdb.r4.2xlarge
,但我得到了相同的性能。- 我尝试以某种
gzip
格式发送压缩数据以缩短时间,但 Neptune 似乎不支持它(检查wireshark
请求是否已正确发送)。
我想听听您对我的测试和结果的看法:
- 为什么单个 http 请求的性能很慢?
- 为什么海王星的处理不是并行的?