PDA

View Full Version : DB Indexing


smartz
26-11-2005, 09:05
ciao a tutti. E' qualche tempo che mi sto crucciando con un bel dilemma.

situazione:

Web Application J2EE (servlet + JSP) abbastanza standard, con backend su un DB Oracle 8i.

L'applicazione ha una funzionalita' di search che "dovrebbe" estrarre i dati cercati dal DB. Attualmente indicizzo il DB con il pacchetto InterMedia di Oracle, ma e' MOSTRUOSAMENTE lento (30 sec per una search....).

Forse InterMedia non e' configurato al meglio, ma questa e' un altra discussione :)

La domanda e': qualcuno ha dei link o da condividere esperienze su altre tecniche di indexing/searching, o ancora su quello che e' lo stato dell'arte in materia???

ogni aiuto sara' molto apprezzato! :)

ciao

smartz
29-01-2006, 22:17
mi rispondo da solo:
lucene (http://lucene.apache.org/java/docs/index.html)!!!

magari sara' di aiuto ai posteri :)

Emyl
30-01-2006, 21:53
Non lo conoscevo... non si finisce mai di imparare.

Comunque ti consiglio di non sottovalutare Oracle Text (o Intermedia, secondo le versioni).

Ci vuole un bravo DBA per configurarlo al meglio :stordita: ma ti assicuro che e' un proiettile.

Parola di DBA. :p

smartz
30-01-2006, 22:04
ciao DBA :p

con la nostra base dati indicizziamo circa 150k record, che contengono in un campo clob del testo piuttosto "particolare" (sequenze di dna... atgtgatag ecc), oltre a un sacco di altre cose come date, nomi, indirizzi ecc.

una ricerca full text del tipo *gene* impiega circa 90 secondi :confused:

sistemati i bean per questi oggetti e indicizzata la base con lucene in 3 secondi abbiamo gli stessi risultati....

personalmente ho concluso che se indicizzi campo "free text" puro, intermedia e' ottimo, ma se hai dati strutturati (date, ecc) com un applicativo un po piu ad alto livello (lucene) puoi fare molto meglio....

per quanto riguarda l'ottimizzazione, io non l'ho seguita, mi occupo piu del codice... ma mi fido del nostro dba, che passe le sue belle 8 ore/giorno sul db :)

puo essere che oracle text non dia le prestazioni migliori se i campi sono molti, eterogenei e soprattutto clob?

smartz
30-01-2006, 22:08
http://java2.5341.com/msg/1843.html

Emyl
02-02-2006, 21:27
La tua analisi e' perfetta:

Oracle Text nasce, ed e' ottimizzato, per l'indicizzazione di testo puro. Non e' tanto il fatto di avere dei clob, puo' perfettamente gestirli, il problema se ho ben capito sono i token. Se sono troppo lunghi, e tendenzialmente simili tra loro, usare l'indice puo' avere risultati peggiori di una LIKE! Percio'... si sicuramente e' meglio pensare a qualche altra soluzione.

Per i campi datetime, a parer mio, la scelta migliore rimane il B*Tree, per nomi e indirizzi... bah forse un B*Tree rovesciato, visto che Oracle lo permette.

Ciao