2010-11-20 5 views
0

Hier ist meine Situation. Ich habe eine Server-Anwendung für mehrere Benutzer zu verwenden, so dass eine Menge von Lese-/Schreib-Vorgang gleichzeitig sind. Und die Antworten müssen schnell sein.gleichzeitiger Zugriff auf die Datenbank oder Speicherdatei von mehreren Prozessen, ist das möglich?

Momentan habe ich alle Daten im Speicher zwischengespeichert, so dass der Datenlese-/Schreibvorgang so schnell ist, wie wir es erwartet haben. Um zu verhindern, dass die Datensperre mir Probleme verursacht, habe ich Queue verwendet, um die Anfragen der Benutzer hochzufahren der Handler-Prozess eins nach dem anderen.

Aber bald habe ich ein Problem gefunden. Das Programm kann nur jeweils eine Anfrage bearbeiten. Selbst der Programm-Benchmark-Timer meldet mir, dass er null ms zur Verarbeitung verwendet hat, aber es gibt immer noch Grenzen, Anfragen in einer Sekunde zu behandeln. Heute behandle ich ungefähr 100 Mal pro Sekunde.

Also suche ich für einige Methoden mehr gleichzeitig, wie 8 Prozesse, um die 8 Anfragen zur GLEICHEN ZEIT zu behandeln. Das wird so nett sein. Aber es gibt ein größeres Problem mit dem Teilen von Daten, ich möchte das Rad nicht neu erfinden. Also überprüfte ich den Mongodb, Redis und Sqlite.

meine Hausaufgaben hier ist, korrigiert mich wenn ich falsch war, Dank viel

mongodb und redis sind wirklich schnell, wie sie angegeben, aber sie verwendet den gleichen Mechanismus, können sie eine Anfrage einmal verarbeiten, das ist nicht das, was Ich suche nach.

So die SQLite ist viel näher, mehrere Prozesse können die gleiche Datenbank-Datei zur gleichen Zeit öffnen und lesen, der Schmerz ist seine Schreibsperre (ich nicht, wie viel besser die neue Sperre in sqlite3 funktioniert).

Hier ist meine Frage, gibt es solide und gute Lösung für dieses Szenario? Wenn ich den Schreibprozess in einem trennen würde, würde es helfen?

Dank für jeden Kommentar

+0

Nicht alle der Serverlogikprozess muss folgerichtig sein, ich versuche, den Nicht-Folgeteil zu optimieren. – davyzhang

+0

Für sqlite siehe: http://www.sqlite.org/faq.html#q5 – tauran

Antwort

0

Die Lösung mit MongoDB ist Sharding. MongoDB sharding grundsätzlich ermöglicht es Ihnen, mehr Prozessoren auf das Problem zu werfen. Mehr Prozessoren = mehr Schreib-Threads.

Jede MongoDB-Instanz hat nur einen Schreib-Thread. Das Sharding liefert mehr Instanzen und ermöglicht daher mehr Schreibvorgänge.

Allerdings gibt es hier ein größeres Problem. Datenträgerdurchsatz

Ich habe Mongo über 1000 Einsätze/s laufen lassen, wenn das Ganze im RAM ist. Aber die meisten Leute benutzen Mongo als eine Datenbank mit einer tatsächlichen Dateiunterstützung. Also, wenn Sie Mongo für wirklich schwere Schreibvorgänge verwenden, müssen Sie mit Festplatten vorbereitet sein, die dieses Durchsatzniveau akzeptieren.

Auch hier ist der Weg um den Datenträger Durchsatz Problem Sharding. Bauen Sie mehr Shards auf und Sie erhalten weniger Schreib-/Disketten und weniger Locking.

+0

danke für die Korrektur mich über Monongdb-Lösung. Ich werde es tiefer graben! Danke vielmals! – davyzhang