2017-08-11 50 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