Torna in homepage www.vincenzomanzoni.com
Homepage personale e blog di Vincenzo Manzoni
 
 FAQFAQ   CercaCerca   Cerca con GoogleCerca con Google   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati   Feed AtomFeed
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

Problema...
Vai a 1, 2  Successivo
 
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> L'angolo di Leonardo Da Vincienzomanzoni.com
Precedente :: Successivo  
Autore Messaggio
Giorgio
Utente adulto
Utente adulto


Registrato: 08/01/04 19:19
Messaggi: 1793
Residenza: Sedrina (Bergamo)

MessaggioInviato: Lun Nov 03, 2008 11:15 am    Oggetto: Problema... Rispondi citando

Ho una domanda da porre ad ingegneri informatici e non.

Ho una tabella di un database che possiede più di 4 milioni di record e per accedervi velocemente ho creato una serie di indici: funziona perfettamente.

Ora però ho un problema. Lo spazio occupato è troppo grande, perciò volevo sapere se conoscevate una maniera alternativa per poter accedere ai dati, ad esempio utilizzando un file binario o qualcosa del genere...

Ogni record della tabella possiede molti campi (circa una ventina), potrei eliminarne molti, ma lo spazio occupato rimane troppo grande. Mi serve una soluzione differente, che mi permette di avere uno spazio di memoria occupata molto più basso ed allo stesso tempo un accesso veloce ai dati.

Qualche idea?
_________________
Nessuno potrà viver la mia vita al posto mio, per quanto mi identifichi nel battito di un altro, sarà sempre attraverso questo cuore... - Jovanotti, "Mezzogiorno"

-- My site
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Lun Nov 03, 2008 12:07 pm    Oggetto: Re: Problema... Rispondi citando

Giorgio ha scritto:
Ora però ho un problema. Lo spazio occupato è troppo grande, perciò volevo sapere se conoscevate una maniera alternativa per poter accedere ai dati, ad esempio utilizzando un file binario o qualcosa del genere...

Ci dai qualche dettaglio in più? Per esempio, sono gli indici o i dati che occupano tanto spazio? Qual è l'ordine di grandezza? Rolling Eyes

Sembra un problema interessante. Wink
Top
Profilo Invia messaggio privato HomePage
Giorgio
Utente adulto
Utente adulto


Registrato: 08/01/04 19:19
Messaggi: 1793
Residenza: Sedrina (Bergamo)

MessaggioInviato: Lun Nov 03, 2008 12:11 pm    Oggetto: Re: Problema... Rispondi citando

vinz ha scritto:
Ci dai qualche dettaglio in più? Per esempio, sono gli indici o i dati che occupano tanto spazio? Qual è l'ordine di grandezza?

No no il problema è il grande numero di dati, non gli indici.

Beh, lo spazio occupato credo che sia intorno ai 900 Mbyte, compresso però... Smile

A me basterebbe avere un file con poche informazioni per ogni record, non tutte quelle presenti nel DB. L'importante è che occupi poco spazio e che abbia un accesso veloce. Se l'accesso non fosse così veloce potrei pensare di indicizzare il tuttoperò non so quanto convenga, dovrei fare un po' di prove.
_________________
Nessuno potrà viver la mia vita al posto mio, per quanto mi identifichi nel battito di un altro, sarà sempre attraverso questo cuore... - Jovanotti, "Mezzogiorno"

-- My site
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
Pastacolpesto
Utente adolescente
Utente adolescente


Registrato: 19/05/04 18:47
Messaggi: 730
Residenza: Bergamo

MessaggioInviato: Lun Nov 03, 2008 2:01 pm    Oggetto: Rispondi citando

900 Mega per 4 milioni di record? Ma sei sicuro?
Che db è?

Comunque se non ti servono tutte le informazioni ti consiglio di farti un'altra tabella con sole le informazioni che ti servono, sicuramente la cosa è più veloce.
Che tipo di query dovresti fare?

