我每天有大約10億次事件。我需要將這些事件存儲在過去30天的數據庫中,因此大約有300億行。存儲時間序列數據的簡單方法
假設它是運動員數據庫,每排只有4列(運動員名字,運動員紀律,運動員等級,日期)。我只需要通過運動員姓名和日期來檢索數據。例如,爲特定運動員製作過去30天的圖形。
起初我用谷歌大查詢,這是偉大的工具,非常便宜,每天分片開箱和線性可擴展性,但具有一些缺點。查詢30億張桌子大概需要5秒,對我來說太多了。當插入數據時,它會出現在「數據流緩衝區」中,並且無法查詢一段時間(大約5-10分鐘)
另一種方法使用Postgres並將所有數據存儲在具有適當索引的一個表中。此外,我可以使用每日分片(在一天開始時自動創建新表)但我擔心Postgres是否可以處理數十億行。另外,如果我想獲取最近30天的歷史數據,那麼在以這種方式對數據進行分片時,必須進行30次SELECT查詢。
我不想打擾像Cassandra這樣的過於複雜的解決方案(儘管從來沒有嘗試過)。另外我不認爲我會從使用面向列的數據庫中獲得任何好處,因爲我只有4列。
尋找類似於Big Query的東西,但沒有提到缺點。我認爲數據可以存儲在一個節點中。
您不需要30次選擇查詢最近30天。如果查詢總是30天,那麼無論如何您都不需要進行分區。在這種情況下唯一的優點是可以用一個簡單的「drop table」丟棄前一天。我不確定你瞭解Postgresql的分區。 –
最好的解決方案取決於完整的情況和確切的要求。每日分區*可能會有用。 –
@ClodoaldoNeto我的意思是30個選擇查詢,當我沒有分區手動創建表。我需要查詢1到30天的範圍。 – user12384512