在我工作的物理实验室中,在每个实验开始时(我们每分钟运行几次),我们在MariaDB数据库中执行一系列插入。其中一个表有几百列 - 每个列对应一个命名变量 - 并作为该运行期间使用的参数的日志。例如,一个变量是在实验的特定步骤中使用的激光功率。
随着时间的推移,实验者会添加新变量来参数化实验的新步骤。最初我的代码通过简单地向表中添加新列来处理这个问题 - 但随着表中的行数增加到大约60000以上,添加列所花费的时间变得非常长(超过一分钟)。
目前,我已经通过预先定义几百个额外的列来规避问题,这些列可以重命名为需要新的变量。但是,按照添加变量的速率,这只需要在需要进行表维护的几年后才能使用我们的实验室(或使用该软件的其他实验室)。我想知道是否有人可以推荐一个不同的架构或不同的平台,为这个“列数”问题提供一个自然的解决方案。
答案 0 :(得分:1)
我猜你正在运行各种不同类型的实验,这就是为什么你需要越来越多的变量?如果是这种情况,您可能需要考虑:
我倾向于前两个选项中的一个,第三个选项倾向于使数据更复杂,分析和维护,而不是灵活性。
答案 1 :(得分:1)
EAV似乎最适合您的情况。我总是避开它,但在这种情况下它似乎有道理。我会在主表中保留最后n
次数据实验,并将其他数据与实际表格保存在一起。当然,你会知道目前不需要存档的数据的速度增加,但总是可以连接到更大的表。
有关EAV的介绍,请参阅Rick James的web ddocument(stackoverflow User)。另外,请访问堆栈here上提供的问题。
每当我看到EAV时,我想知道为什么世界上任何人都会用它来编程。但是想象一下你必须参与的学术/实验/临时环境,我不禁想到它可能是你最好的环境。以下是题为Should I use EAV model?的高级探索性问题。