Io non l'ho mai usato, ma se è SQl server c'è un tool che mentre fai un po' di query cerca di trovare una fantomatica esecuzione ottima della query piazzando indici qua e là. L'hai provato?
_________________
La teoria è quando si sa tutto e niente funziona. La pratica è quando tutto funziona e nessuno sa il perché. Noi abbiamo messo insieme la teoria e la pratica: non c'è niente che funzioni... e nessuno sa il perché..
A.Einstein
Top
Profilo Invia messaggio privato Invia e-mail MSN
Tomaux
Utente adulto
Utente adulto


Registrato: 12/08/04 17:56
Messaggi: 2494
Residenza: bergamo

MessaggioInviato: Lun Nov 03, 2008 4:07 pm    Oggetto: Rispondi citando

Imparati le informazioni a memoria!
_________________
A volte mi fermo e penso:
"THE EARTHQUAKE!!! OH MY FUCKING GOD, THE EARTHQUAKE!!!"
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
Francesco
Utente adulto
Utente adulto


Registrato: 23/12/03 15:24
Messaggi: 2113
Residenza: Busnago (MI)

MessaggioInviato: Lun Nov 03, 2008 8:22 pm    Oggetto: Rispondi citando

A mio parere, e per quello che ho studiato di db, il fattore occupazione su disco vs. velocità di accesso è un trade off, ovvero aumenti la velocità aumentando gli indici e quindi lo spazio occupato e viceversa, non è che puoi scappare tanto lontano da questo...
Non vorrei dire stupidate, ma mi sembra di ricordare che il para o qualche esercitatore all'epoca ci avesse detto che i db più veloci e speed-critical usano anche il 90% dello spazio occupato solo per gli indici!

Come consiglio ti direi di ridurre all'osso i campi, tanto per iniziare, quindi cercare se esiste qualcosa che ti permetta di comprimere in maniera trasparente all'utilizzatore i dati del db, inoltre controllare se esistono dati ridondanti e se ad esempio una diversa struttura potrebbe migliorare le cose. Se hai query statiche e predefinite anche un'ottimizzazione delle query potrebbe essere una via percorribile.
Infine dopo che hai rimpicciolito il tutto, ti metti a smanettare con gli indici fino a quando raggiungi la dimensione limite che vuoi avere. Così a naso ti direi che probabilmente puoi indicizzare in modo "custom" sulle tue query, sempre che siano statiche ovviamente, ovvero individuare qual'è l'operazione più dispendiosa che esegue la tua query e cercare di lavorare su quell'aspetto, quest'ultima cosa me la sono appena inventata, non sono affatto sicuro che sia una strada percorribile nella pratica!
_________________
God is real........... unless declared integer or long
Top
Profilo Invia messaggio privato Invia e-mail
Giorgio
Utente adulto
Utente adulto


Registrato: 08/01/04 19:19
Messaggi: 1793
Residenza: Sedrina (Bergamo)

MessaggioInviato: Mar Nov 04, 2008 10:19 am    Oggetto: Rispondi citando

Allora, come già avevo detto la riduzione dei campi non è un problema, non tutte le informazioni presenti sono necessariamente utili.

Grazie per i vostri consigli, ma a me interessa avere una soluzione alternativa all'utilizzo di un DB... Se esiste. Cioè un file con un formato particolare o qualcosa di simile, dove posso scrivere gli stessi dati presenti nel DB (anzi molti meno).
_________________
Nessuno potrà viver la mia vita al posto mio, per quanto mi identifichi nel battito di un altro, sarà sempre attraverso questo cuore... - Jovanotti, "Mezzogiorno"

-- My site
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
Francesco
Utente adulto
Utente adulto


Registrato: 23/12/03 15:24
Messaggi: 2113
Residenza: Busnago (MI)

MessaggioInviato: Mar Nov 04, 2008 11:18 am    Oggetto: Rispondi citando

