Avatar billede Jonas Nybegynder
24. oktober 2011 - 09:07 Der er 13 kommentarer og
1 løsning

Smarteste måde at læse data: HashMap eller JDBC?

Hejsa,
nu rammer jeg lige tredje spørgsmål om et hobby-projekt jeg er gået igang med i Java! Jeg har nu drejer mit fokus iver på at hente nyhedsstreamers ned til en database - hvilket jeg har fået til at virke. Dog ikke med preparedstatements. Ideen er, at jeg ører en løkke der henter nye artikler ind i min database hvert 30. sekund. Den gør det fra samme sider, 12 timer om dagen.

Nu vil jeg så lave et program der analyserer det indhentede data. Men jeg er lidt i tvivl om den smarteste metode. Mit umiddelbare bud var, at lave kald til min database i samme frekvens som jeg henter artikler (kan man sætte den til at trigge når der er ny data?)... Det lægger bare en del beslag på databasen - kan man i stedet bruge et HashMap eller noget smartere?

Mvh.
Avatar billede thums Praktikant
24. oktober 2011 - 14:09 #1
Det kommer meget an på hvad du ønsker at bruge data'en til men typisk vil jeg mene at HashMap er en god løsning hvis du er ligeglad med om din indsamlede data går tabt når programmet lukkes eller fejler og går ned.

Databasen er god til at gemme data på harddisken men hvis du er ligeglad med det er det en nobrainer.

Hvis du vil gemme dine data ville jeg vælge at have et hashmap som blev opdateret med de nye entries efter du havde lagt dem i databasen, evt. lige efter du havde lagt det i databasen således at du slipper for først at ligge det i databasen hvorefter du skulle hive det ud igen.

Håber det var til nogen hjælp :-)
Avatar billede arne_v Ekspert
24. oktober 2011 - 20:17 #2
1 request per 30 sekunder er nu ikke meget.

Der er ikke en standard maade at notificere et program naar et andet program gemmer i databasen. Der findes vise muligheder med de fleste databaser, men hvis PreparedStatement er svaert, saa er det nok ikke noget for dig (det er 20 gange saa svaert som PS).

Hvis vi snakker om 2 programmer og en in memory data struktur vil det ikke umiddelbart fungere. Du vil skulle bruge noget a la JBoss TreeCache for at dele den in memory struktur.

Hvis du kun har 1 progam eller 2 client programmer som snakker med et server program er det nemt at bruge en in memory data struktur.
Avatar billede tokai Nybegynder
25. oktober 2011 - 19:13 #3
Du kan bruge et HashMap til dine data. Så kan du bruge dit id fra som nøgle i dit HashMap.

Prepared statements er ikke svært at bruge det er jeg ikke enig i Arne i.
Avatar billede tokai Nybegynder
25. oktober 2011 - 19:29 #4
PreParedStamenent er jo der for at gøre det lettere
Avatar billede arne_v Ekspert
25. oktober 2011 - 19:32 #5
faktisk skriver jeg ikke at PS er svaert - jeg skriver at hvis man betragter PS som svaert, saa er det helt udelukket at lave triggers som sender notifikationer ud paa en message queue ved aendringer
Avatar billede Jonas Nybegynder
25. oktober 2011 - 23:52 #6
Hey,

Jeg har læst lidt om HashMap nu, men det jeg lidt mangler er noget dybde i data. Altså at man kan smide fx en ley ind, og så flere variabler/data ind. Lidt som i en tabel med flere kolonner. Jeg vil gerne have plads til dato, forfatter, titel, kolofon, tekst osv. Evt bare med et beskrivelse ord for hver attribut- det trorjeg ikke man kan i HashMap vel? Kan man det i noget andet?

Jeg troede egentligt at arraylist kunne det HashMap kan og at HashMap kunne det jeg skulle bruge!:/
Avatar billede arne_v Ekspert
26. oktober 2011 - 01:04 #7
ArrayList<X> eller HashMap<X> hvor X er en data klasse med flere felter!
Avatar billede Jonas Nybegynder
26. oktober 2011 - 09:44 #8
Ahhr... Så bygger jeg bare min egen klasse? Er det det man kalder Collection?
Avatar billede arne_v Ekspert
26. oktober 2011 - 14:20 #9
ArrayList og HashMap er collections - X er ikke.
Avatar billede Jonas Nybegynder
26. oktober 2011 - 23:02 #10
Hvordan definerer man så indholdet er x, hvis jeg gerne vil have en række Strings og doubles jeg vil bruge?
Avatar billede arne_v Ekspert
26. oktober 2011 - 23:37 #11
Du giver klassen et antal private fields med public getter og setters.
Avatar billede Jonas Nybegynder
28. oktober 2011 - 13:10 #12
Hmm, okay - det ved jeg sgu ikke lige hvordan jeg gør :)  Det må jeg læse lidt mere om, eller ende ud i endnu et spørgsmål ;)

Tokai svarede egentligt på mit spørgsmål først og fremmest... Men Arne har også givet en del inputs... Er i OK med en 40/20 fordeling? Og gider i smide svar?
Avatar billede arne_v Ekspert
28. oktober 2011 - 14:49 #13
Klassisk eksempel:

import java.io.Serializable;

public class Data implements Serializable {
    private int iv;
    private String sv;
    public Data(){
        this(0, "");
    }
    public Data(int iv, String sv) {
        this.iv = iv;
        this.sv = sv;
    }
    public int getIv() {
        return iv;
    }
    public void setIv(int iv) {
        this.iv = iv;
    }
    public String getSv() {
        return sv;
    }
    public void setSv(String sv) {
        this.sv = sv;
    }
    @Override
    public String toString() {
        return "[" + iv + "," + sv + "]";
    }
}
Avatar billede arne_v Ekspert
28. oktober 2011 - 14:50 #14
40/20 er helt fin

og svar fra mig
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

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