Philip Withnall
philip.withnall@collabora.co.uk 2015
Enkla beständiga objektlagringar
Anders Jonsson
anders.jonsson@norsjovallen.se 2018

# Databaser

#

        Sammanfattning

          Använd databaser för lämpliga användningsområden: inte konfigurationsdata (använd GSettings). ()
          Välj mellan GOM och GVDB beroende på om indexering krävs. ()

            Consider your vacuuming policy before committing to using GOM.
            ()

          Undvik SQL-injektionssårbarheter genom att använda förberedda satser. ()

# När databaser bör användas

Configuration data should be stored in GSettings. As a rule of thumb, if some data needs to be persistent and affects how an application behaves, it is configuration data. If it could potentially be subject to policies imposed by the system administrator (such as proxy or lockdown settings), it is configuration data. If it contains user created content, it is not configuration data, and should not be stored in GSettings.

For such situations where user data is highly structured, storing it in a database is sensible. There are two main databases suggested for use within GNOME: GOM and GVDB. GOM is a wrapper around SQLite, and hence implements indexing of fields and SQL-style queries. GVDB is a much simpler object store, supporting fast serialization of a dictionary of objects to disk.

GOM bör användas om du behöver avancerade funktioner, i synnerhet indexering. I annat fall bör GVDB användas.

Before deciding to use GOM (and hence SQLite), you must consider a vacuuming policy for the database, and whether your use case will interact well with SQLite’s vacuuming system. Vacuuming is effectively SQLite’s term for defragmenting the database — if a database is not vacuumed appropriately, performance will degrade and the database size will increase indefinitely. Read this article on vacuuming for more information; please consider it before choosing to use GOM.

GNOME has another database library: GNOME Data Access (GDA). This is targeted at abstracting access to various types of relational database, for use in a database utility program or office program, for example. It is not suitable for storing user settings.

# Använda GOM

Att tillhandahålla en GOM-handledning är utanför ändamålet för detta dokument, men en referenshandbok finns tillgänglig.

## SQL-injektion

GOM does allow access to the lower level SQLite query APIs. When using them, queries must be constructed using SQLite’s prepared statement and value binding API, rather than by constructing SQL strings then passing them to SQLite to parse. Constructing strings makes SQL injection vulnerabilities very likely, which can give attackers access to arbitrary user data from the database.

# Använda GVDB

GVDB har ett enkelt API som speglar en konventiell hashtabell. För närvarande finns GVDB endast tillgängligt som ett kopiera-och-klistra-bibliotek; hämta den senaste versionen av koden från GVDB:s git och kopiera den till ditt projekt. Det är licensierat under LGPLv2.1+.

En fullständig GVDB-handledning är utanför ändamålet för detta dokument.