2016-12-16 17 views
2

我有一個grails應用程序。我正在使用amazon dynamodb來訪問特定的需求,並且由不同的應用程序添加條目。現在我需要從dynamodb表中獲取所有信息到postgreSQL表。有超過10000條記錄中dynamodb但吞吐量Amazon Dynamodb在grails中查找所有內容

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

可能您的問題與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

+0

我正在尋找一個解決方案,這意味着我不必增加throuhput,因爲這意味着我必須付出更多。經過多一點研究後,節流可能是一個解決方案,這將不會超過極限,只需要更長的時間完成任務。我之前沒有這樣做過,所以從這方面的幫助也是有幫助的。 – Visahan

+0

首先,你應該檢查你違反的限制是什麼。例如,您可以創建一個每15分鐘執行一次的作業,直到完成全部任務。 –

+0

正如我在上面的例子中所描述的,我需要從dynamodb獲取所有記錄進行處理。所以我違反了讀取容量單位。我正在尋找一種解決方案,我可以使用節流來實現我的目標,這需要更長的時間,但會完成任務。 – Visahan