2017-12-27 530 views
0

我期待實現時間序列數據庫,並且我已經通過數據庫的各種選項來使用,但是因爲我不是那種我選擇的知識與PostgreSQL,因爲我有點熟悉使用它與Django(特別是由於ORM)。PostgreSQL中的時間序列有很大的查詢需求

這個想法是存儲4列數據的時間序列(索引除了價格以外)。

timestamp | id | item | price 

我正在尋找添加這些每分鐘,大約1500數據點是批量插入每分鐘。一個月後,我不再需要它們具體到分鐘,每天只需要一個就足夠了(在00:00)。

我正確地認爲PostgreSQL應該做得很好嗎?這將由後端服務,並且需要非常低的延遲(300 ms往返)。

我的主要問題在於理解PostgreSQL是否能夠有效地返回數據,即使在給定需求時,例如項目範圍,開始和結束時間戳以及請求數據的時間間隔(無需返回所有內容並手動過濾)。

如果我的表包含下列數據的單個項目:

timestamp | id | item | price 
1514391000 01 foo  10 
1514391100 02 foo  20 
1514391200 03 foo  30 
.......... .. ...  .. 
1514392000 11 foo  20 
1514393000 21 foo  20 

我希望能夠請求start: 1514391000end: 1514392000step: 200,那麼我會希望得到6個結果回來了(1000, 1200,1400,1600,1800和2000)。 PostgreSQL能以高效的方式實現這種功能嗎?

我能想到的唯一的事情是插入我的時間序列時,我確保他們的值四捨五入到最接近的分鐘,然後我確切地知道要過濾的時間戳而不需要搜索數據庫。

我也想知道是否有可能搜索'最近的時間戳'爲一個給定的項目,相同的情況。所有這些似乎都可以通過巧妙的時間戳輸入來解決,但我不確定這是否可行。

+0

你評價過[Timescale DB](https://www.timescale.com/)嗎?它由Postgres構建,以時間序列數據爲主要目標。我的公司測試了它的早期版本,發現它對於時間序列查詢非常靈活,但我們的要求發生了變化,所以我們最終選擇了[Citus](https://www.citusdata.com)。 – bma

+0

很酷,我完全錯過了(正在看InfluxDB和類似的東西)。我想知道Timescale數據庫是否可以很好地與Django的ORM配合使用,我不介意額外的自定義SQL用於其他任務。我還打算使用這個數據庫來處理一些關係問題(指標之外)。 – sof2er

+0

如果Django不能很好地工作,我會感到很驚訝,因爲它是Postgresql的核心,並且爲了優化時間序列而進行了額外的工作。我最初的要求包括非時間序列報告,並且工作正常(基本上充當普通Postgres服務器)。請注意,我的測試在最大的表中只有80億行,所以我不能聲稱已經測試了幾十兆兆字節的數據。 – bma

回答

0

我會建議有一個時間戳開始和時間戳結束列。然後你可以隨時找到匹配的行。

我在考慮雙表解決方案,一個用於更新的數據,一個用於舊數據。

你也應該劃分你最近的表格,也許白天。這將使您可以更有效地管理舊數據 - 一次只丟棄一天(或一週或一個月)的數據。

然後,每天(或一週或一個月),將較舊的數據彙總到要存檔的記錄中。您可以從較新的數據中刪除分區。

您可以交換存檔分區或使用視圖來合併它們。