我正在考虑使用hstore以键值格式存储这些数据.假设单个产品的所有时间序列数据都可以存储在单个hstore对象中.我需要能够按特定时间查询这些数据,比如在给定时间产品的价值是多少?还需要运行简单的查询,例如检索产品成本超过100美元的时间.
我打算有一个包含产品ID列和hstore列的表.但我不清楚如何使这项工作:
> hstore列需要从csv中存在的数千个时间戳记,值记录中加载.每当我们得到一个新的csv时,都应该附加hstore.
>该表需要存储productId和相应的Timeseries数据.
你能告诉我们使用hstore是否有帮助?如果是,那么如何从csv加载数据,如上所述.此外,如果对hstore中的插入/更新的性能有任何影响,随着数据的增长,请分享您的经验.
CREATE TABLE product_data ( product TEXT,-- I'm making an assumption about the types of your columns time TIMESTAMP,value DOUBLE PRECISION,PRIMARY KEY (product,time); );
我肯定会记住hstore和类似的选项,如果你的数据变得足够大,效率更重要,更简单.但请注意,所有选项都有效率权衡.
你知道你要支持多少数据吗?产品数量,每种产品的不同时间戳数量?
您还想要运行哪些其他查询?如果产品具有许多不同的时间戳,那么单个产品成本超过100美元的时间的查询将受益于(产品,价值)的索引.
其他选择
如果要在一行中存储一组任意键值对,则hstore最有用.您可以在此处使用它,每个产品都有一行,并且该产品的每个不同时间戳都是产品表中的键.缺点是hstore中的键和值是文本,而键是时间戳,而您的值是某种数字.因此,型式检查会有一定程度的减少,并且所需的铸造成本会有所增加.另一个可能的缺点是,hstore上的某些查询可能不会非常有效地使用索引.上面的表可以使用简单的btree索引进行范围查询(假设您想要提取产品的两个日期之间的值).但是hstore索引更加有限;您可以在hstore列上使用gist或gin索引来查找具有特定键的所有行.
另一个选项(我已经玩过并实验性地用于我的一些数据库)是数组.基本上,每个产品都有一个值数组,每个时间戳都映射到数组中的索引.如果时间戳完全正常,这很容易.例如,如果您的所有产品每天每小时都有一个值,您可以使用如下表格:
CREATE TABLE product_data ( product TEXT,day DATE,values DOUBLE PRECISION[],-- An array from 0 to 23. PRIMARY KEY (product,day); );
您可以构建视图和索引,以便轻松查询此表. (我在http://ejrh.wordpress.com/2011/03/20/vector-denormalisation-in-postgresql/写了一篇关于这种技术的博客文章.)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。