Я работаю над переносом данных из нашей базы данных, которая представляет собой базу данных rdf-хранилища, в AWS Neptune, и у меня возникли некоторые проблемы с производительностью.
У меня есть db.r4.large
экземпляр Neptune и экземпляр ec2 на том же vpc, что и Neptune.
По сути, я пытаюсь передать данные в Нептун, используя следующий http-запрос: <myinstance>:8182/sparql
.
На самом деле я отправляю http-запрос из своего экземпляра ec2, и кажется, что время обработки Нептуна медленное. Вдобавок кажется, что обработка Нептуна не параллельна.
Ниже приведены мои тесты и результаты:
Я отправил Нептун следующий запрос:
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
:{ "type" : "Commit", "totalElapsedMillis" : 21846 }
real 0m34.037s
user 0m0.044s
sys 0m0.062s
tcpdump
может четко доказывать, что ответ от Нептуна был получен с задержкой в 34 секунды.Когда я отправил данные на 100 м, это заняло более 1 минуты.
Когда я отправил один и тот же файл размером 32 м параллельно, время было кратно 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" : "Commit", "totalElapsedMillis" : 29797 } { "type" : "Commit", "totalElapsedMillis" : 30362 }
real 0m57.752s
user 0m0.137s
sys 0m0.101s
Я взял
tcpdump
и ясно увидел изwireshark
, что запрос был отправлен параллельно, но есть задержка ~ 1 мин, пока Нептун не вернет200 OK
для обоих запросов.На самом деле кажется, что обработка Нептуна не параллельна.
запрос был отправлен за время 12 и
200 ok
для обоих запросов было отправлено за время 69, что составляет ровно 57 секунд задержки.Я попытался увеличить размер экземпляра Neptune до
db.r4.xlarge
, а также доdb.r4.2xlarge
, дБ, но у меня была такая же производительность.- Я попытался отправить сжатые данные в формате
gzip
, чтобы улучшить время, но похоже, что Нептун не поддерживает его (проверяяwireshark
, запрос был отправлен правильно).
Хотелось бы услышать ваше мнение о моих тестах и результатах:
- почему низкая производительность для одного HTTP-запроса?
- почему обработка Нептуна не параллельна?