március 2015 havi bejegyzések

SQLSaturday 2015 április, Budapest

Áprilisban ismét megrendezésre kerül az SQLSaturday Budapesten. A lényeg, hogy neves előadók fejtenek ki előadások keretében 1-1 témát a tudásra szomjas érdeklődőknek, teljesen ingyen! Nem utolsó sorban simán össze lehet futni ex- esetleg jövőbeli kollégákkal.

Több infót a www.hug-mssql.hu oldalon találhattok.

Ha engem kérdeztek, érdemes ott lenni!

A lapozás – tegyük helyre

Triviális dologról lesz szó, ám mégis azt látom, hogy sok ember fejében nincs rendben, hogy mi is a lapozás.

Alább szemléltetem, hogy mi él a fejekben a lapozásról, és itt most vegyük a hagyományos offset-es lapozást, ami az order by része (a felhasználókat listázzuk utolsó belépés alapján, a legfrissebb legelöl):

first

A fejlesztő azt gondolja, hogy a fenti result set-et 5-ös limitekben úgy fogja visszakapni, ahogy a piros vonallal jelöltem. Ez igaz, ha egy adott időpillanatban kérdeznénk le az adatokat.

A valóságban viszont nem feltétlen lesz ez így, hiszen az adatbázisainkban az adatok “mozgásban vannak”. Lehet, hogy a második szeletet az első után x órával kérdezem csak le és addigra egy utolsó belépés sorrend rendesen átrendeződhet. Nézzünk erről is egy képet:

second

Zölddel jelöltem a módosult sort. Ha az első szeletnél az első kép szerint néz ki a táblánk, a második szeletnél a második kép szerint, akkor láthatjuk, hogy a “User 15” egyszer sem fog megjelenni a találati listában, mert a lapozással átugorjuk, míg a “User 16” kétszer is (első és második szelet). Nincs mit tenni, a lapozás ilyen, ezzel együtt kell élni.

Azért választottam a last logint-t példának, mert ez egész valósághű lehet, viszont ugyanez igaz lehet minden olyan sorra, ami változik, tehát nem read only a táblánk, amiből lekérdezünk.

Végezetül még felhívnám a figyelmet, hogy a hagyományos lapozás és az, amit helyette ajánlottam (lapozzunk okosan), egymástól különböző logika alapján működnek, ezért nem feltétlen ugyanazt a találati listát fogják visszaadni.

Az általam javasolt lapozás így adna vissza az eredményeket:

third

Ahol a “User 15” szintén nem lenne listázva, viszont duplán senki. A probléma ott jelentkezne, amikor azt írjuk, hogy 20 találatunk van, közben meg csak 19-et jelenítünk meg, mert a “User 15” kimaradt. A hagyományos lapozásnál pedig azt mutatjuk a felhasználóknak, hogy 20 találatunk van, 20-at jelenítünk meg, de a “User 16”-os kétszer, a “User 15”-öt meg egyszer sem. Nem mondanám egyik logikát sem jónak vagy rossznak, a lényeg, hogy fedje le az üzleti igényeket. A lapozásnál pedig emlékezzünk erre, hiszen nap mint nap használjuk.