Philip Withnall
philip.withnall@collabora.co.uk 2015
Úložiště pro jednoduché trvalé objekty

# Databáze

#

        Shrnutí

          Databáze používejte ve vhodných případech, tzn. ne pro nastavení (k tomu slouží GSettings). ()
          Volte mezi GOM a GVDB podle toho, jestli je zapotřebí indexování. ()
          Popřemýšlejte o zásadách úklidu databáze, než zařadíte používání GOM. ()
          Zranitelnosti v podobě injektáže SQL se vyhněte pomocí předpřipravených dotazů. ()

# Kdy používat databáze

Data nastavení by měla být uložena v GSettings. Platí, že data, která musí být trvalá a ovlivňují chování aplikace, jsou data nastavení. Pokud se jedná o záležitost, na kterou se vztahují zásady určené správcem systému (jako třeba nastavení proxy nebo zamykání), jde o data nastavení. Jestliže to ale obsahuje uživatelem vytvořený obsah, nejedná se o data nastavení a nemělo by to být uloženo v GSettings.

Pro situace, kdy jsou data vysoce strukturovaná, je pro uchování rozumným řešením databáze. V GNOME jsou doporučovány dvě hlavní databáze: GOM a GVDB. GOM ve skutečnosti obaluje SQLite a tudíž implementuje indexaci polí a dotazy ve stylu SQL. GVDB je mnohem jednodušší úložiště objektů, které podporuje rychlou serializaci slovníku objektů na disk.

GOM by s měl použít, když jsou zapotřebí pokročilé funkce, především indexování. V ostatních případech by mělo být použito GVDB.

Dříve, než se rozhodnete použít GOM (a tím pádem SQLite), musíte zvážit zásady úklidu databáze (vacuum) a jestli vaše použití bude dobře spolupracovat s úklidovým systémem SQLite. Úklid je v podstatě výraz používaný u SQLite (respektive u databází obecně) pro defragmentaci databáze — pokud databáze není řádně defragmentovaná, degraduje to výkon a značně narůstá její velikost. Více informací se dočtete v tomto článku na dané téma. Popřemýšlejte o něm, než zvolíte použití GOM.

GNOME má ještě další databázovou knihovnu: GNOME Data Access (GDA). Je zaměřená na abstraktní přístup k různým typům relačních databází, pro použití například v programech pro administrační práci s databázemi nebo v kancelářských programech. Naopak není vhodná pro ukládání uživatelských nastavení.

# Používání GOM

Výuka použití GOM přesahuje rámec tohoto dokumentu, ale je k dispozici referenční příručka.

## Injektáž SQL

GOM neumožňuje přístup k nízkoúrovňovému dotazovacímu API databáze SQLite. Když jej používáte, musíte místo přímého sestavení řetězce s SQL, a jeho následného předání ke zpracování, dotazy sestavovat pomocí předpřipravených výrazů SQLite a API pro napojení hodnot. Přímé sestavování řetězců zvyšuje pravděpodobnost útoků typu injektování SQL, pomocí kterých může útočník získat přístup k libovolným uživatelským datům v databázi.

# Používání GVDB

GVDB má jednoduché API, které zrcadlí běžné hašovací tabulky. V současnosti je GVDB odstupné jen jako knihovna pro postup „kopírovat a vložit“. Stáhněte si nejnovější kopii kódu z gitu GVDB a nakopírujte ji do svého projektu. Je licencována pod LGPLv2.1+.

Úplná výuka GVDB překračuje rozsah tohoto dokumentu.