[英]Recording real-time sensor data in to RDBMS with user defined events
我有一個由兩個主要組件,傳感器和觸發器組成的系統。
該系統負責記錄從傳感器發送的信息,並向用戶報告某些觸發器處於活動或不活動狀態的時間。
有關傳感器的一些信息:
觸發條件:
傳感器在許多基礎上分配給觸發器。
我遇到的問題與跟蹤“何時”觸發器變為活動狀態或非活動狀態有關。
例如,對於觸發檢查值> 1
sensor_id | reading | value | trigger_value
1 2011-04-25T20:09:00 0 false
1 2011-04-25T20:11:00 1 false
1 2011-04-25T20:13:00 4 true
1 2011-04-25T20:15:00 5 true
1 2011-04-25T20:17:00 3 true
1 2011-04-25T20:19:00 6 true
1 2011-04-25T20:21:00 1 false
它可能會返回:
sensor_id | reading | event
1 2011-04-25T20:13:00 1 -- 'went active'
1 2011-04-25T20:21:00 0 -- 'went in-active'
我當前的方法涉及為每個傳感器記錄一組觸發器的當前狀態。 當傳感器的下一個輸入輸入並評估觸發器時,它將與該傳感器的當前觸發器狀態列表進行比較。 對於每個狀態變化,都會記錄“激活”或“取消激活”。
這種方法非常簡單,但是它生成有關狀態更改的數據,該狀態更改已在數據庫中“存在”。 但是,數據不在單個元組中,而是位於元組之間的關系中(在同一表中)。
因此,問題是:
我是否因為數據已經“存在”而改變了我的方法? 通過更改模式以減少對元組之間關系的依賴,或創建視圖/存儲的過程來分析它
要么
我是否繼續使用該系統,因為它解決了問題並且掩蓋了同一表中元組之間存在時間關系的事實(我知道這是不好的)。
以更一般的形式:
如何在表中存儲基於時間的統計信息/數據,以及如何在不破壞RDBMS的情況下分析連續統計信息之間的差異。
當前實現結構示例:
-- log incoming sensor data, keyed by sensor and when it was recorded
create table sensor_log (
sensor_id integer references sensors (sensor_id),
reading timestamp,
data_point_a integer NOT NULL, -- example name only
data_point_b integer NOT NULL,
-- ... various other data points
primary key(sensor_id, reading)
);
-- data storage for trigger configuration
create table triggers (
trigger_id integer,
-- ... configuration for the triggers
primary key(trigger_id)
);
-- associate triggers with particular sensors on a many to many basis
create table sensor_triggers (
sensor_id integer references sensors (sensor_id),
trigger_id integer references triggers (trigger_id),
-- ... configuration for the triggers
primary key(sensor_id, trigger_id)
);
-- record which triggers were active for a particular sensor input
-- not necessary, unless to save on recomputing past trigger activations
create table sensor_trigger_activations (
sensor_id integer,
reading timestamp,
trigger_id integer references triggers (trigger_id),
primary key (sensor_id, reading, trigger_id),
foreign key (sensor_id, reading) references sensor_log (sensor_id, reading)
);
-- record trigger 'activations' & 'deactivations'
-- activation: active state preceded by in-active state (for a particular trigger)
-- deactivation: in-active state preceded by an active state ""
-- absense
create table sensor_trigger_events (
sensor_id integer,
reading timestamp,
trigger_id integer,
event_type smallint CHECK (event_type = 0 OR event_type = 1), -- 0 = deactivation, 1 = activation
primary_key (sensor_id, reading, trigger_id),
foreign key (sensor_id, reading) references sensor_log (sensor_id, reading)
);
首先,我認為同一張表中元組之間的時間關系不一定很糟糕。 它不是直接的,所以可以隱藏它。
鑒於您的要求,我真的看不到有什么可以改善的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.