2017-04-12 183 views
0

我正在尋找在Go中構建RESTful API,它將負責根據多個移動應用程序(將存儲在Amazon Redshift羣集中)發送的數據插入數據。可能每秒接收數以萬計的請求。將大量數據插入到Redshift中

從我讀到的,Redshift給插入速度慢。 這就是爲什麼很少有人建議我使用像dynamodb或s3這樣的中間數據庫,我會首先執行插入操作。然後,我第二次將數據導入Redshift。

我想知道爲什麼我需要在這種情況下使用Redshift,因爲數據已經存儲在數據庫中了?你認爲我可以以不同的方式行事嗎?

我也想過一個簡單的解決方案,寫入隊列並逐步插入數據到紅移,但我認爲這可能是一個問題,如果隊列變得越來越大,因爲插入速度不夠快,無法補償傳入數據。

在此先感謝您的幫助! :-)這樣

+0

請注意,S3是存儲服務,不是任何種類的關係數據庫。 – Nathan

回答

2

建議通常題外話爲StackOverflow的,但是...

亞馬遜紅移是大規模並行處理(MPP)數據庫與SQL接口。它可以用來查詢TB甚至PB的數據,並且可以非常有效地完成。

您問「爲什麼我需要使用Redshift」 - 如果您的查詢需求無法滿足傳統數據庫,則答案爲。如果您可以令人滿意地使用普通數據庫進行查詢,那麼使用Redshift沒有任何真正的理由。

但是,如果您的查詢需要Redshift,那麼您應該繼續使用它。 Redshift的設計使得插入數據的最有效方式是通過COPY命令從Amazon S3加載。通過正常的INSERT語句插入數據效率不高,除非它們按照INSERT語句(例如數百或數千)插入許多行。

所以,有些問題要問:

  • 我需要亞馬遜紅移的能力爲我的查詢,或者可以在傳統的數據庫就足夠了?
  • 我是否需要加載數據實時,還是足以分批加載?
  • 如果使用批次,我需要多長時間加載批次?我可以每小時或每天做它,還是需要在數據到達的幾分鐘內完成?

您也可以考慮使用Amazon Kinesis Firehose,它可以接受數據流並自動將其插入Amazon Redshift數據庫。