2017-08-11 80 views
0

比方說,我們需要存儲溫度傳感器的讀數並保存每天的歷史記錄。每個度量都是一個元組day: number, value: string(有些日子可能會錯過,這就是爲什麼我們需要明確存儲這一天)。有成千上萬的傳感器。PostgreSQL中的商店歷史記錄

添加新測量不應該要求重新讀取和重新寫入整個對象,應該是小增量加法

而且,同一天可能有多個閱讀。在這種情況下,如果日期相同,那麼只應保留當天的最新測量值

應該使用什麼數據結構?我可以看到以下幾種方式:

CREATE TABLE sensor_history (
    sensor_id integer, 
    time  integer[], 
    value  text[] 
); 

CREATE TABLE sensor_history (
    sensor_id integer, 
    history json/jsonb/hstore 
); 
+1

無論設計如何,您都將儲存大量信息。你有沒有考慮過使用NoSQL? –

+0

是的,我看到您關於NoSQL的觀點,但出於其他一些原因,在這種情況下,PostgreSQL將是更好的選擇。 –

+0

這取決於你打算如何處理數據。如果您不需要RDBMS功能的日誌,那麼NoSQL數據存儲變得更具吸引力。 –

回答

1

爲什麼不只是存儲每個元組的一列?例如

CREATE TABLE sensor_history (
    sensor_id integer, 
    time  integer, 
    value  text 
); 
+0

嗯,也許。但它會有效嗎?如果我們有100萬個傳感器,1個月後將有300萬個歷史記錄,並且在1年後將有360萬個傳感器。 –

+1

以什麼方式高效?我曾與數據庫中有數十億行的表格沒有問題。只要您不試圖運行將執行全表掃描的查詢,就沒有太多問題。例如,將一個索引放在'sensor_id'上將阻止從特定傳感器加載數據的全面掃描。 – wmorrell