java - for循环效率问题
巴扎黑
巴扎黑 2017-04-17 17:50:58
0
4
487

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

巴扎黑
巴扎黑

répondre à tous(4)
黄舟

Utilisez un pool de threads ou un traitement distribué. Si une certaine donnée a été traitée, vous pouvez la marquer quelque part et l'écrire en temps réel, si elle échoue, vous pouvez recommencer depuis le début et filtrer les données terminées.

Vous pouvez également définir un délai d'attente, puis enregistrer les enregistrements ayant échoué séparément et utiliser une stratégie pour réessayer.

PHPzhong

En écoutant votre ton, si vous souhaitez simplement traiter ces 1 million de données en une seule fois, au lieu d'utiliser ce programme pendant une longue période, vous devriez simplement et grossièrement ouvrir quelques processus supplémentaires, puis transmettre quelques paramètres au processus via la ligne de commande. Supposons que 10 processus soient ouverts, que chaque processus est responsable de 100 000 données et que les données responsables de chaque processus peuvent être distinguées selon des règles spécifiques. Par exemple, intervalle d'identification

大家讲道理

Divisez 1 million de données en plusieurs parties, chaque thread traite une donnée et les données doivent être insérées par lots. Si la base de données a un index, il est préférable de le désactiver d'abord une fois toutes les données insérées. , l'index sera unifié. S'il s'agit d'Oracle, vous pouvez utiliser SQL Loader ou d'autres outils similaires pour insérer directement, en évitant l'utilisation d'Hibernate et autres.

刘奇

Utilisez le pool de threads pour enregistrer le point de départ des données de chaque thread, puis commencez à lire les données. Il est recommandé d'utiliser la mise à jour par lots pour mettre à jour la table. L'interface API est appelée de manière asynchrone et la table est mise à jour lors de l'appel. . Si vous pensez que cette procédure est plus compliquée. Il est exécuté séquentiellement à l'aide de la table de mise à jour de la base de données appelée par l'interface API.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal