Jak a na čem testujeme
Tři nezávislé týmy implementují shodnou funkční specifikaci API a dotazovacího jazyka, která byla vydefinována na základě mnohaletých provozních zkušeností z FG Forrest, a.s..
- tým staví svou implementaci nad relační databází PostgreSQL
- tým staví svou implementaci nad no-sql databází Elasticsearch
- tým staví implementaci na zelené louce jako in-memory no-sql databázi
Proces testování
Je vytvořena společná sada testů, která je k dispozici vývojářům všech tří týmů:
- funkční testy
- výkonnostní testy
Separátně si každý tým vytváří vlastní sadu jednotkových testů, které nejsou součástí výsledného hodnocení a slouží jen pro vývojové účely daného týmu.
Výkonnostní testy využívají nástroj JMH a mají dvojí charakter:
- testy ověřující rychlost konkrétních jednotlivých funkcí databáze (např. pouze filtrace dle atributů nebo dle cen, či facetového filtru separátně)
- syntetické testy ověřující celkovou rychlost databázi na vzorku reálných dotazů z produkčního prostředí
Reálné dotazy byly zaznamenávány po dobu několika dní na stávajícím řešení daného e-shopu (viz. další odstavce) do žurnálu. Následně byly konvertovány do struktury dotazů nad evitaDB a opětovně uloženy do žurnálového souboru. Tento žurnálový soubor je následně výkonnostním testem načítán a dotazy rozdělovány do paralelních vláken a postupně přehrávány nad snímkem (snapshotem) anonymizovaných produkčních dat, který byl vytvořen ve stejném období, v jakém byl snímán provoz na daném e-shopu. Dotazy i data tedy přibližně vzájemně odpovídají.
Výkonnostní testy používají tyto datové sady:
- produkční anonymizovaná databáze e-shopu Senesi: 115 tis. produktů, 3.3 mil. cen, 3.8 mil. atributů, 965 tis. relací, 695 tis. JSON fragmentů dat
- produkční anonymizovaná databáze e-shopu Signál nábytek: 15 tis. produktů, 120 tis. cen, 525 tis. atributů, 115 tis. relací, 90 tis. JSON fragmentů dat
- produkční anonymizovaná databáze e-shopu Keramika Soukup: 13 tis. produktů, 10 tis. cen, 265 tis. atributů, 55 tis. relací, 43 tis. JSON fragmentů dat
- umělá sada dat: náhodně vygenerovaná sada 100 tis. produktů, 1.3 mil. cen, 800 tisíc atributů, 680 tis. relací, 200 tisíc JSON fragmentů dat
Každá implementace vytváří samostatný JAR spouštěný z příkazového řádku a nad ním staví vlastní Docker image. Spolu s prototypem databáze se do image přibalují i testovací datové sady a spouští se JMH, které provádí zmíněné výkonnostní testy. Výsledky jsou následně ukládány na GitHub, kde jsou i zpětně dostupné. Díky technologii Docker je možné testy jednoduše spouštět i na lokálním stroji na všech hlavních operačních systémech. Pracujeme na tom, abyste si výše uvedené testy mohli spustit a ověřit i na svém stroji.
Běh testů je monitorován pomocí Prometheus / Grafana technologií a výstupem jsou i vizuální grafy zatížení CPU a využití paměti.
Specifikace testovacího prostředí
- 4x CPU (procesory Intel Xeon Skylake nebo Cascade Lake se základním taktem 2,7 GHz)
- 16GB RAM
- 25GB SSD (nikoliv NVMe)
- OS: Linux (Ubuntu 20.04)
- JDK 11
Výzkumná fáze končí závěrečným funkčním a výkonnostním testováním, které porovná všechny prototypy evitaDB. evitaDB cílí na střední nízkou až střední úroveň hostingových programů doporučených pro e-commerce řešení a pro závěrečný test tedy vybereme odpovídající Digital Ocean General Purpose Droplet. Aby bylo možné získat opakovatelné a srovnatelné výsledky, testovací prostředí, bude využito dropletu s vyhrazeným CPU. Všechny tři implementace se postupně spouští na stejném dropletu, takže by měly být jejich výstupy vzájemně porovnatelné.
Priority závěrečného hodnocení
- prototyp splňuje všechny nezbytné funkce ze specifikace
- prototyp maximalizuje výkonnost pro operace čtení
- dotazy za sekundu (propustnost)
- latence dotazu
- prototyp splňuje nepovinné funkce ze specifikace
- prototyp maximalizuje rychlost indexování
- mutace za sekundu (propustnost)
HW požadavky
Spolu s naměřenou výkonností se berou v potaz i telemetrické údaje ze systému, na kterém testy běží. Sledujeme:
- nevyužitou kapacitu RAM (vážený průměr)
- nevyužitou kapacitu CPU (vážený průměr)
Implementace s nižšími nároky získává oproti ostatním lepší hodnocení.