2008-09-30 7 views
2

データベースに900x100要素の2D配列を格納することを検討しています。効率的なリコールと配列の比較が重要です。私は[A、x、y、A(x、y)]のようなスキーマを持つテーブルを使用して、単一の配列が90,000のレコードを妥協するようにすることができました。これは、配列を格納する〜ok〜テーブルのようなもので、単一の要素の効率的な呼び出しを提供しますが、配列全体の効率的な呼び出しは非常に効率の悪い配列の比較を行います。2Dデータアレイのリコールと比較のための良好なデータベース設計ですか?

テーブルデザインをこのようにして、コードで配列を作成して比較する必要がありますか?または、データベースのみの操作を使用して効率的な配列比較を行うことができるように、テーブルを構造化するより良い方法がありますか?

おかげ

+0

これは良い計画のようではありません。データベースの大きな比較はあまりうまくいかないでしょう。あなたはこの決定の周りにもう少しコンテキストを置くことができますか? – JeffFoster

+0

この質問は実際に私の友人によって私にもたらされたので、なぜ90,000要素のデータ配列をデータベースに格納しているのか、配列間でどのような比較をしたいのかがわかりません。私は上記のようなシンプルなDBスキーマに傾き、比較はコードによって計算されます。 – LokiPatera

+0

PostgreSQLには配列のサポートがあります。実際の理由がある場合は、アプリケーションコード –

答えて

2

データの種類が許可されている場合は、データを連結形式で格納し、連結解除後にメモリ内で比較します。データベース操作ははるかに高速になり、メモリ内操作はデータベース検索よりも高速になります。

あなたは、連結解除せずに比較することもできます。

+0

配列を直列化バイナリオブジェクト(OLEまたはBLOB)として格納することは、データベース自体の内部に配列を格納する最良の方法のようです。 – LokiPatera

0

900×100の要素は、(要素が唯一の90メガバイトになるだろう巨大な1Kのものであっても)実際には非常に小さいです。必要なときにメモリ内で比較して、シリアライズされた形式でディスクに保存できませんか?

2次元配列をデータベースに格納するのは意味がありません。特に、不変なデータの場合は特にそうです。

+0

でそれを調べる価値があります。この方向に移動するようにクライアントをプッシュします(データファイルのハッシュを保護されたデータベースのテーブルを使用してデータの整合性を確保する)が、質問に対する直接的な回答ではなく、代わりの解決策です。 – LokiPatera

0

私が地震産業で働いていた時、私たちは私たちの配列(通常は数千要素の1d)をバイナリファイルにダンプするだけでした。データベースは、本質的にメタデータ(場所、索引付けなど)のためにのみ使用されます。これはかなり速くなりますが、必要に応じてデータをデカップリングすることもできました。これは通常で、数千の要素はあまり聞こえませんが、典型的なデータセットは簡単に数百GBになる可能性があります。テープにデカップリングする必要がありました。

関連する問題