Dynamo db допускает только 25 запросов в партии. Есть ли способ увеличить это на Java, поскольку я должен обрабатывать 1000 записей в секунду? Любое решение лучше, чем делить его партиями и обрабатывать их?Операции записи динамовских db
ответ
25 за BatchWriteItem жесткое ограничение dynamodb как описано здесь: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html
Там ничто не мешает вам делать несколько BatchWrites параллельно. Вещь, которая собирается затвора, сколько вы можете написать, - это пропускная способность записи в таблице.
BatchWrites в DynamoDB были представлены, чтобы уменьшить количество обратных рейсов, необходимых для выполнения нескольких операций записи для языков, которые не предоставляют возможности для параллельных потоков для выполнения такой работы, как PHP.
Несмотря на то, что вы по-прежнему получаете более высокую производительность из-за уменьшенных круговых поездок с использованием пакетного API, существует вероятность того, что отдельные записи могут завершиться неудачно, и ваш код будет необходимо искать. Простой способ выполнять массивные параллельные записи с использованием Java должен был бы использовать класс ExecutorService. Это обеспечивает простой механизм для использования нескольких потоков для выполнения вставок. Однако, так же, как отдельные элементы внутри пакета могут выйти из строя, вам нужно будет отслеживать объекты Future, чтобы гарантировать успешное выполнение записи.
Еще один способ повысить пропускную способность - запустить код на EC2. Если вы звоните в DynamoDB со своего ноутбука или центра обработки данных за пределами AWS, время в оба конца займет больше времени, и запросы будут немного медленнее.
Суть заключается в использовании стандартных технологий многопоточности Java для получения требуемой производительности. Тем не менее, за определенный момент вам может потребоваться развернуть и использовать дополнительное оборудование для управления еще более высокой OPS записи.
Всякий раз, когда у вас есть большой поток данных в реальном времени, которые должны быть в AWS, потоки Kinesis, вероятно, подходят. В частности, с помощью AWS Kinesis Firehose вы можете передавать свои данные на S3 в массовом масштабе без административных накладных расходов. Затем вы можете использовать DataPipeline, чтобы переместить его в Dynamo.