【发布时间】:2011-12-19 12:09:52
【问题描述】:
我正在进行一个涉及时间序列分析的项目,我需要能够让用户上传包含他们自己的时间序列(即带日期的数字)的文件,例如 .csv 文件。然后可以随时访问他们文件中包含的数据,以便在我们的系统中使用。
我怎么能这样做? 我想过的想法:
- 每次用户上传文件时创建一个表(并将该表的名称保存在某处)。如果我有很多用户上传大量数据,我最终可能会得到大量表格。
- 创建一个大胖怪物表,基本上三四列:值的日期;价值;数据集名称(和/或数据集的所有者)。所有内容都上传到该表中,当 Bob 需要它的天气数据时,我只需选择 (date,value),其中 owner = Bob 和 datasetname = weatherdata。
- 在两种解决方案之间:每个用户一张表,并且 Bob 的所有数据集都在 Bob 的表中。
- 完全不同:只需将 .csv 文件保存在某处,并在需要时阅读。
我一直在阅读,拥有不同数量的表格是一种不好的做法(我相信这一点)。但是,我的情况与我在此站点上看到的其他问题略有不同(大多数人似乎希望为每个用户创建一个表,而他们应该为每个用户创建一行)。
一些附加信息:
- 时间序列数据可能包含数十万甚至数百万的观测值
- 先验,保存后的数据不应被修改。不过,我想让用户将新数据附加到他们的时间序列中会很有用。
- 先验,我不需要执行复杂的 SQL 选择语句。我只想阅读 Bob 的天气数据,我可能会按时间顺序使用它 - 尽管你永远不知道明天会发生什么。
- 使用 PostgreSQL 9.1,如果这很重要的话。
编辑 阅读了一些答案,我意识到我可能没有很好地完成我的工作,我应该说我显然已经在 SQL 环境中发展了;我已经有一个用户表;当我写“表”时,我真正的意思是“关系”;我所有的 4 个想法都在某处涉及外键;除非有更好的方法,否则 RDBMS 规范化是范例。 (这一切并不意味着我反对非 sql 解决方案)。
【问题讨论】:
-
PostgreSQL 可能很重要的一个原因是 Postgres 的分区方法 (postgresql.org/docs/9.1/static/ddl-partitioning.html) 本质上包括显式创建多个表并将它们合并到一个视图中——这可能是明显不如其他一些 SQL 的方法有用。但是,我没有在 PostgreSQL 中进行分区的直接经验。
-
我不会说 4 个相关的表会自动引导一个关系数据库解决方案。相信我,我通常是last people to board the nosql train 中的一员,并且在此之前曾断言relational databases can scale well into the terabytes。但那些是在谈论复杂的业务系统;如果您有一个非常有限的系统,不需要隔离(或内在隔离),那么您不需要 RDBMS。
标签: sql database database-design