Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

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

Pokračování testu sedmi vybraných embedded databázových enginů, dnes konečně dojde i na nějaká ta čísla.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Metodika vývoje testovacích programů

Testování sedmi databází vyžadovalo napsání stejného množství jednoduchých testovacích programů. Bylo by také možné napsat jen jeden program a do něj zahrnout drivery pro jednotlivé databáze. Já jsem se rozhodl pro první variantu, protože je jednodušší.

Tyto testovací programy jsou z větší části stejné, liší se jen ve způsobu komunikace s vlastní databází. Je tedy možné vzít program s rozhraním NDBM a ten pak ručně doupravit pro příslušnou databázi. Tomuto způsobu programování se říká Copy and Paste. Problém nastane, pokud budeme chtít upravit něco ve společné části kódu. Bude nutné tyto změny provést v sedmi programech ručně, což je náročné na čas programátora. Lepší je použít nějaký version control systém.

U klasických version control systémů, jako je CVS nebo Subversion, je nejlepší nahrát do vcs jen základní program a úpravy pro jednotlivé databáze provádět jen v pracovních kopiích. Změny ve společné části pak stačí zakomitovat a pracovní kopie aktualizovat, což obě verze sloučí. V těchto systémech nedoporučuji si moc hrát s vytvářením a slučováním větví. Přináší to víc starostí než užitku.

Já jsem se rozhodl pro použití version control systému GNU Arch, který podobně jako BitKeeper nebo Darcs umožňuje velice pohodlné slučování změn (a to i obousměrné) mezi jednotlivými větvemi.

Test č. 1

Začneme čím jiným než vytvořením databáze. Budeme vkládat 70 tisíc záznamů o délce klíče 4 bajty a délce záznamu 40 bajtů, celem 3080000 bajtů dat. Kromě rychlosti budeme měřit i overhead způsobený řídícími záznamy databáze. Test byl prováděn 3×, vzal jsem nejlepší výsledek, což zmenší chybu měření.

Většina databází umožňuje při vytváření databáze použít uživatelem definovanou velikost stránky místo defaultní, která je obvykle jen 512 bajtů. Některé databáze umožňují také vypnout zamykání. Pokud jsou tyto volby možné, najdete databázi ve výsledcích dvakrát. Jednou s defaultním nastavením a podruhé s 4KB stránkou a bez zámků. Pod označením ndbm se skrývá db1 s tuningem, jenž se použije při přístupu pomocí ndbm api, které tuning db enginu standardně neumožňuje.

Tabulka č. 611
databáze čas sec. velikost souboru B overhead velikosti databáze
ndbm 16.841 7008256 2.27
db1 16.736 5005312 1.62
db1 def 40.999 4997120 1.62
db4 def 84.96 5160960 1.67
db4  — deadlock  —
gdbm 28.149 7024640 2.28
gdbm def 36.480 6865776 2.22
qdbm 16.271 5058460 1.64
qdbm def 14.922 5072812 1.65
tdb 7.263 5070848 1.65
tdbm def 50.300 5054464 1.64
cdb 0.652 4762048 1.55
puredb 1.469 4201032 1.36

Databáze DB4.1 nebyla schopna test s 4K blokem dokončit, neboť skončila deadlockem sama se sebou. Podobné výkony vidíme i v operačních systémech Win 95/8, kde není neobvyklým jevem zařízení, které je v konfliktu samo se sebou.

Výsledky testu

Nejrychleji umějí vytvářet databázi tzv. konstatní databáze. V našem testu jsou zastoupeny cdb a puredb. U tdb databáze s vypnutým zamykáním můžeme hezky vidět, jak použití mmapu zefektivní výsledný program. QDBM byla jediná databáze s tak dobře nastavenými defaulty, že dosáhla s 4K stránkou horšího výsledku. Za zmínku stojí i fakt, že pokud k db1 přistupujete přes db1 native api, jsou db1 defaulty nastaveny velmi špatně. Komerční vývojáře jistě potěší fakt, že nejrychlejší databáze jsou jim licenčně nakloněny. Tdb s mmapem je mimo hru, neb OS WinDos stejně není mmapem podporován. Dále vidíme, že data po vložení do databáze nabobtnají zhruba v poměru 1.6; u SQL databázových serverů je tento poměr trošku vyšší – zhruba 2.1.

Test č. 2

V dalším testu budeme všecha uložená data přepisovat, a to hned třikrát. Poprvé přepíšeme data jinými o stejné délce. V ideálním případě bychom neměli pozorovat žádný nárůst velikosti db a tato operace by měla být z přepisových operací nejrychlejší.

