Avatar billede obix Nybegynder
12. april 2005 - 09:39 Der er 7 kommentarer og
1 løsning

Ibatis paginated list. Godt eller skidt?

Hej EKsperter.

Jeg er på et projekt lige nu hvor de har valgt at bruge Ibatis som database lag. Det er en web løsning og jeg skal lave et søge billede hvor man kan bladre i resultaterne så man ikke får vist alle 100.000 poster på en gang =).

Jeg har læst lidt om Ibatis og opdaget at der er noget der hedder paginated list men kan det virkelig passe den tager hele resultatet ned i listen når man selecter? For hvis den gør det så er det da ikke så smart... eller hvad?

Min tabel har ikke nogle blobs eller andre store kolonner så måske det er smart nok. Der er pt. 100.000 poster i tabellen og alle kan søges ud på en gang.

Normalt ville jeg bruge en primary key og så selv styre mine selects men hvis nu jeg kan bruge denne funktion fra Ibatis så kan jeg jo ligeså godt det. På den måde vil jeg også kunne sortere på alt...

Er det en god eller dårlig løsning?
Avatar billede simonvalter Praktikant
12. april 2005 - 16:26 #1
nej den behøver ikke loade det hele..

fra http://www.ibatis.com/common/example.html

// Too many results?  How about a fully navigatable,
// lazy-loaded, paginated list of products that's
// JavaBeans compliant and easily usable from within
// a JSP page? Is 10 per page okay?

PaginatedList productList = sqlMap.queryForList("getProductByCategory",
                                                category,
                                                10);

productList.nextPage();
productList.previousPage();
productList.isNextPageAvailable();

og det er en udemærket løsning.
Avatar billede obix Nybegynder
12. april 2005 - 19:04 #2
Ok jamen det er jeg da meget glad for at høre. Men noget jeg ikke forstår. Hvis den ikke henter alle siderne ind hvordan kan den så finde nextPage uden at den har en connection?
Avatar billede simonvalter Praktikant
12. april 2005 - 19:21 #3
uha .. jeg har ikke kigget nærmere på det men det må være det der menes med lazy loading... det er lidt i den retning jeg kender fra hibernate.

fra
http://www.theserverside.com/news/thread.tss?thread_id=26844#127507
Clinton Begin (creator af ibatis)

iBATIS lazy loading does not rely on an open session or an open connection. It will use the current connection if it is there, but it will also fetch a new connection if it needs to.


i hibernate loader du f.eks et objekt hvor du bruger lazy loading.. det objekt indeholder så en masse andre objekter..
f.eks et far objekt som har en masse børn.
for det meste vil du kun vide hvad far's navn er og det vil være kostbart at loade alle hans børn hver gang.. med lazy loading går den automatisk ned i databasen og henter hans børn når du tilgår dem... i hibernate hvis du har en åben session. Det kan give et stort performance boost hvis det bruges rigtigt.. du skal selvfølgelig vide hvornår så du ikke lazy loader objekter som du skal bruge alle data fra for det meste.
Avatar billede simonvalter Praktikant
12. april 2005 - 19:24 #4
jeg forestiller mig lidt at PaginatedList productList har loaded de første 10 objekter... der ligger stadig en reference til de andre men indtil videre er de objekter ikke loaded hvilket kan være kostbart men går du videre i resultaterne så bruger den en i forvejen eksisterende connection eller opretter en ny for at hente de næste resultater.

det er ihvertfald mit gæt... og jeg har ikke lige tid til at læse manualen så det er så tæt jeg komme lige nu ;)
Avatar billede obix Nybegynder
12. april 2005 - 19:26 #5
Jamen det er rigtig gode nyheder. Jeg kan vel egentlig bare teste det ved at slukke for databasen når jeg siger nextPage(). Hvis den kan alligevel så har den det hele i memmory.
Avatar billede simonvalter Praktikant
12. april 2005 - 19:33 #6
nej så får du et problem. den har ikke det hele i memory ud fra hvordan jeg mener det virker. den har de 10 første objekter. den næste 10 har den kun en reference til. Hvis du så siger nextPage() så loader den dem men hvis den ikke kan bruge en allerede åben forbindelse, eller lave en ny så får du en fejl.

test hellere med log4j.
den har nogen forskellige ting du kan slå til f.eks
log4j.logger.com.ibatis=DEBUG

den eller en af de andre burde vise database kald så er det nemt at se hvad der sker.
Avatar billede obix Nybegynder
12. april 2005 - 19:36 #7
Ok tak for det =)
Avatar billede simonvalter Praktikant
12. april 2005 - 19:37 #8
det var så lidt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester