2011-07-10 14 views
0

私は数百万のエントリを含む2つの非常に大きなテーブルを持っており、それらには同様のレコードが含まれています。したがって、TableAは、同じデータを格納するためにTableBとは異なる列構造を持つことができますが、TableAとTableBの両方にはレコードの一意のフィンガープリントの列が含まれています。同じフィンガープリントを含むTableAとTableBの共通エントリを見つける最良の方法は何ですか?同様の質問がここで数回ここで尋ねられましたが、ここに変更があります。2つの非常に大きなデータベーステーブルの共通エントリの検索

と言います。普通のエントリのpkをTableC(pk_a, pk_b, fingerprint)に保存します。これは、TableAとTableBに共通のタプルを示します。 TableCはTableAまたはTableBにレコードが追加/削除されるたびに更新する必要があります。

私の最初の部分は、指紋が同じであるTableAとTableBの結合をTableCに追加することです。

2番目の部分については、同様の指紋の場合はTableCにクエリを行い、一致するものが見つかった場合はTableCを更新します。一致するものが見つからない場合は、指紋についてTableBをスキャンし(TableBにレコードが追加された)、TableCを更新します。

しかし、これはかなり直感的であり、na ï veです。私はそれがより良い方法で行えると感じています。

誰でも考えられますか?

+0

最終使用は何ですか?つまり、リアルタイムでの対応が必要ですか?あるいは、挿入物のオーバーヘッドをすべて避け、真夜中にバッチ処理を実行することもできますか? – SJuan76

+0

最終的な使用方法はさまざまです。そのインタビューの質問。バッチプロセスを実行することは非常に現実的な解決策かもしれませんが、おそらく人々は他の巧妙なメカニズムを使ってそれをやっているかもしれません。 –

+0

さて、インタビューの中でさえ、私は、より簡潔な要求を得ることを望んでいるでしょう(幅広い再請求者 - >費用効果の低い実装)。もう1つの興味深い質問は、たとえPKでなくても結合を行う際に便利なコラムがある場合です。とにかく、私は別の答えを書いています。 – SJuan76

答えて

0

まず私は、私は問題を参照してくださいどのようにあなたを教えてあげる:

  • 指紋がテーブルのキーのいずれか(おそらくPKは、また候補PKことができる)の関数として計算されます。そうでなければ意味がない(* 1)。指紋は変わらない。
  • また、各フィンガープリントはテーブルごとに一意です(そうでない場合は大きな問題です)。
  • 理想的には、新しい属性(NOT NULL UNIQUE)として各テーブルにフィンガープリントを追加します。これは、行の作成時にトリガーによって設定されます。テーブルのサイズが大きすぎず、関数のCPU使用量がそれほど多くない場合は、選択で使用するフィンガープリントを計算するDB関数のテーブルを変更することができます。
  • 元のテーブルを変更できない場合は、セカンダリテーブルが必要です。提案したテーブルのみを使用することも、元のテーブルごとに1つのテーブル(fingerprintA、pkA/fingerprintB、pkB)を使用することもできます。あなたのソリューションはより速く、鉱山はより簡単で(挿入/削除のみ、更新なし)、より拡張性があります(明示的に表Cが現れる場合)。この/ esテーブル/ sのレコードは、元のテーブルの挿入アクションまたは削除アクション(理想的にはトリガー)によってのみ変更されます。
  • すべてのエンジニアリングと同様に、問題のより細かい点(ソリューションで何を期待して何を行うことができるか)は、バランスを他のソリューションの1つの解決策に導きます。

(* 1)PKの一部ではない属性を変更してレコードを変更できる場合は、モデルが間違っています。

+0

フィンガープリントは計算値ではなく、データによって提供されます。歌を歌う。曲の名前は異なる場合がありますが(スペルミスのため)、曲の指紋は同じでユニークです。したがって、表Aと表BでソングSの名前やその他のプロパティが異なる場合でも、フィンガープリントは変わりません。また、各テーブルには同様の指紋を持つレコードが含まれていても、現時点ではそうではありません。 –

+0

をご覧ください。要件の定義が優れているほど、解決策は優れています。そうすることはあまりありません。各レコードを同じテーブルまたは関連するテーブルのいずれかのフィンガープリントでリンクします。 – SJuan76

関連する問題