Comme je n'ai pas eu de réponse, j'ai commencé à faire du benchmarking. Mes critères sont les suivants :
- 20 000 codes pré-générés
- Utilisation d'Apache
ab
commande avec 20 000 requêtes, 100 simultanées :ab -n 20000 -c 100
- Servlet -> EJB (JPA 2.0 EclipseLink, JTA) pour effectuer la mise à jour dans la BD (comme cela se fera via une action JSF en situation réelle)
- 2 versions du servlet, une avec l'option 1 (SELECT ... FOR UPDATE ) et une avec l'option 2 (UPDATE ... LIMIT 1)
- Arrêté Glassfish, appuyez sur le servlet testé manuellement 5 fois pour le réchauffer, réinitialisez tout à NULL sur user_id
- Les tests sont exécutés 3 fois chacun et une moyenne est fournie
Résultats :
SÉLECTIONNEZ ... POUR LA MISE À JOUR ; MISE À JOUR ... :
Concurrency Level: 100
Time taken for tests: 758.116 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Row updated: 20000
MISE À JOUR.... LIMITE 1 :
Concurrency Level: 100
Time taken for tests: 773.659 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Row updated: 20000
Donc, au moins sur mon système, l'option avec 2 requêtes semble plus efficace que la seule requête. Je ne m'attendais pas à ça :)