2010-10-19 12 views
10

Per una piccola applicazione PHP che sto scrivendo, dobbiamo memorizzare un numero elevato di record con una chiave hash e alcuni valori di campo semplici ('host', 'percorso'). es .:Quali sono alcune buone opzioni di archiviazione persistenti per i dati chiave-> valore?

'4420ffb32a' => array(
    'host' => '127.0.0.1', 
    'path' => 'path/to/resource', 
); 

Qual è la migliore memoria permanente per dati come questo? MySQL sarebbe la scelta migliore, o è eccessivo per dati così semplici? Cosa darebbe le migliori prestazioni?

risposta

10

Risposta breve:Membase.


Risposta lunga:
Hai sostanzialmente tre opzioni: un database relazionale, archiviazione di file, o qualcos'altro.

Come hai detto, un database relazionale potrebbe sicuramente essere eccessivo. Detto questo, se questo fa parte di un'applicazione che ha già un database MySQL o altro, vorrei andare con quello. Allo stesso modo, la memorizzazione dei file può essere utile a volte (scrivendo su un mucchio di file XML, ad esempio), ma l'I/O del disco può essere lento.

Ora nell'altra categoria , avete alcune grandi opzioni NoSQL come CouchDB o Memcached.

Se non sei troppo preoccupato per la persistenza dei tuoi dati, ti consiglio memcache. È leggero, facile da usare e c'è un Memcache PHP extension che lo rende facile da usare. È fatto per l'archiviazione di valori-chiave come questo.

L'unico svantaggio di memcache è che tutti i dati vengono persi dopo che il servizio memcache si è interrotto. È qui che entra in gioco Membase. È un fork di memcache open source compatibile con il protocollo, il che significa che funzionerà con tutte le librerie client esistenti. Tuttavia, può persistere i tuoi dati e in realtà fornire coerenza e affidabilità, qualcosa che Memcache non può da solo.

+0

La risposta lunga è apprezzata. Sto rivedendo la membrana ora. – BrianV

+0

Oppure usa MySQL con Memcached: http://dev.mysql.com/tech-resources/articles/nosql-to-mysql-with-memcached.html – hakre

4

CouchDB è la vostra risposta (anche se potrebbe essere un po 'po' eccessivo per le vostre necessità) ..

1

potrebbe non essere la migliore risposta. Ma lo memorizzerei in un database mySQL e probabilmente userò uno mysql_pconnect se i dati non vengono estratti allo stesso tempo.

Informazioni su pconnect qui: php.net

Una comune alternativa al database è un normale file, ma mi corregga se ho l'accesso ai file sbagliato, ma concurent potrebbe essere più lento.

Buona fortuna.

5

Giusto per suggerire qualcosa di diverso, redis (o redisdb-win32 se siete su un server Windows)

+0

Suggerimento interessante: non avevo ancora visto i redis ... – BrianV

0

vorrei andare su MySQl, nel caso in cui sia necessario aggiornare l'applicazione in futuro. Meglio essere a prova di futuro quando si tratta di applicazioni.

1

Strano nessuno ha menzionato Flintstone fino ad ora.

Anche una buona opzione è Doctrine.

+0

La query è di circa 1 storage esatto, non di ORM che utilizza più archivi – vladkras