In un database in cui tutte le tabelle sono InnoDB mi servirebbe una tabella con motore MyISAM per poter sfruttare una ricerca full-text.
Domanda: se in un db utilizzo una tabella con motore diverso dalle altre ci sono problemi?
In un database in cui tutte le tabelle sono InnoDB mi servirebbe una tabella con motore MyISAM per poter sfruttare una ricerca full-text.
Domanda: se in un db utilizzo una tabella con motore diverso dalle altre ci sono problemi?
no, anche perchè ci sono SEMPRE le tabelle myisam (quelle di sistema).
perdi un po' sotto il profilo delle risorse, per la duplicazione di tutto, in particolare myisam usa la cache del file system (fa la cache solo per gli indici, e non i dati), mentre innodb no.
attenzione che se la tabella ha molte righe le ricerche full text di myisam sono inusabili, non ci vuol nulla ad avere tempi dell'ordine della decina di secondi per ogni interrogazione.
anche i backup diventano delicati, in quanto ti tocca mettere un --opt (o equivalenti) in mysqldump, causando in sintesi il blocco totale durante le copie
---
se hai archivi grandi taglia la testa al toro e passa a sphinx
Ok tutto chiaro grazie.
sphinx non lo conosco, ora provo a vedere di cosa si tratta...
è un motore "parallelo" a mysql (in realtà funziona anche con altro, ma è assai integrato) che ti consente di creare degli indici "esterni" che puoi interrogare con una sorta di mini linguaggio.
E' piccolo o rompe poco i cosiddetti.
nelle versioni vecchie (fino ad oggi, praticamente) gli indici sphinx vanno aggiornati ogni tot (in modo batch).
in pratica li cancella, e li ricrea da zero (ci sono meccanismi per aggiornarli, ma veramente cervellotici).
in generale è molto veloce a ricrearli, del tipo 30 secondi per un milione di righe (macchina xeon con SAS da 15k)
a quel punto puoi fare interrogazioni full text (o anche solo text) in tempo... praticamente zero, ottenendo da sphinx una lista di chiavi dei record,che poi si usano per fetchare le righe mysql.
praticamente chiedi [dopo aver configurato la creazione degli indici sphinx ed averli fatti] "caro sphinx, cerca tutte le righe contenente la parola "pippo"
Sphinx ti risponde qualcosa tipo "3,4,12,1000,34,5"
A quel punto metti un select * from tabella where ID in ("3,4,12,1000,34,5") order by blablabla
- inciso: questo non è lento in mysql, l'uso di IN su una lista, è lentissima la IN su select innestata - fine inciso - riaperto inciso ciò non è del tutto vero con la versione 5.5 che è parecchio migliorata, ma non del tutto - chiuso inciso -
I pregi son tanti, il migliore (a mio parere) è la possibilità di fondere più campi VARCHAR e cercare lì dentro come fosse un LIKE %..% a velocità elevatissima; inoltre puoi ottimizzare certi tipi di query (di aggregazione ad esempio) moooolto oltre le possibilità di mysql, ed anche eliminare (spesso) i costi esorbitanti di LIMIT X,Y.
Interessanti (per chi ne ha bisogno) le possibilità di logging delle query
---
nelle versioni "nuove" la creazione degli indici dovrebbe essere "automatica"; dico "dovrebbe" perchè in produzione non ho nessuno di questi nuovi sphinx, ne ho solo uno in sviluppo, e non posso dir nulla di testato.
---
Se la cosa ti può interessare funziona bene sia su windows che su BSD (penso quindi anche linux, ma non uso normalmente quest'ultimo come server)
Grazie sei stato chiarissimo. Avevo anche già dato una letta sul sito ufficiale. Sembra veramente una cosa interessante.
Grazie.