|
Packit |
1470ea |
|
|
Packit |
1470ea |
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2003/XInclude" type="topic" id="databases" xml:lang="cs">
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<link type="guide" xref="index#specific-how-tos"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<credit type="author copyright">
|
|
Packit |
1470ea |
<name>Philip Withnall</name>
|
|
Packit |
1470ea |
<email its:translate="no">philip.withnall@collabora.co.uk</email>
|
|
Packit |
1470ea |
<years>2015</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<include xmlns="http://www.w3.org/2001/XInclude" href="cc-by-sa-3-0.xml"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<desc>Úložiště pro jednoduché trvalé objekty</desc>
|
|
Packit |
1470ea |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>Databáze</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<synopsis>
|
|
Packit |
1470ea |
<title>Shrnutí</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item>Databáze používejte ve vhodných případech, tzn. ne pro nastavení (k tomu slouží GSettings). (<link xref="#when-to-use-databases"/>) </item>
|
|
Packit |
1470ea |
<item>Volte mezi GOM a GVDB podle toho, jestli je zapotřebí indexování. (<link xref="#when-to-use-databases"/>) </item>
|
|
Packit |
1470ea |
<item>Popřemýšlejte o zásadách úklidu databáze, než zařadíte používání GOM. (<link xref="#when-to-use-databases"/>) </item>
|
|
Packit |
1470ea |
<item>Zranitelnosti v podobě injektáže SQL se vyhněte pomocí předpřipravených dotazů. (<link xref="#sql-injection"/>) </item>
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</synopsis>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="when-to-use-databases">
|
|
Packit |
1470ea |
<title>Kdy používat databáze</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Data nastavení by měla být uložena v <link href="https://developer.gnome.org/gio/stable/GSettings.html">GSettings</link>. 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.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
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.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
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.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
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 <link href="http://blogs.gnome.org/jnelson/2015/01/06/sqlite-vacuum-and-auto_vacuum/">tomto článku</link> na dané téma. Popřemýšlejte o něm, než zvolíte použití GOM.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
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í <link href="https://developer.gnome.org/gio/stable/GSettings.html">uživatelských nastavení</link>.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="gom">
|
|
Packit |
1470ea |
<title>Používání GOM</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Výuka použití GOM přesahuje rámec tohoto dokumentu, ale <link href="https://developer.gnome.org/gom/">je k dispozici referenční příručka</link>.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="sql-injection">
|
|
Packit |
1470ea |
<title>Injektáž SQL</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
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í <link href="https://www.sqlite.org/c3ref/stmt.html">předpřipravených výrazů</link> SQLite a API pro <link href="https://www.sqlite.org/c3ref/bind_blob.html">napojení hodnot</link>. Přímé sestavování řetězců zvyšuje pravděpodobnost útoků typu <link href="http://en.wikipedia.org/wiki/SQL_injection">injektování SQL</link>, pomocí kterých může útočník získat přístup k libovolným uživatelským datům v databázi.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<section id="gvdb">
|
|
Packit |
1470ea |
<title>Používání GVDB</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
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 <link href="https://git.gnome.org/browse/gvdb">gitu GVDB</link> a nakopírujte ji do svého projektu. Je licencována pod LGPLv2.1+.
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
Úplná výuka GVDB překračuje rozsah tohoto dokumentu.
|
|
Packit |
1470ea |
</section>
|
|
Packit |
1470ea |
</page>
|