Avatar billede themepark Nybegynder
28. december 2005 - 16:46 Der er 22 kommentarer og
1 løsning

Valg af database til Java

Rent performance mæssigt, hvad er så den bedste database form at vælge at arbejde med i Java, og hvordan bruger man den i så fald i Java? De eneste jeg kender til er MySQL og Access.
Avatar billede arne_v Ekspert
28. december 2005 - 16:53 #1
Afhænger jo nok lidt af hvordan du skal bruge databasen.

Simple INSERT uden behov for transaktions support, så er der nok ikke meget
som kan slå MySQL med MyISAM tabeller.

INSERT med behov for transaktions support, så lyder Oracle eller MS SQLServer
meget interessante.

Primært queries ! Hvilken slags queries ?
(det kan være ret afgørende om SQL dialekten understøtter det du skal bruge)
Avatar billede themepark Nybegynder
28. december 2005 - 16:54 #2
Hmm...jeg havde regnet med at det var mere simpelt end som så. Ærligt talt kender jeg ikke ret meget til databaser udover Access. Så tja, de fleste af de begreber du nævner kender jeg ikke.
Avatar billede arne_v Ekspert
28. december 2005 - 16:54 #3
Uanset hvilken database du vælger så står det fast at du skal bruge JDBC.

Dit valg er så om du vil bruge JDBC direkte i din applikation eller
om du vil bruger noget mellem din kode og JDBC kaldene.

(det noget kunne så være f.eks. JDO eller Hibernate)
Avatar billede arne_v Ekspert
28. december 2005 - 16:57 #4
P.g.a. den meget standardiserede tilgang så er Java nok et af de
environments hvor det er nemmest at skifte database, så måske skulle
du starte med MySQL og se hvordan det går. Du kender den database og
hvis du skal skifte senere så er det ikke så vanskeligt.

Undgå Access. MS har ikke lavet en JDBC driver til Access så det er
app---JDBC ODBC bridge---ODBC driver---Access og det virker dårligt.
Avatar billede themepark Nybegynder
28. december 2005 - 16:59 #5
Ja, Access havde jeg heller ikke regnet med at bruge, men det er stort set det jeg er bekendt med. Men jeg kan høre at jeg har en del begreber jeg skal have lært, kender du nogle gode steder til at lære Java og databaser? Jeg aner intet om det.
Avatar billede arne_v Ekspert
28. december 2005 - 17:20 #6
Avatar billede mikkelbm Nybegynder
28. december 2005 - 17:28 #7
Jeg har brugt HSQLDB med stor succes. Men mine krav mht performance har heller ikke været store. Ta' evt. selv et kig:

http://hsqldb.org/

(Og så er selve databasen skrevet i Java)
Avatar billede mikkelbm Nybegynder
28. december 2005 - 17:30 #8
Jeg ser lige på deres forside, at de faktisk har en performancetest hvor de sammenligner med andre databaser.
Avatar billede mikkelbm Nybegynder
28. december 2005 - 17:31 #9
Nu spørger du jo godt nok om performance, men hvis jeg skulle nævne en af de store fordele ved HSQLDB, så er det, at den er utrolig nem at embedde med sin applikation - så man ikke skal til at installere en server (MySql, MsSql, osv...)
Avatar billede arne_v Ekspert
28. december 2005 - 20:14 #10
Jeg har en formodning om at HSQLDB vil være langsom til nogle ting, men
en test jeg lavede viste udmærket query performance og absolut fremragende insert
performance (dog med et noget voldsomt diskplads forbrug).
Avatar billede trp79 Nybegynder
31. december 2005 - 12:53 #11
Lige et par links til lidt kode eksempler fra javabog.dk:
http://javabog.dk/OOP/kapitel20.jsp (brug dog ikke jdbc-odbc som i eksemplet)
http://javabog.dk/VP/kapitel8.jsp (her benytes jdcb)

