Puvodni navrh testovacich scenaru¶
- Soupis vstupnich pozadavku
- Srovnani existujicich databazovych systemu
- Testovaci scenare
- Testovaci dotazy
- Vysledky testu
- Table of contents
- Puvodni navrh testovacich scenaru
1. Zápis do databaze¶
TS 1.1: Rychlost zápisu dat do databaze po smazání dat¶
Zajima nas využití děr po alokacích, pro Mentat je typický případ pravidelné mazání od začátku. Zajima nas tedy jak se změní rychlost zápisu, pokud řadu dokumentů smažeme a db se bude snažit využívat "díry".
- Test case: z testovaciho datasetu nahrat 20 dni, cca 1/2 smazat podle predem vygenerovane sekvence cisel dnu a podlnit zbyvajicich 10 dnu
- Pozn: _V Mentatu mažeme vždy od začátku, ale pohybuje se to, takže dřív nebo později databáze bude více či méně fragmentovaná, tohle je příklad, který dává worst case pro Mentat a expected-case pro Nerd
TS 1.2: Rychlost zapisu dat do databaze¶
- Cas za jaky dobehne vlozeni dat do databaze (zapis vseho)
- Velikost db na disku před vytvořením indexů
- Velikost db na disku po vytvoření indexů
2. Čtení z databaze¶
Zajimaji nas časy dotazů v cold/hot, count/nocount a limit na začátku/limit na konci/cursor variantách.
Cold
vs.Hot
- velké dotazy v Mentatu jdou téměř vždy na disk, z paměti jdou až člověkem opakované/lehce upravené dotazy
Cold
- po restartu db a vyprazdneni cache (databazovych i systemovych)
- priklad pro PostgreSQL:
# service postgresql stop # sync # echo 3 > /proc/sys/vm/drop_caches # service postgresql start
Hot
- druhý pokus, data v cache
Count
vs.Nocount
- pokud db bude vykazovat supr výkon bez informace o celkovém počtu, můžeme se rozhodnout bez toho obejít (tj. na webu neúplný pager)
Count
- říkáme-li si o částečné výsledky (limit, cursor), chceme předem vědět, kolik jich bude celkem
- "
Nocount
- bez informace o celkovém počtu
Limit Skip
vs.Cursor
- když si člověk nechá něco vyhledat, dostane na webu prvních třicet a pager; pohyb vpřed/vzad jde udělat pomocí skip/limit, nebo pomocí uložení handlu na cursor a vyčítání z něho. Skiplimit/kurzor a count/nocount souvisejí, není potřeba dělat celou matrix, ale jen to, co je potřeba pro splnění "přečti data z konce.
Limit Skip
SELECT ... SKIP N LIMIT M
Cursor
SELECT ..., cursor.read(M), cursor.read(M)...
Prime cteni¶
TS 2.1: Prime "cold" cteni dat¶
Vrat vsechny informace (use case analytického dotazu)
TS 2.2: Prime "hot" cteni dat¶
Vrat vsechny informace (use case analytického dotazu)
Postupne cteni pomoci "SKIP LIMIT"¶
TS 2.3: Postupne "cold" cteni pomoci "SKIP LIMIT" od zacatku¶
Vrat 1., 2. a 3. 20 vysledku (use case zobrazení v UI)
TS 2.4: Postupne "cold" cteni pomoci "SKIP LIMIT" od konce¶
Vrat poslednich, predposlednich a predpredposlecnich 20 vysledku (use case zobrazení v UI)
TS 2.5: Postupne "hot" cteni pomoci "SKIP LIMIT" od zacatku¶
Vrat 1., 2. a 3. 20 vysledku
TS 2.6: Postupne "hot" cteni pomoci "SKIP LIMIT" od konce¶
Vrat poslednich, predposlednich a predpredposlecnich 20 vysledku
Postupne cteni pomoci "CURSOR"¶
TS 2.7: Postupne "cold" cteni pomoci "CURSOR" od zacatku¶
Vrat 1., 2. a 3. 20 vysledku
TS 2.8: Postupne "cold" cteni pomoci "CURSOR" od konce¶
Vrat poslednich, predposlednich a predpredposlecnich 20 vysledku
TS 2.9: Postupne "hot" cteni pomoci "CURSOR" od zacatku¶
Vrat 1., 2. a 3. 20 vysledku
TS 2.10: Postupne "hot" cteni pomoci "CURSOR" od konce¶
Vrat poslednich, predposlednich a predpredposlecnich 20 vysledku