0

2 次元 double 配列 (行列) の数百万の条件を生成するデータ ソースがあります。次元のサイズは常に変化します (ただし、数学的変換によって状況を単純化し、1 つの次元のみのサイズを変更できるようにすることは可能です)。したがって、このマトリックスのすべての状態をデータベースに保存する必要があります (おおよそのサイズは 10x50 から 10x100 です - 2 番目の次元のサイズは時間とともに変化します)。時間を主キーとして使用すると、何百万ものテーブルを作成する必要があり、それぞれに 10 列と 50 ~ 100 行が含まれます...あまり便利ではありません。行列の状態をより効果的にグループ化する方法はありますか? 私はSQLが初めてです。

4

2 に答える 2

0

次の列を持つテーブルはどうですか:

(id,) 状態番号、行、列、値

于 2013-03-22T10:48:53.057 に答える
0

理論: 重いツール (MySQL など) の使用方法

MySQL は一般的に「重いツール」に分類されます。重いツールはかなり広い範囲の問題を非常にうまく解決しますが、通常、うまくいくこと、うまくいかないこと、またはまったくうまくいかないことに関して、独自の特徴も持っています。すべての重いツールでの課題は、問題と重いツールの特性との間で最も近い一致を見つけ、可能な限り簡単な方法でギャップを埋めることです。ステップ 2 に取り組んでいます。

解決策のステップ 1: あなたとツールの最も近い一致

あなたの特定の問題とMySQLの特性との最も近い一致は、あなたの問題と同じです。次のようなテーブルです。

列:

id dataset_time col1 col2 col3 col4 col5 col6 col7 col8 col9 col10

auto increment: id
primary key: id

解決策のステップ 2: 残りのギャップを埋める

ただし、お気づきのように、マトリックスごとに 1 つのテーブルを作成することは、問題と MySQL が実行できることとの間に残っているギャップを埋める最も簡単な方法ではありません。MySQL は、テーブル名に数値インデックスを使用して何千ものテーブルを作成できますが、その方法は不十分です。

このギャップを埋める最も簡単な方法は、dataset_id という名前の列を 1 つ追加して、テーブルを次のようにすることです。

列:

id dataset_time col1 col2 col3 col4 col5 col6 col7 col8 col9 col10 dataset_id

auto increment: id
primary key: id
non-unique index: dataset_id

データセット ID を手動でインクリメントし、各行と対応する時間に沿って挿入する必要があります。これは、各データセットを時間で識別するよりも堅牢です。

次に、次のようにデータセットを取得できます。

SELECT * FROM matrices WHERE dataset_id=761

MySQL には、数百万行から数十行を取得するための効率的なインデックス作成機能と洗練された構文があるため、非常にうまく機能していると言えます。それがあなたの最適な解決策です。

于 2013-03-22T11:09:14.730 に答える