0

テーブル A [id,name] があり、約 1,000 万件のレコードがあります。すべての名前を 1,000 万の一意の名前に置き換える必要があります。このため、ルックアップ ファイルとして機能するテキスト ファイルがあり、改行で区切られた 1,000 万の名前が含まれています。だから、たくさんの質問:

  • データベース内のこれらの 1000 万の名前を、テキスト ファイル内の 1000 万の名前にランダムに置き換えるにはどうすればよいでしょうか? - ルックアップ ファイルのエントリを再利用しないように、ファイル全体をキャッシュし、置き換え対象のマップを作成する方法がいくつか考えられます。または、データベース テーブルを使用し、ルックアップ ファイルをそこにロードして、このテーブル。
  • 一般に、ファイルの使用に対してデータベースを使用するケースとなる書き込み数/読み取り数の適切な数はどれくらいでしょうか? たとえば、プログラムがファイルを百万回読み取り、別のファイルに百万回書き込む場合、データベースの使用に切り替えますか? 実際の上限は何ですか (もしあれば)?
4

2 に答える 2

1
  1. 私があなたの場所にいた場合、名前をランダムに置き換える代わりに、データをチャンクで処理するバッチベースのアプローチを選択したでしょう。チャンクを読み取るリーダー、ファイルから新しい値を更新するプロセッサ、更新された値をデータベースに書き戻すライターを用意します。
  2. 2番目の質問は少し不明確です。ファイルを使用するかどうかの決定は、純粋に要件に基づいています。フラットファイルでデータを取得している場合は、そこから読み取る必要があります。何十億もの行がある場合でも、すべてのデータをフラット ファイルからデータベース テーブルに移動し、それを使用して別のテーブルを更新するのはやり過ぎです。目的のテーブル列が更新された後、後で使用する予定のないデータを不必要に永続化しています。
于 2013-10-10T18:19:23.677 に答える
1

考えてみましょう。名前がたくさんあり、すべてをメモリにロードすることはできないので、できるだけ使いやすいソリューションを見つけます。

ランダムなアプローチでは、データベースに一時列を作成し、その上に一意のキーを作成して、常にこれを使用できます:

1)take a name on line "x" (by random or whatever you want) 
2)random record "y" in database which was not replaced yet (it can be tracked with just one boolean) 
3)try to add the name on line x to the record y AND to the same record add x to the temp column. 
4)if Unique errorcomes, it means the name was already given to someone, repeat once more with another x.

「x」を追跡でき、すでに与えられた名前を使用していないことが確実な場合、Unique 修飾子は必要ありません。

于 2013-10-10T18:17:22.403 に答える