Ellers ligger der en del eksempler her på exp med hvordan man kommunikerer med såvel mysql som hsqldb. Det er iøvrigt rart at have et grafisk interface til sin db, så sørg for også at have et sådant - det kan man få til mysql og sikkert også til hsqldb.
Avatar billede themepark Nybegynder
05. januar 2006 - 23:37 #12
Okay, jeg har fået kigget lidt på MySQL nu, og JDBC tutorialen ser jo dejlig nem ud :) Men jeg har det problem, at jeg ikke rigtigt ved hvad transaktioner er, ud fra den smule jeg har kunnet finde, lyder det ikke som noget jeg skal bruge. Men er der nogle der kan forklare mig hvad det går ud på?

Mht. queries, tja så skal jeg kunne hente data fra en bestemt tabel, lave beregninger på det og så indsætte mine tal i de allerede eksisterende rækker.
Avatar billede arne_v Ekspert
05. januar 2006 - 23:40 #13
den meget korte variant:

en transaktion består af en eller flere (giver mest mening ved to eller flere)
SQL sætninger som opdaterer en database

hele transktionen bliver enten gennemført (committet) eller ikke gennemført (rolledback)

d.v.s. enten alle SQL opdateringerne eller ingen
Avatar billede arne_v Ekspert
05. januar 2006 - 23:42 #14
forestil dig:

UPDATE bankkonto SET saldo=saldo-100 WHERE bruger='themepark';
UPDATE bankkonto SET saldo=saldo+100 WHERE bruger='arne_v';

hvis man udførte den første og systemet crashede inden den anden var blevet
udført så ville der forsvinde 100 kroner ud i den blå luft

med transaktioner bliver enten begge eller ingen af de 2 UPDATE udført
Avatar billede themepark Nybegynder
05. januar 2006 - 23:44 #15
Hmm, ja det er jo meget smart :) Men det er nu ikke noget der er videre nødvendigt for mig at have med :) Mht. queries er der vel ikke noget ekstra der? Det er jo bare standard SQL sætninger, som findes i alle dialekter, ikke?
Avatar billede arne_v Ekspert
05. januar 2006 - 23:49 #16
queries er mindre vigtige i forhold til transaktioner

der er dog lidt nemlig scenariet:

connection 1: BEGIN
connection 1: UPDATE bankkonto SET saldo=saldo-100 WHERE bruger='themepark';
connection 2: SELECT saldo FROM bankkonto WHERE bruger='themepark';
connection 1: UPDATE bankkonto SET saldo=saldo+100 WHERE bruger='arne_v';
connection 1: COMMIT

hvad returnerer den SELECT ?
Avatar billede themepark Nybegynder
05. januar 2006 - 23:56 #17
Fair nok, du spurgte bare om det i starten, så jeg skulle lige være sikker på at der ikke var noget at tage hensyn til der :)

Øhm...godt spørgsmål...der må være en fælde et sted siden du siger det på den måde. Den returnerer saldoen på min konto efter de 100 kroner er trukket? Jeg ville gætte på at transaktioner har første prioritet :)
Avatar billede arne_v Ekspert
05. januar 2006 - 23:59 #18
svaret er at det afhænger af det man kaldet transaction isolation level

med et lavt sådan så vil den læse efter at de 100 kr. er trukket

med et højt sådan vil den læse den oprindelige saldo fordi man ikke
vil tillade andre connections at læse data som ikke er commited
(og som måske aldrig bliver commited)
Avatar billede arne_v Ekspert
06. januar 2006 - 00:00 #19
det er ikke alle som har brug for transaktioner

men har man brug for dem, så har man tit hårdt brug for dem
Avatar billede themepark Nybegynder
06. januar 2006 - 00:00 #20
Hmm, okay, der lader til at være meget at sætte sig ind i, men som sagt, jeg får ikke brug for det :) Så MyISAM vil være det bedste at bruge?
Avatar billede arne_v Ekspert
06. januar 2006 - 00:02 #21
hvis du ikke har brug for transaktioner så er MySQL med MyISAM tabeller
en udmærket løsning (men der er også andre - bl.a. HSQLDB)
Avatar billede themepark Nybegynder
06. januar 2006 - 00:03 #22
Okay, jamen det passer mig fint da jeg også har forholdsvis nemt ved at finde ud af MySQL :) Smid et svar, så accepterer jeg i morgen.
Avatar billede arne_v Ekspert
06. januar 2006 - 00:07 #23
svar
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