我想在关系数据库(MySQL或SQLite)中存储分层的二维科学数据集。每个数据集包含一个具有任意列数的数值数据表。此外,每个数据集可以有一个或多个与其表的给定行关联的相同类型的子项。每个数据集通常具有1到100列以及1到1.000.000行。数据库应该能够处理许多数据集(> 1000),并且读取/写入数据应该相当快。
存储此类数据的最佳数据库架构是什么?拥有一个包含各个数据集的名称,ID和关系的“主”表以及每个包含数值的数据集的表是否合理?
答案 0 :(得分:4)
拥有一个包含各个数据集的名称,ID和关系的“主”表是否合理,另外每个数据集包含一个包含数值的表?
我就是这样做的。
我不确定'任意列'是如何工作的,因为数据通常不会那样工作。无论如何,它听起来像存储行,col,val可能很好地工作。
老实说,如果你不需要搜索它(最大,最小等),最好使用某种平面文件。
可能有趣的另一种设置是使用SQLite,每个数据集都有一个单独的数据库文件,另外还有一个主数据库文件。
无论你选择什么,它的效果究竟取决于你将如何处理数据。
答案 1 :(得分:3)
我认为你最终会牺牲性能的灵活性。 您可以对数据库架构进行硬编码,这听起来像是您想要避免的,但会为您提供最佳性能,或者
保留在运行时确定的模式,存储在“主”表中,这会增加您的灵活性,但会降低您实施参照完整性和设置数据类型的能力。
一段时间之后,你可以尝试这两种方法,直到你有足够的信息来说明哪种方法对你的任务有更好的效果。
答案 2 :(得分:2)
如果不了解问题域很难具体,但如果您的数据本质上是关系型的,请使用关系模型。如果你的数据本身并不是关系型的,那么我不会试图将它强制成关系模型 - 事实上所有数据集碰巧都有ID并不意味着这些ID是相同的。或者甚至它们适合用作主键。
我建议首先将每个数据集放在自己的表中(如果有子记录,则为表),并在需要时创建主表。
我会分享zebediah49的问题“你真的要使用数据库吗?平面文件不会更好吗?”
答案 3 :(得分:2)
我们将这样的一堆数据存储在他们自己的平面文件中。该文件的标题包含足够的信息(时间戳,行/列数......等),以便可以读取它。然后,数据库中包含有关此数据的元信息。这至少是文件位置,但可能包含有关数据的其他信息。例如,我们将数据聚合到代理变量中,以高级别汇总细节。通常,此摘要数据足够好,但在必要时,我们可以读取文件以获取所有详细信息。