我在一个涉及时间序列分析的项目中,我需要能够让用户上传包含自己的时间序列(即带日期的数字)的文件,例如在.csv文件中。然后可以随时访问其文件中包含的数据,以在我们的系统中使用。
我该怎么办?
我考虑过的想法:
我一直在读,拥有不同数量的表是一个不好的习惯(我相信)。但是,我的情况与我在此站点上看到的其他问题略有不同(大多数人似乎想为每个用户创建一个表,而他们应该为每个用户创建一行)。
一些其他信息:
编辑
阅读一些答案后,我意识到我可能做得不好,我应该说我显然已经在SQL环境中发展。我已经有一个用户表;当我写“表”时,我的意思是“关系”。我所有的4个想法都在某处涉及外键;除非有其他更好的方法,否则RDBMS规范化是范式。 (这一切都不意味着我反对非SQL解决方案)。
最佳答案
我将不得不使用“大胖怪物表”。关系数据库的工作方式是这样的,尽管您应该对其进行规范化(为用户创建一个表,为数据集创建另一个表,为数据点创建另一个表)。从多个角度来看,拥有多个具有相同模式的表是一个坏主意-设计,管理,安全性甚至查询;您确定您永远都不想合并来自两个数据集的信息吗?
如果您确实确定每个数据集都将完全隔离,那么您也可以考虑完全不使用SQL。 HDF(分层数据格式)实际上是为实现此特定目的而构建的,可以有效地存储和检索“科学数据集”,而“科学数据集”通常是时间序列数据。 HDF中的“表”在字面上称为数据集,它们可以共享定义,可以是多维的(例如,一天一维,一次一维),并且它们比SQL表便宜得多。
我通常不会试图使人们远离SQL,但是异常情况有时需要异常解决方案。如果要在一个SQL表(或更多表)中包含数十亿行,而实际上没有其他数据要存储,那么SQL可能不是适合您的解决方案。