哪個數據庫適合使用匯總服務提供大型時間序列指標?
我有一個很大的 mysql 表,其中包含大量主題的每日指標。這是假設的模式:
day DATE subject_id INT metric1 metric2 metric3
我想要的是為任意日期範圍找到前 X 個主題(按特定指標)。像這樣的東西:
SELECT subject_id, SUM(metric1) FROM t1 WHERE day BETWEEN '2018-05-01' AND '2018-05-15' GROUP BY subject_id ORDER BY SUM(metric1) DESC LIMIT 10
鑑於該表包含 1000 萬個主題,以及過去 365 天的每日指標,它大約包含 3.6B 行。無論我如何對其進行索引/分區,仍然會有一些場景會使查詢執行很長時間(例如,使用者選擇過去 365 天的時間段)。目標是在幾秒鐘內完成查詢,以便它們可用於實時為儀表板供電。
我試圖使這項工作與 Amazon Aurora (MySql) 一起工作,但沒有設法對其進行優化,使其執行速度幾乎與所需的速度一樣快。
似乎最好的選擇是 BigQuery 和 Athena。不過,我想知道是否有專門針對這個特定案例量身定制的替代方案?
值是否更新,如果更新,多久更新一次?
這是個好問題。我們有許多數據集,其中絕大多數數據是僅附加的。但是,在前 60 天內,很少有較大的數據集會更新 2-3 次。實際修改的數據只有 5%,而 95% 的數據與插入當天保持一致。
Amazon Athena 將是此應用程序的不錯選擇。但是,查詢可能不會在幾秒鐘內完成。因此,解決方案可能是使用 Athena 生成聚合,然後將結果載入到關係數據庫中以支持您的儀表板,AWS Glue 可以幫助處理此數據管道。
要在 Athena 中生成聚合:
您將創建一個 S3 儲存桶:
s3://somebucket/
然後,您將創建格式化為您的分區的標籤:
s3://somebucket/date_partition=YYYY-MM-DD/
> > 目標是在幾秒鐘內完成查詢,以便它們可用於實時為儀表板供電。 > > >
有了這個要求,我可能會在 Athena 中預先計算與數據科學家和業務使用者相關的範圍(過去一年、最後一個月、最後一年等)的聚合,然後將它們寫入關係數據庫。在 AWS 上,Glue對這種數據管道很有用)。如果歷史數據不經常更新(或根本不更新),則此過程可以作為每日批處理過程執行(正如@Michael Kutz 建議的那樣)。
看: