Локальная ужасная производительность DynamoDB

DynamoDB local берет 100+ мс для выполнения одной операции над моим столом. В документах говорится, что пропускная способность игнорируется для локальных БД и ограничивается только скоростью жесткого диска/компьютера.

По сравнению с mongodb моя скорость записи в 100 раз ниже, чем должна быть. Что я могу сделать, чтобы ускорить локальную запись в DynamoDB?

Я попробую пакетные путы, но проблема все еще остается. В этот момент у меня уйдут годы на ввод моих (довольно больших) тестовых данных.

Я использую Clojure и Faraday в качестве клиентского API, но подтвердил, что это не является узким местом.

Что я пробовал

Я реализовал партии по 25 на каждый, что замедлило общий прогресс примерно в 25 раз :). Таким образом, даже с пакетами, я получаю скорость записи около 120 мс на элемент.

Использование Mongo, даже с консервативным флагом WriteConcern/ACKNOWLEDGED, приводит к примерно 250 микросекундам на элемент (примерно в 500 раз быстрее), и это даже не требует отправки пакетов. Так что проблема не в моем жестком диске или ОС.

Ответ 1

Вы давно задали свой вопрос, но я все еще хочу дать некоторую справочную информацию.

MongoDB очень быстр, потому что он буферизует обновления в памяти перед записью их на диск. Подробнее об этом вы можете прочитать в официальном FAQ по MongoDB здесь

DynamoDBLocal, с другой стороны, довольно медленный, потому что он использует базу данных SQLite за кулисами (это можно проверить, открыв файл *.db в каталоге DynamoDBLocal с помощью браузера SQLite) и SQLite имеет очень низкую скорость записи по сравнению с другими базами данных. Подробнее здесь.

DynamoDBLocal - это просто базовый инструмент для локальной разработки, который объединяет подмножество API DynamoDB вокруг простой базы данных SQLite. Конечно, настоящая DynamoDB не использует SQLite и работает намного быстрее.