2 votes

requêtes simultanées dans la base de données mySql

J'utilise un serveur mySql qui est mis à jour toutes les 4 heures. Pendant ce temps, les données peuvent être récupérées.

Est-ce que mySql gère ce scénario où la base de données est mise à jour et qu'une requête de l'utilisateur est reçue ?

ou dois-je faire face à ce scénario ? Est-il possible de créer un instantané de la base de données juste avant que la mise à jour n'ait lieu ? et d'interroger cette base de données ?

Remerciements

0voto

danben Points 35312

Si vous vous inquiétez de la manière dont les écritures concurrentes sont gérées, c'est une chose, mais vous pouvez lire en toute sécurité une base de données MySQL qui est mise à jour par un autre thread sans craindre que les données soient corrompues.

Bien entendu, si le thread d'écriture effectue plusieurs écritures qui doivent être atomiques (c'est-à-dire toutes ou aucune), assurez-vous qu'il utilise une transaction.

0voto

Jakob Borg Points 10869

Vous pouvez utiliser des transactions et/ou des verrouillages pour vous assurer que chaque utilisateur dispose d'une vue cohérente (c'est-à-dire entièrement mise à jour ou pas du tout). Le moteur de base de données lui-même est très bien adapté à ce scénario. Si vous ne vous souciez pas de ce que les lecteurs voient au moment précis où les mises à jour sont exécutées, vous n'avez rien à faire.

0voto

embedded Points 149

Compte tenu de mon scénario, je pense qu'aucune autre action n'est nécessaire. Si l'écriture précède la lecture, l'utilisateur obtiendra les données les plus récentes. dans le cas contraire, il attendra la prochaine requête.

Cela correspond à mes besoins.

Merci à tous

0voto

mrk Points 23

"Le processus A ne lit qu'une partie des données de l'enregistrement. Le temps de l'unité centrale est consacré au processus B qui termine l'action d'écriture. Le processus A s'exécute et termine la requête, de sorte que les données reçues par le processus A ne sont pas complètes. (certaines données anciennes et certaines données nouvelles)"

Heureusement, cela ne se produit pas avec les bases de données. Une ligne est lue complètement avant qu'un autre thread/processus ne soit autorisé à la modifier (et vice versa).

L'un des problèmes que vous rencontrerez dans votre scénario est le verrouillage des tables. Pendant l'exécution de la mise à jour par lots, la table sera verrouillée la plupart du temps et la récupération des données sera très lente. Une ligne en cours de mise à jour ne peut pas être lue.

L'approche snapshot/update/switch que vous avez mentionnée dans votre message original pourrait être la meilleure approche.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X