2016-12-16 3 views
2

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

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() (который также WUD имеют выше 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. Есть ли способ сделать это?

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

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

ответ

0

Возможно, ваша проблема не связана с граалями. Возвращенные сообщения об ошибках: 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

+0

Я ищу решение, которое означает, что я не должен увеличивать throuhput, так как это означает, что я должен платить больше. После немного более тщательного изучения, Throttling может быть решением для этого, которое не превысит предела, для выполнения задачи потребуется больше времени. Я раньше этого не делал, поэтому помощь с этой целью также была бы полезной. – Visahan

+0

Сначала вы должны проверить, какие ограничения вы нарушаете. Например, вы можете создать задание, которое будет выполняться каждые 15 минут, пока оно не завершит полную задачу. –

+0

Как я описал в приведенном выше примере, мне нужно получить все записи из dynamodb для обработки. Поэтому я нарушаю единицы чтения. Я ищу решение, в котором я мог бы использовать дросселирование для достижения моей цели, которая займет больше времени, но завершит задачу. – Visahan

Смежные вопросы