2010-10-19 11 views
10

Für eine kleine PHP-Anwendung, die ich schreibe, müssen wir eine große Anzahl von Datensätzen speichern, die einen Hash-Schlüssel und ein paar einfache Feldwerte ('Host', 'Pfad') haben. zB:Was sind einige gute, schnelle persistente Speicheroptionen für Schlüssel-> Wertdaten?

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

Was ist der beste persistente Speicher für solche Daten? Wäre MySQL die beste Wahl, oder ist es für solche einfachen Daten übertrieben? Was würde die beste Leistung geben?

Antwort

10

Kurze Antwort:Membase.


Lange Antwort:
Sie haben grundsätzlich drei Möglichkeiten: eine relationale Datenbank, Dateiablage, oder noch etwas anderes.

Wie Sie sagten, könnte eine relationale Datenbank definitiv übertrieben sein. Das heißt, wenn dies Teil einer Anwendung ist, die bereits eine MySQL- oder andere Datenbank hat, würde ich damit gehen. Genauso kann Dateispeicherung manchmal nützlich sein (z. B. Schreiben in eine Reihe von XML-Dateien), aber Festplatten-I/O kann langsam sein.

Jetzt im anderen Kategorie, haben Sie einige große NoSQL-Optionen wie CouchDB oder Memcached.

Wenn Sie nicht über die Persistenz Ihrer Daten besorgt sind, würde ich Memcache empfehlen. Es ist leicht, einfach zu laufen, und es gibt eine Memcache PHP extension, die es einfach macht. Es ist für Schlüssel-Wert-Speicher wie folgt gemacht.

Der einzige Nachteil Memcache ist, dass alle Ihre Daten in der Sekunde der Memcache-Dienst verloren geht. Hier kommt Membase ins Spiel. Es ist eine Open-Source-Verzweigung von Memcache, die protokollkompatibel ist, dh es funktioniert mit allen vorhandenen Client-Bibliotheken. Es kann jedoch Ihre Daten persistieren und tatsächlich Konsistenz und Zuverlässigkeit bieten, was Memcache nicht alleine kann.

+0

Die lange antwort wird geschätzt. Ich überprüfe jetzt membase. – BrianV

+0

Oder verwenden Sie MySQL mit Memcached: http://dev.mysql.com/tech-resources/articles/nosql-to-mysql-with-memcached.html – hakre

4

CouchDB ist Ihre Antwort (obwohl es ein wenig übertrieben für Ihre Notwendigkeiten sein könnte) ..

1

vielleicht nicht die beste Antwort sein. Aber ich würde es in einer mySQL-Datenbank speichern und wahrscheinlich eine mysql_pconnect verwenden, wenn die Daten nicht zur gleichen Zeit extrahiert werden.

Informationen über pconnect hier: php.net

Eine gemeinsame Alternative zur Datenbank ist eine einfache Datei aber korrigiert mich wenn ich falsch liege, aber concurent Dateizugriff könnte langsamer sein.

Viel Glück.

5

einfach etwas anderes, redis vorschlagen (oder redisdb-win32, wenn Sie auf einem Windows-Server sind)

+0

Interessante suggestion - ich hatte nicht auf redis vor angeschaut ... – BrianV

0

Ich würde für MySQl gehen, nur für den Fall, dass Sie Ihre Anwendung in der Zukunft aktualisieren müssen. Seien Sie zukunftssicher, wenn es um Anwendungen geht.

1

Seltsame niemand erwähnte Flintstone bis jetzt.

Auch eine gute Option ist Doctrine.

+0

Die Frage ist etwa 1 genau Speicher, nicht ORM, die mehrere Speicher verwendet – vladkras