XML? CSV? Però l'accesso a questi file è sequenziale, quindi dovresti scorrere sempre tutto e con milioni di record.... ci metti anni... non so, magari esistono metodi di accesso alternativi, magari no... Very Happy
_________________
God is real........... unless declared integer or long
Top
Profilo Invia messaggio privato Invia e-mail
Giorgio
Utente adulto
Utente adulto


Registrato: 08/01/04 19:19
Messaggi: 1793
Residenza: Sedrina (Bergamo)

MessaggioInviato: Mar Nov 04, 2008 11:41 am    Oggetto: Rispondi citando

Francesco ha scritto:
XML? CSV? Però l'accesso a questi file è sequenziale, quindi dovresti scorrere sempre tutto e con milioni di record.... ci metti anni... non so, magari esistono metodi di accesso alternativi, magari no... Very Happy
Potrei indicizzarli ed accedere all'indice, ma speravo che qualcuno di voi conoscesse soluzioni alternative ...
_________________
Nessuno potrà viver la mia vita al posto mio, per quanto mi identifichi nel battito di un altro, sarà sempre attraverso questo cuore... - Jovanotti, "Mezzogiorno"

-- My site
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
abaddon
Utente adulto
Utente adulto


Registrato: 05/04/04 16:32
Messaggi: 2033

MessaggioInviato: Mar Nov 04, 2008 7:47 pm    Oggetto: Rispondi citando

4milioni di righe su file è da suicidio che sia xml o meno o_o
francamente non ho ben capito il problema all'inizio pensavo che volevi ottimizzare il db, ora parli di metodi alternativi per memorizzare le cose...

a sto punto se effettivamente è così il consiglio di Fede non è male, nel senso, selezioni le cose che ti interessano e ti ricrei un db customizzato con i dati che ti interessano e quello grosso lo "butti".

Potresti guardare anche i tipi di dato da utilizzare, infatti a seconda del tipo di dato che hai cambia la dimensione es:

char=1 byte int=4 byte; long=4 byte (prese al volo da un sito, spero siano giusti perchè francamente non mi ricordavo più Very Happy)

comunque il discorso è che se usi un campo char per scrivere 10000 hai usato 5byte se usavi un int ne usavi 4byte e lo stesso il contrario, se hai numeri piccoli allora forse ti conviene salvarli come char così usi 1 byte invece di 4 byte costanti... perdendo ovviamente gli operatori anche se volendo potresti usare alcuni comandi tipo CAST o CONVERT per castare i dati al volo a livello di query (in SQLSERVER ci sono sti comandi perchè li ho usati recentemente, penso anche negli altri DB medio alti)

boh queste sono le cose che mi vengono in mente, poi ci sarebbe da leggere qualche enciclopedia sulla gestione dei dati presumo...
Top
Profilo Invia messaggio privato HomePage
Andrea
Moderatore
Moderatore


Registrato: 23/12/03 13:10
Messaggi: 5200

MessaggioInviato: Mar Nov 04, 2008 9:04 pm    Oggetto: Rispondi citando

XML è da spararsi...
Top
Profilo Invia messaggio privato MSN
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Mar Nov 04, 2008 10:38 pm    Oggetto: Rispondi citando

Giorgio, secondo me dovresti specificare meglio i requisiti. Puoi usare o no un database? Perché se sì, la soluzione migliore è quella di fare una analisi delle tabelle attuali, fare una proiezione sugli attributi che ti sevono, costruirci sopra degli indic furbi (hash o BTree a seconda) e poi usare SQL per le query.
Difficilmente puoi, con moderato sforzo, fare meglio di un db in termini di velocità.

Se invece non puoi usare un db, devi per forza usare un file binario. A questo punto ti devi creare due file: uno che contiene i dati e uno che contiene gli indici ai dati. All'avvio, carichi in memoria solo il contenuto dell'indice, sull'indice fai le interrogazioni e quindi accedi al file con le informazioni.

