2011-03-15 95 views
3

我想在关系数据库(MySQL或SQLite)中存储分层的二维科学数据集。每个数据集都包含一个包含任意数量列的数字数据表。另外,每个数据集可以有一个或多个与其表中给定行相关联的相同类型的子元素。每个数据集通常具有1到100列和1到1.000.000行。数据库应该能够处理多个数据集(> 1000),并且数据的读取/写入应该相当快。在关系数据库中存储科学数据

什么是最好的DB模式来存储这种类型的数据?拥有一个带有单个数据集的名称,ID和关系的“主表”是否合理?另外每个数据集包含一个包含数值的表格?

+0

什么是“二维表...有任意数量的列”?你为什么不在这里显示一些代码? – 2011-03-15 17:03:30

+0

你想优化什么?您想通过使用关系数据库获得什么好处? – CookieOfFortune 2011-03-15 17:09:13

+0

一个主要目标是能够从不同的进程/计算机同时访问数据(例如,在测量时可视化一组数据)。 – ThePhysicist 2011-03-15 17:20:38

回答

4

是否合理有一个“主”表的名称,ID和个人数据集的关系,并在每包含的数值数据集除了一个表?

这就是我该怎么做的。

我不确定'任意列'是如何工作的,因为数据通常不会像那样工作。无论如何,它听起来像将它存储为row,col,val可能很好地工作。老实说,如果你不需要搜索它(最大值,最小值等),使用某种平面文件可能会更好。

另一个可能感兴趣的设置是使用SQLite,每个数据集都有一个单独的数据库文件,另外还有一个主文件夹。

无论你选择什么,它的工作效果都取决于你将如何处理数据。

3

我想,你最终会失去对性能的灵活性。 你可以硬编码你的数据库模式,这听起来像你想避免,但会给你最好的性能,或

离开模式确定在运行时,存储在'主'表,这增加了你的灵活性,但会降低您执行参照完整性和设置数据类型的能力。

有一段时间,你可以尝试两种方法,直到你有足够的信息,哪些会更好地执行你的任务。

2

如果不理解问题域就很难具体,但如果数据本质上是关系型的,则使用关系模型。如果你的数据不是固有的关系数据,我不会试图强迫它进入关系模型 - 所有数据集碰巧都有一个ID并不意味着这些ID是相同的。或者甚至它们适合用作主键。

我建议先将每个数据集放在它自己的表中(或者如果有子记录的话),然后根据需要创建一个主表。

我会分享zebediah49的问题:“你真的要为此使用数据库吗?平面文件不会更好吗?”

2

我们在他们自己的平面文件中存储了一堆这样的数据。文件头包含足够的信息(时间戳,行数/列数等),以便读取它。然后关于这个数据的元信息在数据库中。至少这是文件位置,但可能包含有关数据的其他信息。例如,我们将数据汇总到代理变量中,以高层次总结详细信息。通常情况下,这个汇总数据是足够好的,但是在必要时我们可以读取文件中的所有细节。