簡體   English   中英

Postgres 通過應用交叉表定期將數據從一個表復制到另一個表

[英]Postgres copy data from one table to another periodically by applying crosstab

考慮我有一個網絡應用程序,其中我顯示來自傳感器數據傳感器的當前數據值。 假設我們有 2 個傳感器,傳感器 A 和傳感器 B,ids 值分別為 1,2 假設我們有 2 個標簽,每個標簽有溫度和濕度。

我已經配置了一個 Nodejs 應用程序,以每 500 毫秒從傳感器中提取數據,並將數據推送到 postgres 表“data_live”中,如下所示。

sensor_id |tag          |value       
----------+-------------+------------
         1|temperature  |0.006817675 
         1|humidity     |0.002902401 
         2|temperature  |33          
         2|humidity     |28         

筆記。 在這里,在“data_live”表中,我們只保留每台機器/標簽的當前值,所以每次推送更新時,我們都會對數據庫進行更新操作。

我想使用下表中名為“data_ts”的時間尺度擴展以時間序列方式記錄歷史。

time                         |machine_id|temperature|humidity
-----------------------------+----------+-----------+--------
2022-04-09 14:19:01.000 +0530|         1|       20.2|    55.3
2022-04-09 14:19:01.000 +0530|         2|       19.7|    50.1
2022-04-09 14:19:02.000 +0530|         1|       20.3|    55.4
2022-04-09 14:19:02.000 +0530|         2|       19.6|    50.0

我正在考慮使用基於 cron 的調度程序定期運行腳本以執行以下步驟:

  1. 從表中獲取數據:“data_live”
  2. 應用交叉表(將表格結構轉換為柱狀結構)功能
  3. 將列數據插入表“data_ts”

這種方法的限制是我不能每 500 毫秒執行一次 cron 調度程序。 傳感器可以達到 100+,標簽可以達到 50+,所以我們還必須考慮規模。

誰能在這里給我建議解決方案? 如果您需要更多信息,請告訴我。 提前致謝。

如果你希望解決方案在 PG 中是自包含的,cron 選項是有效的。 但是,由於您稱之為規模問題,我建議您也開始考慮數據保留。 例如,您希望將數據保留多長時間,並有另一個定期清理舊條目的作業。

如果您想擴展技術視野,有許多替代解決方案,其中一些已由@webdev_jj 的評論確定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM