Hlavní navigace

Embedded databáze: Crash and Speed test db enginů (3)

Radim Kolář 14. 12. 2004

Pokračování od minula a předminula. Co jiného lze od třetího dílu čekat. Čísla, čísla a zase čísla... Vyhlášení výsledků a rozdávání cen. Oslavu a pak návrat do svých domovů. Bylo to hezké, příští rok pojedeme zase.

Test č. 3

Konečně se dostáváme k nejzajímavější operaci – čtení dat. V naprosté většině aplikací platí pro typ prováděné operace empiricky ověřené pravidlo 80/20. 80 procent operací tvoří čtení a 20 procent zápis. Rychlost čtení je proto velmi důležitá.

V následující tabulce je uveden čas potřebný k vyhledání a načtení všech záznamů v databázi. Záznamy jsou skutečně vyhledávány, nikoliv jen sekvenčně získávány.

Tabulka č. 615
databáze čas – sec
ndbm 5.04
db1 6.04
db1 default 17.40
db4 default 42.76
gdbm 8.25
gdbm default 7.02
qdbm 6.43
qdbm default 5.34
tdb 1.79
tdb default 20.99
cdb 0.92
puredb 0.77

zajímavé výsledky, co? Když opomineme konstantní databáze a velmi z řady vyčnívající GPL licencovanou tdb, je desetiletá DB1 stále nejrychlejší databází. Od té doby, co se Berkeley DB zkomercionali­zovala, to s ní jde ne od 10 k 5, ale od 5 k 42. O Berkeley DB4 se tu ale rozepisovat nechci, to si nechám na samostatný článek. Překvapilo mne, že puredb předehnala cdb. Puredb jsem neviděl nikde v praxi použitou, zato cdb se používá velmi často a je to de facto standardní formát pro konstantní databáze.

Test č. 4

V databázi často nevyhledáváme jen záznamy, o jejichž existenci víme předem. V následujícím testu budeme vyhledávat i neexistující záznamy, a to v poměru 80:20 ve prospěch neexistujících.

Tabulka č. 616
databáze čas – sec
ndbm 27.04
db1 38.27
db1 default 114.83
db4 default 299.88
gdbm 32.248
gdbm default 25.942
qdbm 33.912
qdbm default 27.200
tdb 9.84
tdb default 180.43
cdb 4.37
puredb 9.86

V tomto testu porazila prozměnu cdb puredb. Suverénně nejpomalejší je opět db4 následována tdb s default nastavením. Jinak je závodní pole dost vyrovnané, pouze db1 s default nastavením se za ním opožďuje.

Test č. 5

Naši databázovou speed show zakončujeme odmazáváním záznamů. Konstantní databáze jsou v tomto případě mimo hru, neboť neumějí databázi modifikovat.

Tabulka č. 617
databáze čas – sec
ndbm 20.79
db1 15.1
db1 default 34.39
db4 default 57.097
gdbm 22.78
gdbm default 38.44
qdbm 11.79
qdbm default 10.50
tdb 6.18
tdb default 41.61

Vidíte, že DB4 není zase tak pomalá, stihla to už podruhé pod minutu…

Systém hodnocení

Po krátké uvaze jsem se rozhodl pro následující vyhodnocovací systém: Budu vyhodnocovat sedm databází, na default/nedefault nastavení nebudu brát ohled, vždy vezmu nejlepší výsledek, kterého databáze v daném testu dosáhla. To trošku zvýhodňuje Berkeley DB1, protože je ve výsledcích obsažena třikrát, zbytek jen dvakrát a Berkeley 4 kvůli svým bugům jen jednou.

Každý test oboduji systémem jeden bod za každé místo, tj. za první místo jeden bod, za druhé místo dva body. Lineární systém pro hodnocení byl zvolen primárně díky mé lenosti. Asi by bylo lepší sčítat nejlepší vítězné časy, ale nenašel jsem poruce hardwarovou kalkulačku.

Výsledková listina

Tabulka č. 618
databáze pořadí v jednotlivých testech celkové score pořadí
db1 5 4 4 5 4 5 3 30 4.
db4 7 7 7 7 7 7 5 47 7.
gdbm 6 6 6 6 6 4 4 38 6.
qdbm 4 5 5 4 5 6 2 31 5.
tdb 3 3 3 3 3 2 1 18 3.
cdb 1 1 1 1 2 1 – 7 1.
puredb 2 2 2 2 1 3 – 12 2.

Výsledky

1. místo CDB

2. místo PureDB

Zcela podle očekávání se na prvních místech usadily konstantní databáze. Prováděné benchmarky jim velmi dobře sedly. Konstantní databáze jsou vynikající pro aplikace, kde najednou měníte velkou část datového souboru. Když při každém updatu databáze zaktualizujete např. 30 procent záznamů, je tato aplikace pro konstatní databázi jak dělaná. Naopak pokud měníte jen pár záznamů z tisíce, je to nevýhodné, protože je nutné celou databázi přegenerovat.

Přejme tedy vítězství databázi CDB, kterou navrhl D. J. Bernstein. Originální verze se však kvůli příliš restriktivní licenci v praxi nepoužívá. Existuje mnoho klonů používajících stejné API a stejný datový formát. Formát .cdb je dnes de facto standard pro konstantní databáze.

Druhé místo patří konstantní databázi PureDB s pěknou BSD licencí. Je to jediná mně známá konstantní databáze, která není .cdb kompatibilní, což ji v praxi dost diskvalifikuje, protože nikdo nechce používat nekompatibilní datový formát.

3. místo Trivial Database

