Rumah > Soal Jawab > teks badan
for循环,大概需要遍历100万的数据,对于每一条数据,需要更新5张表,调用两次API接口,但是在执行过程中,因为数据量太大,所以执行的中间,由于耗时严重,经常会出现链接中断等问题,如果把这种遍历100万数据的逻辑,搞成多线程,应该怎么搞啊?
黄舟2017-04-17 17:52:58
Gunakan kumpulan benang atau pemprosesan yang diedarkan Jika sekeping data tertentu telah diproses, anda boleh menandainya di suatu tempat dan menulisnya dalam masa nyata jika ia gagal, anda boleh memulakan semula dari awal dan menapis data yang lengkap.
Anda juga boleh menetapkan tamat masa, kemudian simpan rekod yang gagal secara berasingan dan gunakan strategi untuk mencuba lagi.
PHPz2017-04-17 17:52:58
Mendengar nada anda, jika anda hanya mahu memproses 1 juta data ini dalam satu masa, daripada menggunakan program ini untuk masa yang lama, anda perlu membuka beberapa proses lagi dengan mudah dan kasar, dan kemudian lulus beberapa parameter kepada proses melalui baris arahan Anggapkan bahawa 10 proses dibuka, setiap proses bertanggungjawab untuk 100,000 data, dan data yang bertanggungjawab untuk setiap proses boleh dibezakan mengikut peraturan tertentu. Contohnya, selang ID
大家讲道理2017-04-17 17:52:58
Bahagikan 1 juta data kepada beberapa bahagian, setiap utas memproses satu keping data, dan data mesti dimasukkan secara berkelompok Jika pangkalan data mempunyai indeks, lebih baik untuk mematikannya selepas semua data dimasukkan , indeks akan disatukan Jika ia adalah Oracle Anda boleh menggunakan SQL Loader atau alat lain yang serupa untuk memasukkan secara langsung, mengelakkan penggunaan Hibernate dan sebagainya.
怪我咯2017-04-17 17:52:58
Gunakan kumpulan benang untuk merekodkan titik permulaan setiap data urutan, dan kemudian mula membaca data Anda disyorkan untuk menggunakan kemas kini kelompok untuk mengemas kini antara muka API dipanggil secara tidak segerak dan jadual dikemas kini semasa membuat panggilan . Jika anda rasa prosedur ini lebih rumit. Ia dilaksanakan secara berurutan menggunakan jadual kemas kini pangkalan data yang dipanggil oleh antara muka api.