2017-05-19 1 views
0

これは私の状況です:データベース - すでに主キーとしての文字列を作成した後にリレーションシップインデックスを作成する

私は150GBのテキストファイルデータベースを解析しています。

そのデータを新しいリレーショナルデータベース(PostgreSQL)に挿入する必要があります。

そして、そのデータの多くは(多対多など1対1)の関係を定義します。

まあ...これらの関係は、ファイルの解析中に定義されます。

プライマリキーとして使用する数値インデックスを追跡する必要がある場合、特定の状況では、特定のレコードのプライマリキーが何であるかを知るためにデータベースにクエリを実行する必要があります(外部キーとして使用する)。

(関係を作成しながら、私は挿入するよ)まだ索引付けされていない1500万人以上のレコードを持つこれらのテーブルのいくつかは、多分、それは時間の処理の悪夢になるだろうことを考えると

と...。 [OK]を主キーとして文字列を使用することである -

1:場合

だから、私は思ったんだけど?これは、大規模なデータベースを照会して、ファイルの解析中に外部キーを推論するという問題を解決します。

2 - すべてのデータベースを挿入した後、PostgreSQLは文字列の主キー/外部キーを上書きする数値インデックスを作成するすべての関係を作成するようにする任意の自動または簡単な方法はありますか?

ごめんなさい。

そして多分私はあまり聞いてるのよ:)

感謝を! ジオ

答えて

0

1 - これは論争トピックです。しかし、可能であれば、主キーに文字列を使用しないようにアドバイスしたいと思います。これは、効率の低いクエリ、インデックスの膨らみ、およびその他の厄介な問題を引き起こします。 IMHO代理キーはほとんどの場合よく機能します。

2 - いいえ。列を作成して、おそらくrow_numberで作成し、古いPKをカスケードして削除し、新しいPKを作成し、新しいFKを作成するなどしなければなりません。ハードワークではなく、やや面倒です。私はあなたのデータセットに関する多くの情報を持っていない

、データ品質を持ついくつかの問題が起こることができますか?例:関係の失敗(存在しない親を指す子行)。

とにかく、最も頻繁なデータをキャッシュに格納できます。 Redis、Memcache、または使用しているプログラミング言語で利用可能なキー値型を使用してください。キャッシュがウォーミングアップしている間だけデータベースにクエリを実行します。しかし、キャッシュ無効化戦略を定義することを忘れないでください。そうしないと、メモリが過負荷になる可能性があります。

+0

あなたの提案に従います。どうもありがとうございました!とにかく、いいえ、孤児の行がない可能性があります。データセットはその意味で非常によく形成されています。 –

+0

@GilcanMachadoあなたを助けてくれてうれしいです。あなたは答えを受け入れることができますか? –

関連する問題