Nejprve porovnejme jablka s jablky:Čtení a zápisy pomocí MongoDB jsou jako jednotlivé čtení a zápisy podle primárního klíče do tabulky bez neseskupených indexů v RDBMS.
Pojďme tedy srovnat přesně to:http://mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html
A ukazuje se, že rozdíl v rychlosti při spravedlivém srovnání úplně stejné primitivní operace není velký. Ve skutečnosti je MySQL o něco rychlejší. Řekl bych, že jsou ekvivalentní.
Proč? Protože ve skutečnosti oba systémy v tomto konkrétním benchmarku dělají podobné věci. Vrácení jednoho řádku, prohledávaného podle primárního klíče, ve skutečnosti není tolik práce. Je to velmi rychlá operace. Mám podezření, že režie meziprocesové komunikace je toho velkou součástí.
Můj odhad je, že vyladěnější kód v MySQL převáží o něco méně systematické režie MongoDB (žádné logické zámky a pravděpodobně nějaké další malé věci).
To vede k zajímavému závěru:Můžete používat MySQL jako databázi dokumentů a získat z ní vynikající výkon.
Kdyby tazatel řekl:„Nezajímají nás dokumenty ani styly, potřebujeme jen mnohem rychlejší databázi, myslíte si, že bychom měli používat MySQL nebo MongoDB?“, co bych odpověděl?
Doporučil bych na chvíli ignorovat výkon a podívat se na relativní sílu obou systémů. Pro MongoDB přicházejí na mysl věci jako škálování (cesta nahoru) a replikace. Pro MySQL existuje mnohem více funkcí, jako jsou bohaté dotazy, souběžné modely, lepší nástroje a vyspělost a mnoho dalšího.
V zásadě můžete vyměnit funkce za výkon. Jste ochotni to udělat? To je volba, kterou nelze dělat obecně. Pokud se rozhodnete pro výkon za každou cenu, zvažte nejprve vyladění MySQL, než přidáte další technologii.
Zde je to, co se stane, když klient načte jeden řádek/dokument podle primárního klíče. Uvedu rozdíly mezi oběma systémy:
- Klient vytvoří binární příkaz (stejný)
- Klient to odešle přes TCP (stejné)
- Server analyzuje příkaz (stejně)
- Server přistupuje k plánu dotazů z mezipaměti (pouze SQL, nikoli MongoDB, nikoli HandlerSocket)
- Server požádá komponentu B-Strom o přístup k řádku (stejný)
- Server používá fyzický zámek pouze pro čtení na cestě B-stromu vedoucí k řádku (stejné)
- Server používá logický zámek na řádku (pouze SQL, nikoli MongoDB, nikoli HandlerSocket)
- Server serializuje řádek a odešle jej přes TCP (stejné)
- Klient to deserializuje (stejně)
Pro typické RDBMS na bázi SQL existují pouze dva další kroky. Proto v tom vlastně není žádný rozdíl.