Project

General

Profile

Puvodni navrh testovacich scenaru

  1. Soupis vstupnich pozadavku
  2. Srovnani existujicich databazovych systemu
  3. Testovaci scenare
  4. Testovaci dotazy
  5. Vysledky testu

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