Project

General

Profile

Testovani databazovych systemu - vstupni pozadavky

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

Klicove pozadavky pro analyzu jsou vyznaceny tucne.

Mentat

Charakter dat

  • Spousta zápisů nových dat, prakticky žádné změny (počítejme cca 3M zápisů za den)
  • Statické dokumenty (Idea)
  • Klíč ID
  • Komplexní dokument (vnořená pole - Src[].IP4[])
  • Potenciálně nové neznámé atributy
  • Ale sada atributů, které se vyskytují vždy, nebo skoro vždy
  • Relevantní data cca měsíc zpět
  • Průměrná velikost dokumentu cca 1kB

Typické dotazy

  • Viz Mentat/Alerts - Source.IP? A/Nebo Target.IP?, rozsah časů, detektor, kategorie
  • Dej mi vše ke zprávě s ID=X
  • Dej mi všechny zprávy z časového období (reporting)

NERD (reputační databáze)

Charakter dat

  • Spousta zápisů a malých změn (cca 5M za den, půl na půl zápisy/změny)
  • Klíč IP4/6, případně síť, případně doménové jméno, možná časem i něco úplně jiného
  • Dokument - atributy, datové i booleany
  • Sada atributů, které se vyskytují vždy, nebo skoro vždy
  • Některé atributy s historií (v dokumentové db tedy nejspíš opět vnořená pole)
  • Některé atributy komplexní (poddokument), ale spíš bez historie

Typické dotazy

  • Dej mi vše k IP (včetně historie)
  • Základní rychlé info k řadě IP
  • Adresy, které splňují X (bez historie)

Navrhovany postup testovani

To hlavně pro představu, jaká jsou (Mentat) nebo nejspíš budou (NERD) data. Charakter je do velké míry podobný, rozdíl je hlavně v poměru zápisů/updatů. Nemá do začátku smysl testovat všechno, ale viděl bych to jako:

  • vybrat vhodné db
  • vhodně nalít cca měsíc Idea dat (a změřit zápisy)
  • udělat pár vhodných reprezentativních dotazů (cold vs hot, vrať celý doc vs. vrať omezenou projekci)
  • vybrat a nastavit vhodné indexy, případně vytáhnout vhodná data mimo dokument, pokud db podporuje třeba sloupcová data, nebo timeseries, nebo je to hybridní db (typicky PostgreSQL s podporou binárního JSONu)
  • znovu nalít data (a změřit zápisy)
  • znovu udělat dotazy

Bylo by dobré také

  • Podívat se na efektivitu uložení (kolik data po nalití zaberou, kolik indexy, kolik statické sloupce, dokumentové db mívají overhead na jména klíčů).
  • Podporuje db i agregace/analytické dotazy?
  • Umí vracet uvolněné misté FS (vacuum/reclaim) a jak je to drahé?
  • Umí replikaci a/nebo sharding?
  • Chceme přesné výsledky, ne interpolace nebo statistické odhady

Poznamky Pavel

Tomovy zkušenosti:
  • mysql postgres sqlite
  • fastbit
Odrazový můstek (současná platforma):
  • Mongo
Divoké karty:
  • postgresql (ph)
  • orientdb (Vašek)
  • arangodb (Vašek)
  • elk (ph)
  • cassandra (Vašek)

Dataset - měsíc Idea dat ("filesender")

Postup:
  • recherché - kandidáti
  • pak se dohodneme, co je do začátku vhodné
  • návrh dotazů (lze použít něco z Radkova výběru)
  • ph+Mek: stroj na testování

Poznamky Tom

  • Mentat a NERD mohou pouzivat dve ruzne nebo i jednu stejnou DB - zalezi na vysledku srovnani
  • pro timestampy vyuzivat nativni databazovy typ (v rozliseni max. 1ms)
  • nutna podpora IPv4/v6 adres, podsiti (rozsah, CIDR, seznam adres)
  • proverit moznost vyuziti asynchronniho dotazovani (pollovani na db)
  • pri testovani se zamerit i na prostorovou narocnost pro ulozeni dat
  • pro testovani vyuzit sestavene dotazy od Radka Orkace + sadu typickych dotazu
  • jako zakladni dataset pouzit lednova data z Mentatu v JSON formatu (40GB)
  • open-source licence (BSD, GPL, MIT)
  • HW bude dopresnen
  • Mentat
    • aktualne jsou vsechny polozky MongoDB indexovane - ma ale mensi vykon nez se ocekavalo
    • uchovava 1 mesic kompletnich dat, 6 mesicu zajmovych dat
    • vykonnostni problemy prevazne u slozitejsich uzivatelskych dotazu v ramci WebUI
  • NERD
    • v navrhu se pocita s dynamickou strukturou DB schematu
    • zaznamy urcuji IP adresy, ke kterym se pripojuji relevantni informace
    • uchovava data po dobu danou reputaci urciteho zdroje