Pagina 1 di 1

sqlite da oltre un giga

Inviato: sab 29 ott 2011, 22:09
da ZeroUno
come lo vedete un database sqlite gramde più di un gibabyte?

Ho un hosting che mi offre 10G di spazio web, ma di questi posso dedicare solamente un giga a mysql, mentre io ho bisogno di un database più grande. Anzi, per la precisione ho UNA tabella che può superare il giga tra dati e indici

La versione di php installata supporta sqlite così ho pensato di usare quello.
Fortunatamente ho bisogno di performance solamente in lettura, ma sinceramente non ce le vedo bene neanche in lettura le performance.

Che voi sappiate, sqlite li gestisce file così grandi?
E performance?

Re: sqlite da oltre un giga

Inviato: sab 29 ott 2011, 22:39
da ilmich
http://www.sqlite.org/limits.html
la dimensione massima di un database (con sqlite3) è di 14TB quindi per quello dovresti essere ok.
per quanto riguarda le performance non mi sono mai spinto fino a questo punto pero' mi permetto di suggerirti lo sharding, ovvero la tecnica di definire una regola logica che ti consenta di suddividere i tuoi dati in database piu' piccoli.
eppoi cache per le select piu' complicate ( per quelle banali non ha senso se usi sqlite )
con un po' di pazienza si ottengono risultati notevoli :)

Re: sqlite da oltre un giga

Inviato: dom 30 ott 2011, 15:19
da ZeroUno
Ho in verità tre tabelle, ma due sono piccole rispetto alla prima.
Il problema è che non c'è una grande organizzazione da fare con i dati che ho.
Ho una tabella con due campi varchar (uno più corto e uno più lungo), e un id per legarla alle prime due, e qualche vagonata di righe.
la ricerca è del tipo campocorto LIKE '%stri%nga%', quindi è una ricerca banale, ma può tirare fuori molti risultati, e a seconda della ricerca può impiegare anche fino a 2 minuti (con mysql). I risultati li cacho perchè li devo mostrare da browser e se superano i 20 elementi li devo mostrare in più pagine e con la chache mi evito di rifare ogni volta la query.

Mi vengono in mente ora un paio di ottimizzazioni.
La prima forse mi consentirebbe di fare tutto con mysql:
1) dal momento che la ricerca avviene esclusivamente su campocorto e campolungo è solo l'output, potrei pensare di inserire il secondo campo zippato
2) faccio due tabelle, legate uno ad uno, la prima contiene solo campocorto e la seconda solo campolungo, poi faccio la ricerca sulla prima tabella, prelevo gli id e li cerco nella seconda tabella

Re: sqlite da oltre un giga

Inviato: dom 30 ott 2011, 15:41
da ilmich
in realtà è proprio con tabelle tipo le tue che lo sharding ha la sua piu' semplice applicazione.
ZeroUno ha scritto:2) faccio due tabelle, legate uno ad uno, la prima contiene solo campocorto e la seconda solo campolungo, poi faccio la ricerca sulla prima tabella, prelevo gli id e li cerco nella seconda tabella
denormalizzandolo in questo modo infatti, il tuo database ha una tabella di lookup fatta con mysql/sqlite, con tutti i soliti vantaggi in termini di ricerca e efficienza.
una volta che hai un insieme di id, come recuperi il dato sta alla tua immaginazione :)

ti suggerisco un paio di idee:
- puoi andare a pescare direttamente da filesystem oggetti php serializzati(magari organizzandoli in sottocartelle).
- puoi usare sqlite suddividendo i database in base a dei range di id (1-100) primo database (101-200) secondo database e via dicendo (questo è lo sharding)