我有一个时间序列模拟模型,它有10个以上的输入变量 . 不同模拟实例的数量将超过100万,每个模拟实例每天生成一些输出行 .
为了将模拟结果保存在关系数据库中,我设计了这样的表 .
create table SimulationModel(simul_id整数主键,input0字符串/数字,input1字符串/数字,...)创建表SimulationOutput(dt DateTime主键,simul_id整数主键,output0数字,...)
为了使每个模型都是独一无二的,我正在考虑下面的一些方法 .
-
对SimulationModel表的所有输入列设置了唯一约束
-
重新设计SimulationModel表,将输入列分组为2~3列,并对这些分组列设置唯一约束 . (通过制作像“input0_input1_input2”这样的长字符串值)
-
忘记服务器端约束并在应用程序端执行该任务 .
您如何看待这些选择?
在包含数百万行的10多列上使用唯一索引没有问题吗?
还有其他推荐方法吗?
(我可以使用postgresql)
5 回答
您可以创建一个“唯一”列,该列是其他列的哈希值并将其称为标识 .
唯一索引是确保每组输入都是唯一的方法 .
创建unqiue约束 . 有10万行的10列并不是真正的大表 . 此外,您的测试可能会因使用索引而受益 - 或者至少索引不会造成任何伤害 .
我将处理应用程序中的唯一性约束,特别是如果只有一个进程正在创建模拟 . 然后,您可以在常用筛选的输入列上具有一个或多个非唯一索引,以实现高效访问 .
如果为simulationmodel创建两个表,如下所示:
然后你可以放一个约束(simulationmodel_id,input),但获取配置的查询更复杂 .