【问题标题】:Looking for a scalable database solution寻找可扩展的数据库解决方案
【发布时间】:2016-07-13 16:45:51
【问题描述】:

在我工作的物理实验室中,在每个实验开始时(我们每分钟运行几次),我们会执行一系列插入 MariaDB 数据库的操作。其中一个表有几百列——每列对应一个命名变量——并用作该运行期间使用的参数的日志。例如,一个变量是实验特定步骤中使用的激光功率。

随着时间的推移,实验者会添加新变量来参数化实验的新步骤。最初我的代码通过简单地向表中添加新列来处理这个问题 - 但随着表中的行数增加到超过 60000 左右,添加列所花费的时间变得非常长(超过一分钟)。

目前,我已经通过预先定义了几百个额外的列来规避这个问题,这些列可以重命名为需要新的变量。然而,以添加变量的速度,这只会持续我们的实验室(或使用该软件的其他实验室)几年,然后才需要进行表维护。我想知道是否有人可以推荐一种不同的架构或不同的平台来为这个“列数”问题提供自然的解决方案。

【问题讨论】:

  • 现在你会让数据库设计者在研讨会上假设物理理论吗?不!那你为什么要让一个非常优秀的物理学家(我假设)设计一个数据库。找一个了解手头任务的人并获得适当的帮助。数据库设计并非易事
  • 我想知道是否有人可以推荐不同的架构除非你知道不仅仅是关于如何使用它,它的用途是什么,以及如何再次需要它的信息。老实说,获得一些专业帮助
  • 虽然我很欣赏这些建议,但我需要强调的是,我们研究风格的性质(即我们的预算和我们的快速研究步伐)几乎所有东西都是 DIY。我们不假装自己是数据库设计师,就像我们假装是电气工程师一样,但无论如何,在这种情况下,我们都需要一个小规模的内部解决方案。

标签: mysql


【解决方案1】:

我猜您正在运行各种不同类型的实验,这就是为什么您需要越来越多的变量?如果是这种情况,您可能需要考虑:

  • 为每种类型的实验提供单独的表格,
  • 单独的表来保存每个实验类型的参数值(引用主表中的实验),
  • 有一个更简单的“实验参数”表,其中包含 3 个(或更多,取决于值的复杂性)引用:实验、参数和参数值。

我的偏好是前两个选项之一,第三个往往会使数据更复杂,分析和维护,而不是灵活性值得。

【讨论】:

  • 我很喜欢你的第三个建议,出于某种原因,我没有想到它,尽管我们的其他一些表也是这样工作的。感谢您的意见。
【解决方案2】:

似乎EAV 最适合您的方案。我总是会避开它,但在这种情况下,它似乎是有道理的。我会将最后的n 数据实验保留在主表中,并将其他的数据放到存档表中。您自然会知道归档目前不需要的数据的速度会提高,但始终可以连接到更大的表。

有关 EAV 的介绍,请参阅 Rick James 的 web ddocument(stackoverflow User)。另外,请访问堆栈上的问题here

每次我看到 EAV 时,我都想知道为什么世界上会有人使用它来编程。但只是想象一下你必须工作的学术/实验/临时环境,我不禁认为它可能是最适合你的环境。以下是题为Should I use EAV model?的高级探索性问题。

【讨论】:

    猜你喜欢
    • 2016-03-01
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2017-07-27
    • 2022-11-10
    相关资源
    最近更新 更多