Personalmente, non vedo altre alternative. Smile
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
Giorgio
Utente adulto
Utente adulto


Registrato: 08/01/04 19:19
Messaggi: 1793
Residenza: Sedrina (Bergamo)

MessaggioInviato: Mer Nov 05, 2008 12:18 pm    Oggetto: Rispondi citando

vinz ha scritto:
Personalmente, non vedo altre alternative. Smile
Ok, a quanto sembra non ci sono soluzioni migliori a quelle che già conoscevo...

Comunque sia, pensavo di essere stato chiaro. Mi ripeto: il DB che possiedo è molto grande ed occupa un sacco di spazio, ma l'accesso ai suoi dati l'ho reso molto veloce grazie all'utilizzo di indici. Per diminuire lo spazio basta che mi creo un DB identico ma con meno campi per ogni record, e fin qui ok... Mma a questa conclusione c'ero già arrivato.

Io volevo sapere se esisteva una alternativa all'utilizzo di un DataBase...
Giorgio ha scritto:
volevo sapere se conoscevate una maniera alternativa per poter accedere ai dati, ad esempio utilizzando un file binario o qualcosa del genere...
Da quanto mi avete detto, l'unico sistema che conoscete è proprio l'utilizzo del file binario, perciò nulla che non conoscevo già... Peccato Confused
_________________
Nessuno potrà viver la mia vita al posto mio, per quanto mi identifichi nel battito di un altro, sarà sempre attraverso questo cuore... - Jovanotti, "Mezzogiorno"

-- My site
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
vinz
Amministratore
Amministratore


Registrato: 12/12/03 12:56
Messaggi: 6648
Residenza: San Pellegrino Terme (Bergamo)

MessaggioInviato: Mer Nov 05, 2008 2:43 pm    Oggetto: Rispondi citando

Dato che 900 MB non sono poi "moltissimi" Wink, potresti pensare di caricarli prima in memoria e poi accederci direttamente. In questo caso, devi crearti tu una struttura che li contenga, allocare lo spazio in memoria in maniera dinamica (malloc o new) e poi crearti una struttura ad indice (magari ti basta solo un hash) per andare a "prenderli".
_________________
Let the future tell the truth and evaluate each one according to his work and accomplishments. The present is theirs; the future, for which I really worked, is mine.
Nikola Tesla
Top
Profilo Invia messaggio privato HomePage
Giorgio
Utente adulto
Utente adulto


Registrato: 08/01/04 19:19
Messaggi: 1793
Residenza: Sedrina (Bergamo)

MessaggioInviato: Mer Nov 05, 2008 4:21 pm    Oggetto: Rispondi citando

vinz ha scritto:
Dato che 900 MB non sono poi "moltissimi" Wink, potresti pensare di caricarli prima in memoria e poi accederci direttamente. In questo caso, devi crearti tu una struttura che li contenga, allocare lo spazio in memoria in maniera dinamica (malloc o new) e poi crearti una struttura ad indice (magari ti basta solo un hash) per andare a "prenderli".
Mmh... Rolling Eyes Si giusto, non so esattam come fare, però in effetti caricandoli in memoria avrei un accesso più veloce.
_________________
Nessuno potrà viver la mia vita al posto mio, per quanto mi identifichi nel battito di un altro, sarà sempre attraverso questo cuore... - Jovanotti, "Mezzogiorno"

-- My site
Top
Profilo Invia messaggio privato Invia e-mail HomePage MSN
Mostra prima i messaggi di:   
Questo forum è chiuso: Non puoi inserire, rispondere o modificare gli argomenti.   Quest'argomento è chiuso: Non puoi inserire, rispondere o modificare i messaggi.    Indice del forum -> L'angolo di Leonardo Da Vincienzomanzoni.com Tutti i fusi orari sono GMT 1 ora
Vai a 1, 2  Successivo
Pagina 1 di 2

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi


Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it