MongoDB: test rychlosti v NodeJS, Go a Pythonu

Spíše z důvodu učení se, než kvůli faktickému testování něčeho, co asi ani nevypadá moc reálně, jsem si zkusil napsat stejný kód v několika jazycích. Konkrétně v NodeJS, Pyhonu a Go. Jak jde vidět vše jazyky používané pro psaní na backendu webových aplikací.

Zadání

Asi jednoduché a jasné: napsat stejný kód v růyných jazycích, něco se naučit a možná pak i porovnat nějaký performance. Ten stejný kód jsem omezil na načtení dat z MongoDB databáze, sečtení načtených dat, výpočet průměrné hodnoty z načtených dat a její zobrazení.

Data jsem si připravil v NodeJS jednoduchým skriptem, který vytvoří testovací data pro jednotlivé aplikace v daném jazyce.

Vytvoření databáze

NIc složitého:

Výsledkem je collection v MongoDB c 1.000.000 záznamy, dokumenty, kde v kadém z nich je klíč value s nahédně vygenerovaným číslem v rozmezí od 1 do 100.

Vytvoření databáze:

Samotné testování

Postupně jsem napsal ten stejný kód v růyných jazycích s podobnou myšlenkou, složitostí, bez ambice využívat jakékoliv optimalizační aspekty.

NodeJS

Rychlost pak takto:

Poznámka k práci s výsledným polem: zkusil jsem jak for of, tak i klasický for cyklus, ale i funkcionální forEach. Výsledek byl téměř identický. Použitý for of se mi nejvíce líbil, pro svou jasnost a kompaktnost.

Python

No a rychlost v Pythonu pak takto:

Go

Rychlost vývpočtu v Go:

Suma sumarum

Rychlost jedntolivých implementací stojí a padá na Mongo driveru a je v podstatě ve všech jazycích stejná. I když v NodeJS test dopadl nejlépe. Problém bych ale neviděl v daném jazyce, ale spíš v loaderu.

To potvrzuje ten fakt, že pokud jsem vybuildoval Go zdroják do binárky, pak jsem získal a pomohl jsem si o cca půl sekundy a Go tak skoro srovnalo krok s ostatními:

Nicméně

Jak jsem uveld úplně ze začátku článku: psal jsem test, abych si vyzkoušel v růyných jazycích práci s MongoDB.

Co mě mile překvpilo, byla rychlost Pythonu. Čekal jsem, že bude výrazně pomalejší.

O to milejší překvapení, když se podíváte na pythonovský zdroják a porovnáte jej s ostatními jazyky…

A samozřejmě: určitě jsem neměl ambice testovat jazyky. Chtěl jsem získat nějaké nové zkušenosti…