2009-09-17 11 views
6

Ho bisogno di un modo semplice per eseguire più script PHP per condividere i dati.Cosa sono i file più veloci, piatti o un database MySQL RAM?

Devo creare un DB MySQL con un motore di archiviazione RAM, e condividere i dati via che (può più script connettersi allo stesso database contemporaneamente?)

o se i file flat con un pezzo di dati per linea essere meglio ?

risposta

13

File flat? Nooooooo ...

Utilizzare un buon motore di database (MySQL, SQLite, ecc.). Quindi, per ottenere le massime prestazioni, utilizzare memcached nel contenuto della cache .


In questo modo, si ha la facilità e l'affidabilità della condivisione dei dati tra processi utilizzando un comprovato software server che gestisce la concorrenza, ecc ... Ma si ottiene la velocità di avere i dati nella cache.

Tenete a mente un paio di cose:

  1. MySQL ha una cache delle query. Se si eseguono ripetutamente le stesse query, è possibile ottenere un sacco di prestazioni senza aggiungere un livello di memorizzazione nella cache.
  2. MySQL è molto veloce comunque. Hai testato il carico per dimostrare che non è abbastanza veloce?
6

Si prega di non utilizzare file flat, per la sanità mentale dei manutentori.

Se stai cercando di avere dati condivisi, il più velocemente possibile, e puoi tenere tutto in RAM, allora memcached è la soluzione perfetta.

Se desideri la persistenza dei dati, utilizza un DBMS, come MySQL.

+0

Ho trovato questa domanda via Google perché sono uno di quei manutentori che devono risolvere i problemi in un php & mysql + flatfile hybrid. È un incubo. Se ci sono stati guadagni di prestazioni usando i flatfile, è stato più che roso dal costo di dover riparare e mantenere questo sistema di flatfile kludgy. +1 per pensare alla sanità mentale dei manutentori! – bejonbee

0

Direi che MySql DB sarebbe una scelta migliore a meno che non si disponga di un meccanismo per gestire i blocchi sui file flat (e un modo per controllare l'accesso). In questo caso il livello DB (indipendentemente dal DBMS specifico) agisce come uno strato di riferimento indiretto, senza che tu ti debba preoccupare.

Poiché l'OP non specifica un server Web (e PHP può effettivamente essere eseguito da una riga di comando) quindi non sono certo che le tecnologie di memorizzazione nella cache siano ciò che cercano qui. L'OP potrebbe essere alla ricerca di una sorta di trasformazione dei dati di volo che non è guidata da un sito web. Chissà.

+0

Bene, e un livello RAM è solo RAM, i file piatti continuano a parlare con un sottosistema del disco. A meno che tu non abbia ancora un'unità RAM (dai giorni DOS), che sarebbe praticamente la stessa, solo nessuna semantica di blocco. Owww. Adesso mi fa male la testa. – OldTroll

2

In genere, un DB è migliore, tuttavia, se si condivide una piccola quantità, per lo più statica, di dati, potrebbero esserci vantaggi di prestazioni (e semplicità) nel farlo con file flat.

Qualcosa di diverso dalla condivisione di dati banale e vorrei scegliere un DB tuttavia.

0

Se il sistema ha una cache PHP (che memorizza nella cache il codice PHP compilato in memoria, come APC), prova a inserire i dati in un file PHP, come codice PHP. Se devi scrivere dati, ci sono alcuni problemi di sicurezza.

1

Se si eseguono su più server, un approccio basato su file system non lo taglierà (a meno che non si disponga di un file system condiviso coerente, che è improbabile e potrebbe non essere scalabile).

Pertanto è necessario un database basato su server per consentire la condivisione di dati tra server Web.Se si tratta di prestazioni o disponibilità, l'applicazione supporterà più server Web.

0

Ho bisogno di un modo semplice per più script PHP in esecuzione per condividere i dati.

APC e memcached sono entrambe buone opzioni a seconda del contesto. shared memory potrebbe anche essere un'opzione.

Devo creare un DB MySQL con un motore di memoria RAM , e condividere i dati tramite che (possono più script connettersi al lo stesso DB contemporaneamente?)

che è anche un'opzione discreta, ma probabilmente non sarà veloce come APC o memcached.

Oppure i file piatti con un pezzo di dati per riga sono migliori?

Se si tratta di dati di sola lettura, questa è una possibilità, ma potrebbe essere più lenta di una qualsiasi delle opzioni precedenti. Soprattutto se i dati sono grandi. Invece di scrivere codice di analisi personalizzato, tuttavia, considera semplicemente la creazione di un array PHP e include() il file.

Se si tratta di un archivio dati a cui possono accedere diversi scrittori contemporaneamente, NON utilizzare assolutamente un file flat! È probabile che la scrittura su un file flat da più processi porti alla corruzione dei file. È possibile bloccare il file, ma si rischia di bloccare i problemi di conflitto e lunghi tempi di attesa del blocco.

La gestione di scritture concorrenti è la ragione per cui esistono applicazioni come mysql e memcached.

2

1- Dove il file flat può essere utile: Il file flat può essere più veloce di un database, ma in applicazioni molto specifiche. Sono più veloci se i dati vengono letti dall'inizio alla fine senza alcuna ricerca o scrittura. Se i dati non si adattano alla memoria e devono essere letti completamente per portare a termine il lavoro, 'può' essere più veloce di un database. Inoltre, se c'è molto più scrittura che lettura, splende anche il file flat, la maggior parte delle configurazioni di database predefinite dovranno fare in modo che le query di lettura attenderanno la fine della scrittura per mantenere indici e chiavi esterne. Rendere le query di scrittura di solito più lente delle semplici letture.

TD/LR versione: Utilizzare file flat per sistema basato su lavori (Aka, analisi di log semplici), non per query di ricerca web.

2- Cascate di file flat: Se si utilizza un file flat, è necessario sincronizzare gli script quando il file cambia utilizzando il meccanismo di blocco personalizzato. Che può portare a rallentamenti, corruzione fino a dead lock se si dispone di un bug.

3 Database basato su RAM? La maggior parte dei database ha nella cache di memoria i risultati delle query, gli indici di ricerca, rendendoli molto difficili da battere con un file flat. Dato che memorizzano nella cache, far funzionare tutto dalla memoria è per lo più inefficace e pericoloso. Meglio ottimizzare la configurazione del database.

Se stai cercando di ottimizzare le prestazioni utilizzando ram, vorrei innanzitutto eseguire gli script php, le pagine html e le immagini di piccole dimensioni da un'unità ram. Dove il meccanismo della cache è più probabile che sia rozzo e colpisce sistematicamente il disco fisso per non modificare i dati statici.

Un risultato migliore può essere raggiunto con un bilanciamento del carico, il clustering con connessioni backplane fino a array SAN basato su ram. Ma questo è un altro argomento.

5- è possibile che più script si colleghino allo stesso DB contemporaneamente?

Sì, si chiama pooling di connessioni. In php (lato client) è la funzione per aprire una connessione mysql-pconnect (http://php.net/manual/en/function.mysql-pconnect.php). Penso che sia possibile configurare la connessione massima aperta in php.ini. Un'impostazione simile sul lato server mysql definisce il massimo di connessioni client simultanee in /etc/mysql/my.cnf.

È necessario eseguire questa operazione per trarre vantaggio dall'elaborazione parallela della CPU ed evitare lo script php per attendere la query l'uno sull'altro. Aumenta notevolmente le prestazioni sotto carico pesante.

Esiste anche un pool di connessioni/pool di thread in configurazione Apache per client Web regolari. Vedi httpd.conf.

Scusa per il muro di testo, era annoiato. Louis.

Problemi correlati