1

我正在通過偵聽來自不同來源的事件並將該數據抽入紅移羣集來構建紅移數據庫。Redshift性能:SQL查詢與表格規範化

想法是使用Kinesis firehose使用COPY命令將數據泵入紅移。但我有一個兩難的位置:我想先查詢使用select查詢從紅移的一些信息,比如下面的一個:

select A, B, C from redshift__table where D='x' and E = 'y'; 

正從紅移必需的信息之後,我將這些信息結合了我的事件通知數據並向kinesis發出請求。然後Kinesis將完成其工作併發出所需的COPY命令。

現在我的問題是,它是一個好主意,因爲這是預期的時間後,我會得到事件通知,每秒鐘重複查詢紅移?

現在我給大家介紹一個替代方案:

如果我歸我的桌子和一些領域分離出來成爲一個單獨的表,然後,我將不得不與標準化設計執行較少的紅移查詢(可每隔30秒)

但是,這種方法的缺點是,一旦我的數據轉化爲紅移,我將不得不執行表連接,同時對我的紅移數據執行實時分析。

所以,我想知道在高水平哪種方法會更好:

  1. 有一個平坦的桌面,但發出來的Kinesis上的事件通知的請求之前進行查詢。在執行分析時,不會有任何表格加入。

  2. 有2個表,查詢紅移次數較少。但是在使用BI /分析工具顯示結果時執行表連接。

您認爲哪2個更好?讓我們假設在任何情況下我都會使用適當的排序鍵/分配鍵。

+0

什麼*確切*你的意思是[「規範化」](https://stackoverflow.com/a/40640962/3404097),一般和這裏?可能「消除1NF」消除「非原子」值?唉:「最好」(1)在提問者定義它之前是沒有意義的,(2)依賴於如此之多的高層次和低層次的細節(用法,實施,資源,成本效益),它必須經驗性地進行測試。 「適當的密鑰分配」是正確的方向。尋求確定「最佳」和2設計,以對您的工作流程和設置進行猜測和測試。 – philipxy

+0

「是不是一個好主意,像每秒說一樣反覆查詢紅移」--Redshift不是OLTP風格的數據庫,因此針對較少的非常大的查詢進行了優化,而不是很多非常小的查詢。您可能會發現在這種情況下的響應時間不夠快,每秒查詢一次。您還需要考慮*併發性*(允許的併發查詢數) - 整個集羣中的最大併發數爲50,因此您的進程幾乎會永久使用其中一個可用插槽。 http://docs.aws.amazon.com/redshift/latest/dg/cm-c-defining-query-queues.html – Nathan

回答

2

我肯定會與你的第二個選項,其中涉及JOINing與查詢。這就是Amazon Redshift擅長的功能(特別是如果您的SORTKEY和DISTKEY設置正確)。

讓流數據以最有效的方式進入Redshift,然後在進行查詢時加入。這樣你的查詢就少了很多。

或者,您可以運行常規作業(例如每小時)將數據批量處理爲寬表格。這取決於加載後需要多快查詢數據。

+0

我也傾向於第二種選擇。我想這是要走的路。所以我接受你的答案。我只是想要一個頭馬。可能我也必須經驗地測試。謝謝! – paratrooper