Tabulka č. 612
databáze čas velikost souboru změna velikosti
ndbm 23.477 7008256 0
db1 16.031 5005312 0
db1 default 38.720 4997120 0
db4 default 72.59 5160960 0
gdbm 33.356 7024640 0
gdbm default 39.504 6865776 0
qdbm 18.131 5058460 0
qdbm default 16.459 5072812 0
tdb 3.219 5070848 0
tdb default 22.582 5054464 0
cdb 0.652 4762048 0
puredb 1.469 4201032 0

Přepis všech původních dat daty o poloviční délce. Tato operace by měla být pro databázi náročnější, neboť je potřeba přidat uvolněné místo do free listu. Zdaleka ne všechny databáze to však dělají, některé na to kašlou, a tak, pokud přepíšete záznam záznamem o kratší délce, zbylé volné místo zůstane již dále nevyužito. Také by se mohl celkový soubor zmenšit – to však nedělá žádná mně známá databáze.

Tabulka č. 613
databáze čas velikost souboru změna velikosti
ndbm 23.752 7008256 0
db1 15.569 5005312 0
db1 default 37.056 4997120 0
db4 default 72.37 5160960 0
gdbm 36.635 7024640 0
gdbm default 42.667 7708668 0
qdbm 17.802 5058460 0
qdbm default 16.805 5072812 0
tdb 3.771 5070848 0
tdb default 22.950 5054464 0
cdb 0.482 3362048  –29 %
puredb 1.102 2801032  –33 %

Výsledky tohoto testu ukázaly, že přepis kratšími daty databázi znatelněji nezatěžuje. Výsledná velikost souboru se snížila jen u konstatních databází. Tyto databáze neumějí soubor s daty aktualizovat – místo aktualizace ho znovu vytvoří, tuto operaci zvládají mnohem rychleji než klasické databáze.

Přepis všech záznamů daty o dvojnásobné velikosti. Zde bych za nejzajímavější údaj označil změnu výsledné velikosti souboru.

Tabulka č. 614
databáze čas velikost souboru nárůst velikosti v %
ndbm 30.979 8908800 27
db1 36.584 10358784 106
db1 default 74.94 10108928 102
db4 default 2:55.35 10502144 103
gdbm 43.174 13082708 86
gdbm default 51.077 13197392 71
qdbm 25.690 12898460 154
qdbm default 24.411 12912812 154
tdb 17.939 8986624 77
tdb default 2:24.62 8970240 77
cdb 1.126 7562048 58
puredb 2.183 7001032 66

V závěrečném dílu se podíváme na rychlost čtení a na práci s poškozenými datovými soubory.

Školení: Návrh a používání MySQL databáze

 

Naučte se používat jednu z nejrozšířenějších databází. Dozvíte se vše potřebné od návrhu až po samotné využití MySQL v projektech.

Školení pro všechny, kteří se chtějí naučit efektivně pracovat s MySQL nebo se v práci s touto databází zlepšit.

Přihláška a podrobné informace

Ohodnoťte jako ve škole:
Průměrná známka 2,96

Přehled názorů

Zdrojaky?
Yenya 30. 11. 2004 05:57
Nový
Variabilni delka zaznamu
Yenya 30. 11. 2004 09:36
Nový
namet
Egon 30. 11. 2004 09:57
Nový
└ 
Re: namet
Pepa 30. 11. 2004 15:11
Nový
 
└ 
Re: namet
Martin 'Bilbo' Petricek 30. 11. 2004 22:54
Nový
 
 
└ 
Re: namet
Yenya 2. 12. 2004 12:04
Nový
Synchronizace zdrojaku - proc?
Libor Chocholaty 30. 11. 2004 10:55
Nový
└ 
Re: Synchronizace zdrojaku - proc?
mk 1. 12. 2004 12:28
Nový
Pametova narocnost
phokz 30. 11. 2004 10:56
Nový
Win 95/8
kamen 30. 11. 2004 11:09
Nový
└ 
Re: Win 95/8
Tomas Karnold 30. 11. 2004 11:48
Nový
 
└ 
Re: Win 95/8
ppp 30. 11. 2004 19:17
Nový
 
 
└ 
Re: Win 95/8
dejf 1. 12. 2004 10:23
Nový
 
 
 
└ 
Re: Win 95/8
ppp 2. 12. 2004 15:30
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem