Warum MongoDB besser mit multi-threaded-client im Vergleich zu einer single-threaded-client?
Wir haben vor kurzem ein Benchmark von Oracle 10g und MongoDB mit YCSB ( https://github.com/brianfrankcooper/YCSB/wiki ), als wir versucht haben, erhöhen Sie die Anzahl der threads für 1.000.000 Datensätze, Oracle performance konstant geblieben, nach 4 threads jedoch MongoDB gehalten auf besser und besser, bis zu 8 threads-und danach liest nur besser waren, schreibt und updates (Operationen/sec) konstant blieb.
Liefen wir diesen Maßstab auf 2 CPU Xeon quad-core (insgesamt 8 Kerne) + 8 GB RAM auf LAN.
Was wir beobachtet haben, war, dass MongoDB durchgeführt, die besser mit multi-threaded-client-im Vergleich zu single-threaded-client, meine Frage ist: wenn MongoDB können besser mit mehr laden, warum kann Sie nicht das gleiche tun mit weniger Last (sagen wir nur ein paar threads) durch den Einsatz mehrerer Kerne?
- keine Ahnung, was Sie wirklich bedeuten...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist logischerweise sehr einfach in der Verarbeitung einer Anfrage auf einem single-core. Nur code, der die Anforderung empfängt, und beschäftigt sich mit ihm.
Ist es nicht annähernd so einfach zu verarbeiten, eine einzelne Anforderung auf 2 Kernen, da dies erfordert, dass Sie zu brechen, bis Sie die Anfrage in Komponenten, die farm zu arbeiten, synchronisieren Sie die Antworten, und erstellen Sie dann eine einzige Antwort. Und wenn Sie diese Arbeit zu tun, während Sie kann reduzieren Wanduhr Zeit (wie viel Zeit die Uhr an der Wand sieht-pass), sind Sie immer gehen, um eine Anfrage zu mehr CPU-Zeit (CPU-Ressourcen verbraucht).
In einem system wie MongoDB, wo Sie erwarten eine Menge von verschiedenen Kunden, die Anfragen, es gibt keine Notwendigkeit, zu versuchen zu parallelisieren, die Bearbeitung einer einzigen Anfrage, und jeden Grund, nicht zu.
Die größere Frage ist, warum Oracle nicht erhöhen Parallelität nach 4 CPUs. Es gibt viele mögliche Gründe, aber eine vernünftige Vermutung ist, dass Sie auf irgendeine Art von Verriegelung, die ist notwendig, um zu gewährleisten Konsistenz. (MongoDB, nicht Ihnen Konsistenz, und so vermeidet diese Art der Flaschenhals.)
Oracle nicht sperren, Daten für Konsistenz, aber es macht das schreiben von Daten in die redo-und undo-Dateien für Transaktionen, die Lesen und Konsistenz. Oracle ist ein MVCC-system. Sehen http://en.wikipedia.org/wiki/Multiversion_concurrency_control .
Verwenden Sie parametrisierte Abfragen zu machen Oracle schnell, sonst wird Oracle verbringen zu viel Zeit beim analysieren von Abfragen. Dies ist besonders wichtig, wenn viele kleine Abfragen, die gleichzeitig ausgeführt werden, die situation, die Sie testen.
MongoDB hat lock-on schreibt.
edit 1:
Einen weiteren großen Unterschied zwischen Oracle und MongoDB ist die Haltbarkeit. MongoDB bietet keine Haltbarkeit, wenn Sie die Standardkonfiguration verwenden. Er schreibt einmal pro minute Daten auf die Festplatte. Oracle schreibt auf die Festplatte, die mit jedem commit. So Oracle nicht viel mehr fsyncing.