Třetí (pokud bychom nepočítali konstantní databáze, tak první) místo obsadila s opravdu velkým náskokem tdb. Její rychlost byla o třídu lepší než u ostatních a byla dokonce srovnatelná s rychlostí konstantních databází. Tento náskok získá, pokud jí povolíme použití mmapu a vypneme multiuživatelský přístup k databázi. Tímto nastavením jsem ji rozhodně před ostatními nezvýhodňoval. S výjimkou Berkeley DB4 žádná databáze nepodporuje víceuživatelský přístup pro zápis do databáze a žádné databázi nebylo v mmapování bráněno. Nikomu nic nebrání (pozn. pro znalce češtiny: není tohle trojitý zápor, který čeština oficiálně nemá?) v tom, aby podporu pro mmap dodělal např. do Berkeley DB1.

Jedinou a dost podstatnou nepříjemností je nepřátelská GPL licence, což je major show stopper nejen pro komerční, ale i open source vývojáře, jejichž projektům nebylo požehnáno svatým IGNUciem. Tuto databázi by se vyplatilo Samba projektu prodávat, podobně jako to činí Sleepy Cat s Berkeley DB.

4. Berkeley DB1

5. QDBM

Tyto databáze skončily velmi těsně zasebou. Je vidět, že tvrzení QDBM teamu o tom, že mají nejrychlejší databázi, není zcela přesné. QDBM se ale pořád řadí mezi nejrychlejší databáze implementující haštabulky. Jsem moc rád, že po dopsání článku již nebudu mít co do činění s DEPOT qdbm API.

Naopak tvrzení, že DB1 je pomalá, se nepotvrdilo. Default nastavení není optimální, ale nastavení, které používá ndbm wrapper:

HASHINFO info;

info.bsize = 4096;
info.ffactor = 40;
info.nelem = 1;
info.cachesize = 0;
info.hash = NULL;
info.lorder = 0;

výkon zvedne na velmi dobrou úroveň. DB1 je v komerčním světě velmi oblíbená. Naopak open source komunita preferuje DB4, protože je to novější verze. Neviděl jsem v poslední době žádný nově napsaný open source program, který by preferoval DB1 před DB4 API.

6. GNU GDBM

GNU GDBM je všeobecně považována za pomalou databázi. Zde skončila skoro vždy předposlední, ale ne s velkou ztrátou. Stejně jako DB1 je i GDBM zhruba 10 let stará.

7. Berkeley DB4.1

S velkou ztrátou skončila DB4 bezkonkurenčně na konci výsledkové listiny. Oblíbenost této databáze v Open Source komunitě mě velmi překvapuje. DB4 je pomalá (MySQL ji s přehledem natře i o 100 procent) a neuvěřitelně zabugovaná databáze. DB4 má neuvěřitelně dlouhý feature list. Umí toho opravdu hodně a zasahuje i do oblastí, které bývají vyhrazené jen SQL databázím. Mohu věnovat DB4 některý z dalších dílů tohoto seriálu, sám ji již nepoužívám, přešel jsem na SQL Lite, což mohu všem jen doporučit. Čím dřív se zbavíte DB4, tím lépe.

Ceny

Každá správná soutěž nekončí vyhlášením výsledků, ale rozdáváním cen.

D. J. Bernstein dostane cenu za návrh cdb.
Pohár pro vítěze dostane zaslouženě tdb.
Berkeley DB1 dostane cenu za „still the best“.
Cenu za nejhorší native API dostane QDBM s dodatkem „zločin proti lidskosti“.
Cenu útěchy GNU GDBM s dodatkem „děkujeme odejděte“.
Berkeley DB4 dostane cenu za nejhorší databázi, kterou je vůbec možné napsat. Doporučuji zařadit do portfolia společnosti Microsoft.
Marketingové oddělení firmy SleepyCat dostane cenu za mimořádný herecký výkon. Dostalo Open Source komunitu na slabost pro nejnovější verze software.

Závěrečná oslava

Probíhá již tradičně v ne(z)řízené diskusi. Pro zvýšení všeobecného veselí tu máte na házení tárovou kouli. Jelikož příští díl bude smutnější, doporučuji diskusi na veselá témata: ‚qdbm depot api‘, ‚gdbm_reorganize‘, ‚sezame odemkni se – db4 edition‘, ‚need for speed – db4‘ a podobně. Nenajde se mezi přítomnými někdo, kdo by napsal něco^H^H^H^H seriál o Embedded Firebirdu?

Našli jste v článku chybu?

16. 12. 2004 9:03

david (neregistrovaný)

Berkley DB 4 má MSVC projekt soubory, takže asi jo.
gdbm se mi také před několika lety podařilo pod MSW přeložit.
Ostatní nevím



15. 12. 2004 10:52

mk (neregistrovaný)

Tady spis jde o to, ze se hesla nemeni tak casto, jak casto se kontroluji, takze se vyplati jednou za cas, kdyz si nekdo holt heslo meni, rebuildovat celou db. Zmena hesla je pak sice narocnejsi operace, ale cteni z konstatnich db je mnohem rychlejsi.

Dalsi vec je pocet a velikost zaznamu, i pri par tisicich uzivatelu (a asi jich vetsinou tolik nebude) a pri prumerne delce uzivatelskeho jmena hesla neni problem databazi rebuildovat, velikost takove databaze budou radove desitky kB, takze o n…

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Říká amoleta - a myslí palačinka

Říká amoleta - a myslí palačinka

120na80.cz: Bojíte se encefalitidy?

Bojíte se encefalitidy?

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: EET zvládneme, budou horší zákony

EET zvládneme, budou horší zákony

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

120na80.cz: Jak oddálit Alzheimera?

Jak oddálit Alzheimera?

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Není sleva jako sleva. Jak obchodům nenaletět?

Není sleva jako sleva. Jak obchodům nenaletět?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí