Domanda

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

Devo creare un DB MySQL con un motore di archiviazione RAM e condividere i dati tramite quello (è possibile che più script si colleghino allo stesso DB contemporaneamente?)

O sarebbe meglio file flat con un dato di dati per riga?

È stato utile?

Soluzione

File flat? Nooooooo ...

Utilizza un buon motore DB (MySQL, SQLite, ecc.). Quindi, per ottenere le massime prestazioni, utilizza memcached per memorizzare in cache i contenuti.


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

Tieni a mente un paio di cose:

  1. MySQL ha una cache di query. Se stai inviando ripetutamente le stesse query, puoi ottenere molte prestazioni senza aggiungere un livello di memorizzazione nella cache.
  2. MySQL è comunque molto veloce. Hai provato il carico per dimostrare che non è abbastanza veloce?

Altri suggerimenti

Per favore, non usare file flat, per la sanità mentale dei manutentori.

Se stai solo cercando di condividere i dati, il più velocemente possibile, e puoi tenerli tutti nella RAM, allora memcached è la soluzione perfetta.

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

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

Qualunque cosa diversa dalla banale condivisione di dati e sceglierei comunque un DB.

1- Dove può essere utile il file flat: 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 rientrano nella memoria e devono essere letti completamente per completare il lavoro, può "essere" più veloce di un database. Inoltre, se c'è molto più scrittura che lettura, anche il file flat risplende, la maggior parte delle impostazioni predefinite dei database dovrà far sì che le query di lettura attendano il completamento della scrittura per mantenere gli indici e le chiavi esterne. Rendere le query di scrittura di solito più lente delle letture semplici.

TD / LR vesion: Utilizzare file flat per il sistema basato sui lavori (Aka, analisi dei registri semplici), non per le query di ricerca Web.

2- Cadute di file flat:   Se stai andando con un file flat, dovrai sincronizzare i tuoi script quando il file cambia usando il meccanismo di blocco personalizzato. Il che può portare a rallentamento, corruzione fino a dead dead lock in caso di bug.

3- Database basato su RAM? La maggior parte dei database ha nella cache di memoria risultati di query, indici di ricerca, rendendoli molto difficili da battere con un file flat. Poiché memorizzano nella memoria cache, farla funzionare interamente dalla memoria è per lo più inefficace e pericolosa. Meglio ottimizzare correttamente la configurazione del database.

Se stai cercando di ottimizzare le prestazioni usando ram, vorrei prima guardare i tuoi script php, le pagine html e le piccole immagini da un disco ram. Dove è più probabile che il meccanismo della cache sia grezzo e colpisca sistematicamente il disco rigido per non modificare i dati statici.

È possibile ottenere risultati migliori con un bilanciamento del carico, raggruppando in cluster con connessioni backplane fino a un array SAN basato su RAM. Ma questo è un altro argomento.

5- più script possono connettersi contemporaneamente allo stesso DB?

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

Devi farlo per sfruttare l'elaborazione parallela della cpu ed evitare lo script php per attendere l'interrogazione dell'altra finitura. Aumenta notevolmente le prestazioni sotto carico pesante.

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

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

Se li stai eseguendo su più server, un approccio basato su filesystem non lo taglierà (a meno che tu non abbia un filesystem condiviso coerente, che è improbabile e potrebbe non essere scalabile).

Pertanto avrai comunque bisogno di un database basato su server per consentire la condivisione di dati tra server web. Se sei serio riguardo alle prestazioni o alla disponibilità, la tua applicazione supporterà più server Web.

Direi che il DB MySql sarebbe una scelta migliore a meno che tu non abbia un meccanismo in atto 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 un livello indiretto, evitando di preoccuparsene.

Poiché l'OP non specifica un server Web (e PHP può effettivamente essere eseguito da una riga di comando), non sono sicuro che le tecnologie di memorizzazione nella cache siano ciò che stanno cercando qui. L'OP potrebbe essere alla ricerca di una sorta di trasformazione dei dati di volo che non è guidata dal sito Web. Chi lo sa.

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

  

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

APC e memcached sono entrambe buone opzioni a seconda del contesto. Anche la memoria condivisa potrebbe essere un'opzione.

  

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

Anche questa è un'opzione decente, ma probabilmente non sarà veloce come APC o memcached.

  

O sarebbe file flat con un pezzo di   i 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 sopra. Soprattutto se i dati sono di grandi dimensioni. Invece di scrivere un codice di analisi personalizzato, tuttavia, considera semplicemente la creazione di un array PHP e includi () il file.

Se si tratta di un archivio dati a cui possono accedere contemporaneamente più autori, NON utilizzare un file flat! La scrittura su un file flat da più processi può portare alla corruzione del file. Puoi bloccare il file, ma rischi di bloccare problemi di contesa e lunghi tempi di attesa per il blocco.

La gestione di scritture simultanee è il motivo per cui esistono applicazioni come mysql e memcached.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top