2

我正在将数据从我们的数据库(一个 rdf 存储数据库)传输到 AWS Neptune,我正面临一些性能问题。

我在与db.r4.largeNeptune 相同的 vpc 上有一个 Neptune 实例和 ec2 实例。

基本上,我正在尝试使用以下 http 请求将数据摄取到 Neptune <myinstance>:8182/sparql:.

实际上,我从我的 ec2 实例发送 http 请求,似乎 Neptune 处理时间很慢。此外,海王星的处理似乎不是并行的。

以下是我的测试和结果:

  1. 我向 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 秒。

  2. 当我发送一个 100m 的数据时,花了超过 1 分钟。

  3. 当我并行发送相同的 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 秒的延迟。

  4. 我试图将我的 Neptune 实例大小增加到db.r4.xlargedb db.r4.2xlarge,但我得到了相同的性能。

  5. 我尝试以某种gzip格式发送压缩数据以缩短时间,但 Neptune 似乎不支持它(检查wireshark请求是否已正确发送)。

我想听听您对我的测试和结果的看法:

  1. 为什么单个 http 请求的性能很慢?
  2. 为什么海王星的处理不是并行的?
4

1 回答 1

2

您正在将time(client side round trip time) 的输出与服务器报告的输出进行比较totalEllapsedMillis。前者包括您的网络传输时间,而后者只是数据库从接受请求开始计算查询所花费的时间。您对传输 100MB 文件所花费的时间有任何衡量标准吗?

Neptune 会并行处理查询(实际上,并行量随您的实例类型而变化)。如果您的查询与它在网络上花费的时间相比真的很小,那么它可能看起来像是一个接一个完成的结果。我想查看您的实验更详细的细节,看看您的设置是否存在问题。

首先,您的客户端和数据库端点之间的网络延迟是多少?(例如,您向 /status API 发出请求需要多长时间)

于 2019-01-09T23:28:02.100 回答