izmenjeno 1 put, poslednji put Vanja Petreski 26.02.2006. u 18:33
Izmene poruke
- Vanja Petreski26.02.2006. u 18:33zapis iz teksta poruke
Pozdrav Javistima :o)
Pre nego što počnem sa implementacijom jedne ideje, hteo sam da prodiskutujemo o eleganciji i ispravnosti iste, pa ako neko uspe da me ubedi da nije valjana, da ne gubim vreme.
Dakle, evo o čemu se radi:
Napravio sam jednu prostu GUI aplikaciju, gde korisnik unosi query, poziva se izvesna statička metoda koja generiše rezultat i ispisuje ga korisniku. Trik je u tome što je polje za unos teksta registrovano sa DocumentListener-om i pri svakoj promeni u tekst polju se poziva pomenuta metoda. Iako sam smatrao da je korisnik relativno spor ulazni uređaj, realne su situacije kada će on agresivnije unositi tekst, a tada frekventnije pozivanje metode već predstavlja problem iz razloga koji ću sada navesti.
Naime, "baza" sa kojim barata metoda se nalazi u 3 tekstuelna fajla u CSV formatu (ne pitajte me zašto tako). Jedan od njih sadrži informacije o vezama entiteta, a druga dva same entitete sa odgovarajućim identifikatorima. Da stvar bude zamršenija, rezultat na query nije jednoznačan što implicira da se mora proći kroz cela 2 od 3 fajla pri svakom query-ju, a kroz onaj jedan samo dok se ne naleti na pogodak.
Uglavnom, već vam je jasno da je i jedno pozivanje metode relativno sporo, iako zadovoljavajuće za jedan poziv. Problem nastaje pri kucanju teksta u tekst polju i brzom pozivanju metode. Efekat je taj da je CPU poprilično opterećen u tim trenucima i ispis u tekst polju za unos malo kasni u odnosu na kucanje, dakle program radi sporije nego što bi trebalo i to je korisniku očigledno i neprijatno.
S obzirom da je sam algoritam pretraživanja nemoguće više optimizovati, nije mi preostalo ništa drugo, nego da reorganizujem strukturu podataka. Pored toga, ne želim da koristim neku gotovu bazu jer hoću da se program može izvršiti sa standardnim Javinim paketima, dakle da se zavisnost svede na minimum tj. na nulu.
Imam sledeću zamisao: napraviću klasu koja će da koristi hash tabelu čiji će ključevi biti odgovarajuća polja, a sadržaji ulančane liste sa odgovarajućim elementima koja predstavljaju izlaz na zadati upit. Zatim ću instancirati 2 objekta pomenute klase (jer imam 2 smera ulaz-izlaz), napuniti ih podacima iz CSV-a, na odgovarajući našin, a zatim ta 2 objekta serijalizovati u datoteku.
Pri startovanju aplikacije, objekti se deserijalizuju, dakle dohvate i postave odgovarajuće reference.
Mene zanima, pre svega, da li je ideja u ovom slučaju o serijalizaciji i korišćenju pomenutih struktura podataka dobra, a zatim da li je pametno držati ova dva "teška" objekta na ovaj način u memoriji za svo vreme rada programa?
Baza u tekstualnom formatu nije bog zna šta velika, sigurno ne veća od 3 mb.
Računam da će performanse tada biti odlične, da li sam u pravu?
Jedino me brine veličina pomenutih objekata.
Haug
Pre nego što počnem sa implementacijom jedne ideje, hteo sam da prodiskutujemo o eleganciji i ispravnosti iste, pa ako neko uspe da me ubedi da nije valjana, da ne gubim vreme.
Dakle, evo o čemu se radi:
Napravio sam jednu prostu GUI aplikaciju, gde korisnik unosi query, poziva se izvesna statička metoda koja generiše rezultat i ispisuje ga korisniku. Trik je u tome što je polje za unos teksta registrovano sa DocumentListener-om i pri svakoj promeni u tekst polju se poziva pomenuta metoda. Iako sam smatrao da je korisnik relativno spor ulazni uređaj, realne su situacije kada će on agresivnije unositi tekst, a tada frekventnije pozivanje metode već predstavlja problem iz razloga koji ću sada navesti.
Naime, "baza" sa kojim barata metoda se nalazi u 3 tekstuelna fajla u CSV formatu (ne pitajte me zašto tako). Jedan od njih sadrži informacije o vezama entiteta, a druga dva same entitete sa odgovarajućim identifikatorima. Da stvar bude zamršenija, rezultat na query nije jednoznačan što implicira da se mora proći kroz cela 2 od 3 fajla pri svakom query-ju, a kroz onaj jedan samo dok se ne naleti na pogodak.
Uglavnom, već vam je jasno da je i jedno pozivanje metode relativno sporo, iako zadovoljavajuće za jedan poziv. Problem nastaje pri kucanju teksta u tekst polju i brzom pozivanju metode. Efekat je taj da je CPU poprilično opterećen u tim trenucima i ispis u tekst polju za unos malo kasni u odnosu na kucanje, dakle program radi sporije nego što bi trebalo i to je korisniku očigledno i neprijatno.
S obzirom da je sam algoritam pretraživanja nemoguće više optimizovati, nije mi preostalo ništa drugo, nego da reorganizujem strukturu podataka. Pored toga, ne želim da koristim neku gotovu bazu jer hoću da se program može izvršiti sa standardnim Javinim paketima, dakle da se zavisnost svede na minimum tj. na nulu.
Imam sledeću zamisao: napraviću klasu koja će da koristi hash tabelu čiji će ključevi biti odgovarajuća polja, a sadržaji ulančane liste sa odgovarajućim elementima koja predstavljaju izlaz na zadati upit. Zatim ću instancirati 2 objekta pomenute klase (jer imam 2 smera ulaz-izlaz), napuniti ih podacima iz CSV-a, na odgovarajući našin, a zatim ta 2 objekta serijalizovati u datoteku.
Pri startovanju aplikacije, objekti se deserijalizuju, dakle dohvate i postave odgovarajuće reference.
Mene zanima, pre svega, da li je ideja u ovom slučaju o serijalizaciji i korišćenju pomenutih struktura podataka dobra, a zatim da li je pametno držati ova dva "teška" objekta na ovaj način u memoriji za svo vreme rada programa?
Baza u tekstualnom formatu nije bog zna šta velika, sigurno ne veća od 3 mb.
Računam da će performanse tada biti odlične, da li sam u pravu?
Jedino me brine veličina pomenutih objekata.
Haug