View Full Version : [JAVA] DB Embedded piu performante
sto cercando un database embedded, che sia utilizzabile anche tramite java, il piu veloce possibile
per ora ho visto http://www.db4o.com/
oppure
http://www.h2database.com/html/performance.html
voi cosa ne pensate?
Esiste anche SQLite (di cui esistono i relativi bindings per Java). Per le performances dovresti informarti, non ho notizie a riguardo...
Secondo Oracle BerkeleyDB è piuttosto rapido. Il problema è che BerkeleyDB è di Oracle... insomma, c'è un conflitto di interessi nella misurazione.
...che intendi per embedded...la piattaforma e la struttura del db possono influenzare tale scelta...come anche le connessioni necessarie...
database embedded: http://mytech.it/unmapped/2001/01/01/sviluppare-con-java-i-database-embedded/
ho bisogno di un database che possa essere il piu veloce possibile nelle query. devo gestire all'incirca un milione di record presenti all'interno di una sola tabella
khelidan1980
16-04-2012, 23:36
database embedded: http://mytech.it/unmapped/2001/01/01/sviluppare-con-java-i-database-embedded/
ho bisogno di un database che possa essere il piu veloce possibile nelle query. devo gestire all'incirca un milione di record presenti all'interno di una sola tabella
bhe hai detto tutto e niente, cosa ci deva fare con questi record?
select * from tabella
where codice = '123'
cdimauro
17-04-2012, 12:06
Se le query sono soltanto di quel tipo, passa a un db non-relazionale (noSQL).
=KaTaKliSm4=
17-04-2012, 18:50
Il 90% delle volte si effettuano elaborazioni totalmente inutili e/o fatte male, lo dico per esperienza e fidati ne ho viste parecchie.
Se provi a spiegare un po la tua problematica forse possiamo esserti d'aiuto :)
Il problema molte volte non sta nei tempi di risposta da parte del DB, ma nei tempi di elaborazione dei risultati nella procedura.
Comunque sia, SQLite dovrebbe andar bene per i tuoi scopi, è uno dei migliori ed è stato sviluppato tra l'altro in C puro (le prestazioni sono notevoli).
Attendiamo tue!
Vi spiego, quello che sto facendo è un antivirus, lo sto sviluppando in vista della maturità, e siccome devo gestire un database contente circa 700,000 firme ho bisogno di un db che sia il più veloce possibile nella ricerca. avendo, in questo modo, un db veloce posso avere allo stesso tempo una scansione dei file piu rapida
...mh...sicuro che serva una ricerca per i virus e non un confronto obbligato di una lista?...
Secondo me ti conviene usare una struttura dati nativa di Java che andrai a caricare/deserializzare allo startup.
Non ti seguo
...carichi una lista con tutte le definizioni che scorri ad ogni ispezione...
ma che tipo di lista?
Se per ogni query del tipo che hai postato prima ti attendi al massimo un risultato, direi che una mappa o un array associativo siano l'ideale.
=KaTaKliSm4=
18-04-2012, 11:18
Vi spiego, quello che sto facendo è un antivirus, lo sto sviluppando in vista della maturità, e siccome devo gestire un database contente circa 700,000 firme ho bisogno di un db che sia il più veloce possibile nella ricerca. avendo, in questo modo, un db veloce posso avere allo stesso tempo una scansione dei file piu rapida
Le firme presenti nel database sono formate dai PRIMI N bytes del virus?Il numero dei bytes della firma è fisso?
Le firme presenti nel database sono formate dai PRIMI N bytes del virus?Il numero dei bytes della firma è fisso?
converto un file in byte, successivamente lo converto in esadecimale e lo cripto in una stringa md5 per poterla poi confrontare con quelle ho...
Se per ogni query del tipo che hai postato prima ti attendi al massimo un risultato, direi che una mappa o un array associativo siano l'ideale.
per mappa intendi una hashMap?
per mappa intendi una hashMap?
Per mappa intendo una classe che implementi l'interfaccia Map, non sapendo come andrai ad interagirci non posso sapere qual'è quella più adatta per le tue esigenze. :D
=KaTaKliSm4=
18-04-2012, 11:36
converto un file in byte, successivamente lo converto in esadecimale e lo cripto in una stringa md5 per poterla poi confrontare con quelle ho...
Ok ma, solitamente in un DB contenente le signatures dei virus non sono presenti tutti i bytes del file infetto ma soltanto una parte di essi, tanto quanto basta per non generare un falso positivo quindi, se prendi tutti i bytes di un file non puoi confrontarli con la signature del virus che in realtà non è altro che N bytes del file infetto.
Spiegaci, o meglio, inserisci un link a questo DB, se non sappiamo come è strutturato difficilmente possiamo darti un consiglio.
Ribadisco che, in base all'algoritmo di generazione firme cambia totalmente l'approccio alla base dati, sopratutto nella ricerca delle stesse!
Se tu avessi immagazzinato nel DB i primi 50 bytes del virus criptati in MD5, ti basterebbe leggere i primi 50 bytes del file, criptarli in MD5 e successivamente ricercarli nella tabella con una semplice select + where, evitando cosi di scorrere Nmila record.
scusate il ritardo... e vero non prendo tutti i bytes del file... prendo del file PE solo le sezioni https://encrypted-tbn1.google.com/images?q=tbn:ANd9GcQTsZ5Erq9Y7D6tYdZS540PHnawIAwx_pqLJnPGBEvwds3hYkhf
per maggiori info riguardo ai file PE ecco (http://www.compago.it/manuali/33-programmazione/241-struttura-di-un-file-pe.html)
i campi del database pensavo di farli cosi: MD5;NomeVirus
in teoria, comunque, utilizzando le map dovrei caricare tutte le mie firme in memoria... questi dati stanno in memoria per tutto il tempo che voglio? i dati, in memoria, li carico tutti all'avvio del mio programma? se dovessi eliminarli tutti dalla memoria come faccio?
Ciao, l'interfaccia java.util.Map, mette a disposizione un metodo void clear(), che svuota il contenuto della stessa.
Sei libero di ripopolarla nuovamente, da codice, eseguendo nuovamente delle put sulla stessa Map.
cdimauro
26-04-2012, 10:27
in teoria, comunque, utilizzando le map dovrei caricare tutte le mie firme in memoria... questi dati stanno in memoria per tutto il tempo che voglio? i dati, in memoria, li carico tutti all'avvio del mio programma? se dovessi eliminarli tutti dalla memoria come faccio?
Se il tuo progetto è un esperimento accademico, un db va benissimo se ti semplifica il codice (alla fine devi dimostrare che l'idea funzioni).
Nel mondo reale usa di tutto, ma non i db, perché anche se lavorassero in memoria farebbero rallentare tantissimo l'engine.
il progetto che sto realizzando è per la maturità... sicuramente opterò per utilizzare la java.utility.map che sicuramente si adatta meglio a una problematica reale, in cui i tempi di ricerca devono essere molto ristretti.... in conclusione, secondo voi, è una buona idea se caricassi inizialmente tutte le firme in un database e ad ogni avvio del programma le caricassi in memoria attraverso le map?
cdimauro
27-04-2012, 11:02
Sì, anche se lascerei tutto su db, visto che si tratta della tesi di maturità.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.