2

巨大な CSV データセット (PostgreSQL の COPY を使用して Eclipse のフィルター処理された使用状況データ) をロードしましたが、正規化されていないため、膨大な量のスペースが必要です: TEXT 列の 3 つが、メインから参照されるように別々のテーブルにリファクタリングされ、はるかに効率的です。外部キー列を持つテーブル。

私の質問は、すべてのデータをロードした後にデータベースをリファクタリングする方が速いですか、それともすべての制約を使用して目的のテーブルを作成してからデータをロードする方が速いですか? 前者は巨大なテーブル (10^9 行近く) を繰り返しスキャンする必要があり、後者は CSV 行ごとに複数のクエリを実行する必要があります (たとえば、このアクション タイプは以前に見られたことがありますか? そうでない場合は、アクション テーブルに追加して、そのID、正しいアクション ID を使用してメイン テーブルに行を作成するなど)。

現在、各リファクタリングのステップにはおよそ 1 日ほどかかり、初期ロードにもほぼ同じ時間がかかります。

4

1 に答える 1

4

私の経験から、関心のあるすべてのデータをデータベースのステージング テーブルに取得し、そこから移動した後、ストアド プロシージャを介して可能な限り多くのセット ベースのロジックを実行する必要があります。ステージング テーブルにロードするとき、テーブルにはインデックスがありません。データがテーブルにロードされた後、インデックスを作成します。

いくつかのヒントについては、このリンクをチェックしてください http://www.postgresql.org/docs/9.0/interactive/populate.html

于 2010-10-26T14:06:52.010 に答える