Omdat ik geen antwoord kreeg, ben ik begonnen met benchmarken. Mijn criteria zijn als volgt:
- 20.000 vooraf gegenereerde codes
- Gebruik van Apache
ab
commando met 20.000 verzoeken, 100 gelijktijdigheid:ab -n 20000 -c 100
- Servlet -> EJB (JPA 2.0 EclipseLink, JTA) om de update in DB uit te voeren (zoals in een echte situatie via een JSF-actie)
- 2 versies van de Servlet, één met optie 1 (SELECT ... FOR UPDATE ), en één met optie 2 (UPDATE ... LIMIT 1)
- Glasvis gestopt, 5 keer handmatig op de geteste Servlet drukken om hem op te warmen, alles resetten naar NULL naar user_id
- Tests worden elk 3 keer uitgevoerd en het gemiddelde wordt gegeven
Resultaten:
KIES ... VOOR UPDATE; BIJWERKEN ... :
Concurrency Level: 100
Time taken for tests: 758.116 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Row updated: 20000
UPDATE....LIMIET 1:
Concurrency Level: 100
Time taken for tests: 773.659 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Row updated: 20000
Dus op mijn systeem lijkt de optie met 2 query's efficiënter dan de ene query. Dat had ik niet verwacht :)