0

我有一个时间序列仿真模型,它有 10 多个输入变量。不同的模拟实例的数量将超过 100 万个,每个模拟实例每天都会生成一些输出行。

为了将模拟结果保存在关系数据库中,我设计了这样的表。

创建表 SimulationModel (

simul_id 整数主键,

input0 字符串/数字,

input1 字符串/数字,

...)

创建表 SimulationOutput (

dt 日期时间主键,

simul_id 整数主键,

输出0数字,

...)

为了使每个模型都独一无二,我正在考虑以下一些方法。

  1. 对 SimulationModel 表的所有输入列设置唯一约束

  2. 重新设计 SimulationModel 表,将输入列分组为 2~3 列,并对这些分组列设置唯一约束。(通过制作像“input0_input1_input2”这样的长字符串值)

  3. 忘记服务器端约束并在应用程序端完成工作。

您如何看待这些选项?

对 10 多列数百万行使用唯一索引没有问题吗?

有其他方法可以推荐吗?

(我可能会使用 postgresql)

4

5 回答 5

1

创建唯一约束。具有几百万行的 10 列并不是真正的大表。此外,您的测试可能会受益于使用索引 - 或者至少索引不会造成任何伤害。

于 2010-06-09T20:56:27.910 回答
1

您可以创建一个“唯一”列,它是其他列的哈希,并将其称为标识。

于 2010-06-09T20:59:07.713 回答
1

如果您像这样为您的仿真模型创建两个表:

Table SimulationModel {
id: integer,
...
}

Table SimulationModelInput {
simulationmodel_id: integer foreign key(SimulationModel.id),
input: string or numeric,
...
}

然后您可以在 (simulationmodel_id, input) 上放置一个约束,但获取配置的查询更复杂。

于 2010-06-09T10:00:47.297 回答
1

唯一索引是确保每组输入都是唯一的方法。

于 2010-06-09T10:04:55.950 回答
1

我会处理应用程序中的唯一性约束,特别是如果只有一个进程正在创建模拟。然后,您可以在通常过滤的输入列上拥有一个或多个非唯一索引,以实现高效访问。

于 2010-06-11T15:11:25.567 回答