Amazon Dynamodb находит все в Grails

У меня есть приложение Grails. Я использую amazon dynamodb для определенного требования, к которому обращаются, и записи добавляются другим приложением. Теперь мне нужно получить всю информацию из таблицы DynaModb в таблицу PostgreSQL. В Dynamodb более 10000 записей, но пропускная способность

Read capacity units : 100
Write capacity units : 100

В BuildConfig.groovy я определил плагин

compile ":dynamodb:0.1.1"

В config.groovy у меня есть следующая конфигурация

grails {
  dynamodb {
    accessKey = '***'
    secretKey = '***'
    disableDrop = true
    dbCreate = 'create'
  }
}

Код у меня выглядит примерно так

class book {

  Long id
  String author
  String name
  date publishedDate

  static constraints = {
  }

  static mapWith = "dynamodb"
  static mapping = {
    table 'book'
    throughput read:100
  }
}

Когда я пытаюсь что-то вроде book.findAll(), я получаю следующую ошибку

AmazonClientException: Unable to unmarshall response (Connection reset)

И когда я попытался уменьшить количество записей, попробовав что-то вроде book.findAllByAuthor() (который также имеет более 1000 записей), я получаю следующую ошибку

Caused by ProvisionedThroughputExceededException: Status Code: 400, AWS Service: AmazonDynamoDB, AWS Request ID: ***, AWS Error Code: ProvisionedThroughputExceededException, AWS Error Message: The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API.

Мне нужно получить все записи в dynamodb, несмотря на ограничение пропускной способности, и сохранить их в таблице postgres. Есть ли способ сделать это?

Я очень новичок в этой области, заранее спасибо за помощь.

После некоторых исследований я наткнулся на Google Guava. Но даже для использования Guava RateLimiter не будет фиксированного количества раз, когда мне нужно будет отправить запрос о том, сколько времени это займет. Поэтому я ищу решение, которое удовлетворит мои требования.


person Visahan    schedule 16.12.2016    source источник


Ответы (1)


Вероятно, ваша проблема вообще не связана с Grails. В возвращенном сообщении об ошибке утверждается: The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API

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

Ознакомьтесь также с этим ответом: https://stackoverflow.com/a/31484168/2166188

person Michal_Szulc    schedule 16.12.2016
comment
Я ищу решение, которое означает, что мне не нужно увеличивать пропускную способность, так как это означает, что я должен платить больше. После небольшого дополнительного исследования регулирование может стать решением для этого, которое не превысит лимит, просто выполнение задачи займет больше времени. Я не делал этого раньше, поэтому помощь с этой стороны также будет полезна. - person Visahan; 16.12.2016
comment
Сначала вы должны проверить, какие ограничения вы нарушаете. Например, вы можете создать задание, которое будет выполняться каждые 15 минут, пока оно не завершит свою задачу. - person Michal_Szulc; 16.12.2016
comment
Как я описал в приведенном выше примере, мне нужно получить все записи из Dynamodb для обработки. Поэтому я нарушаю единицы чтения емкости. Я ищу решение, в котором я мог бы использовать дросселирование для достижения своей цели, что займет больше времени, но завершит задачу. - person Visahan; 20.12.2016