AWS Neptune Производительность

Я работаю над переносом данных из нашей базы данных, которая представляет собой базу данных rdf-хранилища, в AWS Neptune, и у меня возникли некоторые проблемы с производительностью.

У меня есть db.r4.large экземпляр Neptune и экземпляр ec2 на том же vpc, что и Neptune.

По сути, я пытаюсь передать данные в Нептун, используя следующий http-запрос: <myinstance>:8182/sparql.

На самом деле я отправляю http-запрос из своего экземпляра ec2, и кажется, что время обработки Нептуна медленное. Вдобавок кажется, что обработка Нептуна не параллельна.

Ниже приведены мои тесты и результаты:

  1. Я отправил Нептун следующий запрос:

    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 секунды.

  2. Когда я отправил данные на 100 м, это заняло более 1 минуты.

  3. Когда я отправил один и тот же файл размером 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 секунд задержки.

  4. Я попытался увеличить размер экземпляра Neptune до db.r4.xlarge, а также до db.r4.2xlarge, дБ, но у меня была такая же производительность.

  5. Я попытался отправить сжатые данные в формате gzip, чтобы улучшить время, но похоже, что Нептун не поддерживает его (проверяя wireshark, запрос был отправлен правильно).

Хотелось бы услышать ваше мнение о моих тестах и ​​результатах:

  1. почему низкая производительность для одного HTTP-запроса?
  2. почему обработка Нептуна не параллельна?

person user2609950    schedule 08.01.2019    source источник
comment
Разве вы не должны спросить об этом у поддержки Amazon Neptune? Afaik, это коммерческий продукт, ни детали реализации, ни детали о структурах данных, оптимизаторах запросов, индексах и т. Д. Не находятся в сети. Особенно вопрос типа почему, например, почему обработка Нептуна не является параллельной? - кто еще, кроме разработчиков, может ответить на этот вопрос правильно, то есть без каких-либо догадок?   -  person UninformedUser    schedule 08.01.2019
comment
Я задал этот вопрос также на форуме aws, но я опубликовал его и здесь, чтобы узнать, сталкивался ли кто-то еще с той же проблемой.   -  person user2609950    schedule 08.01.2019
comment
Хорошо, тогда всегда полезно упоминать о сообщениях на разных сайтах - их также можно использовать в качестве справочника в будущем, если вы получите там ответ.   -  person UninformedUser    schedule 08.01.2019
comment
Привет, у вас есть новости по этому поводу?   -  person The-Big-K    schedule 25.01.2019
comment
Я открыл билет в aws, и они изучают мои данные. В настоящее время скорость на моем сервере составляет 10000 записей / сек. У меня была встреча с командой aws, и они рекомендовали увеличить размер моего экземпляра до 8xlarge и запустить load api для файлов с размером это больше, чем гига, но это не помогло. поэтому я обновлю ветку, как только мой тикет будет разрешен ..   -  person user2609950    schedule 26.01.2019
comment
Проверяем это, чтобы узнать, были ли у вас какие-либо другие обновления с января.   -  person The-Big-K    schedule 17.04.2019


Ответы (1)


Вы сравниваете вывод time (время приема-передачи на стороне клиента) с сообщением сервера totalEllapsedMillis. Первое включает время передачи вашей сети, а второе - это просто время, которое БД потребовалось для вычисления запроса с момента его принятия. Есть ли у вас какие-либо показатели времени, необходимого для передачи файла размером 100 МБ?

Neptune обрабатывает запросы параллельно (фактически степень параллелизма зависит от типа вашего экземпляра). Если ваши запросы действительно малы по сравнению со временем, которое они проводят в сети, это может выглядеть так, как если бы результаты были выполнены один за другим. Я хотел бы увидеть более подробную информацию о ваших экспериментах, чтобы узнать, есть ли проблемы с вашей настройкой.

Во-первых, каково сетевое отставание между вашим клиентом и конечной точкой БД? (например, сколько времени у вас уходит на то, чтобы сделать запрос к / status API)

person The-Big-K    schedule 09.01.2019