Protože jsem nedostal odpověď, začal jsem dělat benchmarking. Moje kritéria jsou následující:
- 20 000 předem vygenerovaných kódů
- Použití Apache
ab
příkaz s 20 000 požadavky, 100 souběžností:ab -n 20000 -c 100
- Servlet -> EJB (JPA 2.0 EclipseLink, JTA) k provedení aktualizace v DB (jak to bude prostřednictvím akce JSF v reálné situaci)
- 2 verze servletu, jedna s možností 1 (SELECT ... FOR UPDATE) a jedna s možností 2 (UPDATE ... LIMIT 1)
- Zastaveno Glassfish, ručně 5x stisknout testovaný servlet, aby se zahřál, resetovat vše na NULL na user_id
- Každý test probíhá třikrát a je uveden průměr
Výsledky:
VYBERTE ... PRO AKTUALIZACI; AKTUALIZACE ... :
Concurrency Level: 100
Time taken for tests: 758.116 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Row updated: 20000
AKTUALIZACE.... LIMIT 1:
Concurrency Level: 100
Time taken for tests: 773.659 seconds
Complete requests: 20000
Failed requests: 0
Write errors: 0
Row updated: 20000
Takže alespoň v mém systému se možnost se 2 dotazy zdá efektivnější než jeden dotaz. To jsem nečekal :)