0

10個を超える入力変数を持つ時系列シミュレーションモデルがあります。個別のシミュレーションインスタンスの数は100万を超え、各シミュレーションインスタンスは毎日いくつかの出力行を生成します。

シミュレーション結果をリレーショナルデータベースに保存するために、私はこのようなテーブルを設計しました。

テーブルSimulationModelを作成します(

simul_id整数主キー、

input0文字列/数値、

input1文字列/数値、

...)

テーブルSimulationOutputを作成します(

dt DateTime主キー、

simul_id整数主キー、

output0数値、

...)

各モデルをユニークにするために、以下のような方法を検討しています。

  1. SimulationModelテーブルのすべての入力列に一意性制約を設定します

  2. SimulationModelテーブルを再設計して、入力列を2〜3列にグループ化し、これらのグループ化された列に一意の制約を設定します。(「input0_input1_input2」のような長い文字列値を作成することによって)

  3. サーバー側の制約を忘れて、アプリケーション側で仕事をしてください。

これらのオプションについてどう思いますか?

数百万行の10列以上で一意のインデックスを使用しても問題はありませんか?

他に推奨する方法はありますか?

(私はpostgresqlを使用するかもしれません)

4

5 に答える 5

1

unqiue制約を作成します。数百万行の10列は、実際には大きなテーブルではありません。また、テストでは、インデックスを使用することでおそらくメリットが得られます。または、少なくともインデックスが害を及ぼすことはありません。

于 2010-06-09T20:56:27.910 に答える
1

他の列のハッシュである単一の「一意の」列を作成し、それをIDと呼ぶことができます。

于 2010-06-09T20:59:07.713 に答える
1

このようにsimulationmodel用に2つのテーブルを作成する場合:

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

特にシミュレーションを作成しているプロセスが1つだけの場合は、アプリケーションで一意性の制約を処理します。次に、効率的なアクセスのために、一般的にフィルタリングされた入力列に1つ以上の一意でないインデックスを設定できます。

于 2010-06-11T15:11:25.567 に答える