数据库设计用于同一类型的多个表

时间:2016-02-15 11:25:31

标签: mysql mongodb database

我有一种情况,我希望以数据库格式存储大约1 TB的信息以支持查询。在数据库设计方面我没有经验,这也是我想问如何正确地做到这一点的部分原因。

我们有一个测试套件,可以为每个状态更新生成多组信息字段。每个州更新大约400个单独的64位信息字段,我们希望保留大约4亿个信息。问题是我们正在从大约1600台机器上接收信息更新。

一个有用的(对我们来说)数据库查询,格式为“我看过这个字段有值X,而早期有5个状态更新,同一个字段的值是Y吗?”

我最初的理解是在数据库中实现这一点,每个状态更新都按顺序存储(每台机器约250k个状态)。但是,这将生成1600个相同的表,每个表大约250k行。

是否有一些我还不了解的设计方法?我觉得拥有1600个表是一个理想的特性,因为这感觉就像查询可以并行运行的东西?

总结一下:鉴于多个相同的机器运行稍微不同的测试,并且我必须存储它们已经存在的最后250k - 1M状态滴答,我应该如何设计数据库?我目前的想法是每次测试创建一个表,其中每一行代表T,T + 1,T + 2等时的状态。

这是最佳的吗?还是有比这样设计更好的方法?我的查询需要多长时间才能获得每个约250k-1M条目的1500-3000个表(因为我想查询整个数据集?)我可以使用不同的方法获得更好的结果吗?

1500次测试,每个状态勾选存储400个64位变量。每次测试250k到1M状态滴答,我希望能够快速有效地存储和查询整个数据集。什么是最好的方法?

1 个答案:

答案 0 :(得分:1)

我总是更喜欢单个表/集合,每个测试步骤都应该通过测试ID和步骤ID来识别。例如:

MySQL(非规范化)

步骤

id  test        step        data
1   "Host_Test" "Step01"    [serialized data]

MySQL(标准化(部分))

步骤

id  test        step
1   "Host_Test" "Step01"

stepdetails

step_id data_key    data_value
1       "key"       "value"

<强> MongoDB的

{
    _id : "1",
    test : "Host_Test",
    step : "Step01",
    data : {
        key1 : value1,
        key2 : value2
    }
}

然后,您可以通过测试标识符识别每次测试的数据。

如果您在内存中进行测试,将数据存储到数据库/光盘将始终是您的主要弱点。写一个大桌子/收藏品不是主要观点。