検索

ホームページ  >  に質問  >  本文

java - for循环效率问题

for循环,大概需要遍历100万的数据,对于每一条数据,需要更新5张表,调用两次API接口,但是在执行过程中,因为数据量太大,所以执行的中间,由于耗时严重,经常会出现链接中断等问题,如果把这种遍历100万数据的逻辑,搞成多线程,应该怎么搞啊?

巴扎黑巴扎黑2889日前494

全員に返信(4)返信します

  • 黄舟

    黄舟2017-04-17 17:52:58

    スレッド プールまたは分散処理を使用します。特定のデータが処理された場合は、それをどこかにマークして、失敗した場合は最初からやり直して、完了したデータを除外できます。

    タイムアウトを設定し、失敗したレコードを個別に保存し、戦略を使用して再試行することもできます。

    返事
    0
  • PHPz

    PHPz2017-04-17 17:52:58

    あなたの声を聞いて、このプログラムを長時間使用するのではなく、この 100 万のデータを一度に処理したいだけなら、単純かつ無作法にさらにいくつかのプロセスを開いて、いくつかのパラメータを渡す必要があります。 10 個のプロセスが開かれ、各プロセスが 100,000 個のデータを担当し、各プロセスが担当するデータは特定のルールに従って区別できるとします。例: ID 間隔

    返事
    0
  • 大家讲道理

    大家讲道理2017-04-17 17:52:58

    100 万のデータを複数の部分に分割し、各スレッドで 1 つのデータを処理し、データをバッチで挿入する必要があります。データベースにインデックスがある場合は、すべてのデータが挿入された後、最初にインデックスをオフにすることをお勧めします。 Oracle の場合は、Hibernate などを使用せずに、SQL Loader などのツールを使用して直接挿入できます。

    返事
    0
  • 怪我咯

    怪我咯2017-04-17 17:52:58

    スレッド プールを使用して各スレッドのデータの開始点を記録し、その後データの読み取りを開始します。テーブルの更新にはバッチ更新を使用することをお勧めします。API インターフェイスは非同期で呼び出され、呼び出し中にテーブルが更新されます。 。この手順はもっと複雑だと思われる場合。 APIインターフェースで呼び出されるデータベースの更新テーブルを使用して逐次実行されます。

    返事
    0
  • キャンセル返事