1

~600K 行からなる XML ファイルを解析しています。XML からデータベースへのデータの解析と挿入は、SAX を使用して解析し、LOAD DATA INFILE (.txt ファイルから) を使用してデータベースに INSERT するため、問題ではありません。txt ファイルは、JDBC を使用して Java で設定されます。これらすべてがデータベースに入力されるまでに 5 秒ほどかかります。

私のボトルネックは現在、複数の SELECT クエリを実行しています。基本的に、特定の XML タグにヒットするたびに、SELECT クエリを呼び出して、別の DB テーブルからデータを取得します。これらの SELECT クエリを追加すると、入力時間が 2 分になりました。

例えば:

  1. 書籍、記事、論文などで構成される XML を解析しています。
  2. 各書籍/記事には、isbn、タイトル、著者、編集者、発行者などの子要素があります。
  3. 各著者/編集者/発行者で、データベース内のテーブルにクエリを実行する必要があります。
  4. 値が Tolkien の author タグに遭遇したとしましょう。
  5. author_table というデータベースに既に存在するテーブルをクエリする必要があります
  6. クエリは [name = 'Tolkien' の author_table から author_id を選択] です。

ここでボトルネックが発生しています。

今私の質問は:これをスピードアップする方法はありますか?

ところで、私が 2 分が長いと思う理由は、これが宿題であり、データベースへの入力がまだ終わっていないからです。DB の作成全体に 5 分かかると見積もっています。したがって、パフォーマンスの最適化に関するアドバイスを求めている理由です。

4

1 に答える 1

2

考慮できることがいくつかあります。

  • クエリを実行するたびに新しい接続を作成/閉じないように、接続プールを使用します。そうすることは高価です
  • SELECTクエリを介して取得しているデータをキャッシュします。事前にすべてのデータをプリフェッチして、その場でクエリを実行する必要がないようにすることは可能ですか?
  • SELECTが遅い場合は、クエリが最適化されており、テーブル全体をスキャンしないように適切なインデックスが設定されていることを確認してください
  • JavaでバッファリングされたIOを使用していることを確認してください
  • 作業を複数のスレッドに分割できますか?その場合は、複数のワーカースレッドを作成して、ジョブの複数のインスタンスを並行して実行します
于 2013-02-26T01:17:42.053 に答える