Table des matières
Contenu de la question
Solution
Maison Java Existe-t-il une solution pour effectuer simultanément des opérations de base de données identiques/similaires via plusieurs threads ?

Existe-t-il une solution pour effectuer simultanément des opérations de base de données identiques/similaires via plusieurs threads ?

Feb 22, 2024 pm 12:31 PM

Questions et réponses Java apportées par l'éditeur PHP Zimo : existe-t-il une solution pour permettre à plusieurs threads d'effectuer des opérations de base de données identiques/similaires en même temps ? Au cours du processus de développement, la question de savoir comment gérer efficacement plusieurs threads exécutant simultanément la base de données a toujours attiré beaucoup d'attention. Cet article présentera plusieurs solutions, notamment l'utilisation de pools de connexions de base de données, de mécanismes de verrouillage, de traitement des transactions et d'autres méthodes, pour aider les développeurs à résoudre ce problème. Voyons comment implémenter des opérations de base de données simultanées multithread pour améliorer les performances et la stabilité du système.

Contenu de la question

En utilisant Java, Spring Boot et Hibernate, existe-t-il un moyen de permettre à plusieurs threads d'effectuer une opération donnée simultanément sans provoquer de blocages ou d'exceptions de données obsolètes.

Par exemple, supposons que l'outil automatisé se connecte deux fois en même temps, ce qui entraîne l'une des situations suivantes :

  1. Deadlock car deux threads (requêtes) mettent à jour les enregistrements de l'utilisateur en même temps, par exemple en stockant la date/heure de la dernière connexion de l'utilisateur.
  2. Exception de données périmées car un thread a mis à jour l'utilisateur avant la fin de la transaction d'un autre thread.

Cela pourrait être résolu en ajoutant une synchronisation sur l'ID utilisateur, mais ce genre de chose devrait se produire partout, ce qui entraînerait une pénalité potentielle en termes de performances et rendrait la base de code plus volumineuse et plus difficile à maintenir.

Alternativement, nous pouvons ajuster le niveau d'isolement (nous pouvons peut-être définir le niveau par défaut globalement). Est-ce une meilleure solution ou existe-t-il d'autres solutions ?

Solution

Verrouillage pessimiste.

Verrouillez toutes les lignes qui pourraient devoir être mises à jour au début de la transaction. Vous pouvez le faire en utilisant locking read.

select ... from users where user_id = ? for update;
Copier après la connexion

Un seul fil de discussion l'obtiendra. Les autres threads attendront que ce thread libère le verrou.

Pendant ce temps, le fil de discussion détenant le verrou peut mettre à jour la ligne lorsqu'il est prêt.

update users set last_login = now() where user_id = ?;
Copier après la connexion

Ensuite, pour être poli envers les autres discussions, veuillez les soumettre dès que possible après update. Cela libère automatiquement le verrou.

COMMIT;
Copier après la connexion

Cela permet au prochain thread en file d'attente d'acquérir le verrou qu'il attend.

Vous pouvez utiliser le verrouillage des lectures pour verrouiller plusieurs lignes, même plusieurs lignes dans plusieurs tables. select Toutes les lignes vérifiées par la requête seront verrouillées. Si vous devez verrouiller des lignes dans plusieurs tables, vous pouvez effectuer des opérations telles que la jointure.

L'acquisition de verrous est atomique, donc une instruction de verrouillage donnée doit acquérir tous verrous demandés, sinon elle doit attendre.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)