Összetett JIRA adatbázis lekérdezések Hatékonyan és egyszerűen programozva
Kicsák Ádám
[email protected]
JIRA jelentősége az EverIT Kft.-nél
● ● ● ● ● ●
Agilis fejlesztési módszer támogatása Time tracking Fejlesztők és menedzserek közötti kommunikáció Testreszabhatóság, bővíthetőség Remek támogatás az Atlassian felől A termék folyamatosan fejlődik
Motiváció saját plugin fejlesztésre ● ● ●
●
Megoldás keresése kényelmes munkanapló készítésére Nem találtunk kielégítő plugint → Igények kielégítése saját JIRA plugin formájában A belső fejlesztések publikálása az Atlassian Marketplacen → Saját fejlesztések termékké váltak → A JIRA plugin fejlesztés világában való elmélyülés JIRA pluginokban a bevált technológiák kipróbálása, mint pl. Querydsl
EverIT plugin-ok
RESTful Worklog Query
Timetracker Holidaychecker
Fillchecker
Timetracker
Könnyen átlátható munkanapló, és jelentések
Felmerült problémák plugin fejlesztés közben A beépített eszközökkel nem sikerült kellő hatékonysággal adatokat lekérni ● A lekérdezések nehezen átláthatóak ○ ○
●
Nézetek és feltételek külön helyen Natív SQL parancs összeállítása kézzel
Nagy mennyiségű adatoknál jelentősen lassulnak
→ Megoldást kell találni hatékony lekérdezésre
Querydsl jelentősége Régebben JPA vagy natív lekérdezések voltak használatban ● ●
JPA robosztusabb, többet tud, de sok probléma adódott használata közben Natív kérések → Adatbázis vendor-lock
Jelenleg a Querydsl preferált keretrendszer ● ● ● ●
Egyszerűen programozható Átlátható lekérdezések Csak lekérdezések, semmi magic → gyors Sok adatbázist támogat
Querydsl jelentősége
Miért fontos, hogy egy jó keretrendszer dolgozzon a háttérben? ● ● ● ●
Gyors kiszolgálás → Megfelelő felhasználói élmény Átlátható kód → Hatékony munkaórák Ismert keretrendszer → Könnyen csatlakozhat új fejlesztő Jó keretrendszer támogatás → Hatékony bug javítás
JIRA plugin-ok és Querydsl Az igény a komolyabb JIRA jelentésekkel szemben, és a Querydsl használata során szerzett jó tapasztalatok alapján:
Querydsl kipróbálása JIRA plugin-ban Két út is lehetséges: ● ●
Atlassian Pocketknife Querydsl Saját Querydsl plugin komponens
Querydsl bevezetésétől várt eredmény: Hatékony, és átlátható lekérdezések.
Querydsl példa lekérdezés /* Queries the worklogs this week. */ private static final class WorklogsThisWeekQuery implements QuerydslCallable
> { @Override public List<WorklogDTO> call(final Connection connection, final Configuration configuration) throws SQLException { QWorklog worklog = new QWorklog("wl"); Canledar from = getMidnightAtFirstDayOfWeek(); Calendar to = getMidnightAtFirstDayOfNextWeek(); return new SQLQuery<WorklogDTO>(connection, configuration) .select( Projections.fields(WorklogDTO.class, worklog.author, worklog.created, worklog.worklogbody)) .from(worklog) .where(worklog.created.between( new Timestamp(from.getTimeInMillis()), new Timestamp(to.getTimeInMillis()))) .fetch(); } [...] }
Benchmark körülmények Adatbázis ● ● ●
15 projekt Több ezer regisztrált issue Megközelítőleg 100E munkanapló bejegyzés
Tesztgép ● ● ● ●
JIRA és adatbázis kiszolgáló ugyanazon a gépen Intel Core i5, 4 mag, 8 szál 8GB memória SSD háttértár
Chart report benchmark
Table report benchmark
Worklog Query benchmark
Konklúzió Nagy mennyiségű adat lekérdezésekor elengedhetetlen, hogy a lekérdezések megfelelő mértékben optimalizáltak legyenek. A Querydsl keretrendszer SQL közeli, de adatbázis független lekérdezések létrehozására képes, melyek jól olvashatók, könnyen paraméterezhetőek. A Benchmark-ok igazolják, hogy a Querydsl használatával sikerült a JIRA pluginjeink lekérdezéseit nagy mértékben optimalizálni.
Köszönöm a figyelmet!