Philip Withnall
philip.withnall@collabora.co.uk 2015
Armazenamentos simples de objetos persistentes
Rafael Fontenelle
rafaelff@gnome.org 2017

# Bancos de dados

#

        Resumo

          Use bancos de dados para casos de uso apropriados: não para dados de configuração (use GSettings). ()
          Escolha entre GOM e GVDB com base em se indexação é necessária. ()
          Considere sua política de vacuuming antes de usar GOM. ()
          Evite vulnerabilidades de injeção SQL usando as instruções preparadas. ()

# Quando usar bancos de dados

Dados de configuração devem ser armazenados em GSettings. Como uma regra de ouro, se alguns dados precisam ser persistentes e afetam como um aplicativo se comporta, eles são dados de configuração. Se eles estão potencialmente sujeitos a políticas impostas pelo administrador do sistema (tal como configurações de proxy e bloqueio), são dados de configuração. Se eles contêm conteúdo criado por usuários, não são dados de configuração e não devem ser armazenados em GSettings.

Para tais situações nas quais dados de usuário estejam altamente estruturado, armazená-los em um banco de dados é sensível. Há dois bancos de dados principais sugeridos para usar com GNOME: GOM e GVDB. GOM é um interfaceador do SQLite e, portanto, implementa indexação de campos e consultas no tipo SQL. GVDB é um armazenamento de objeto muito mais simples, oferecendo suporte a serialização rápida de um dicionário de objetos para disco.

GOM deve ser usado se você precisa de recursos avançados, especialmente indexação. Do contrário, GVDB deve ser usado.

Antes de decidir por usar o GOM (e, portanto, SQLite), você deveria considerar uma política de vacuuming para o banco de dados e se seu caso de uso vai interagir bem com o sistema de vácuo do SQLite. Vaccuming é, efetivamente, o termo para desfragmentação do banco de dados — se um banco de dados não for adequadamente aspirado, o desempenho será degradado e seu tamanho vai aumentar indefinidamente. Leia este artigo sobre vacuuming para mais informações; considere-o antes de escolher usar GOM.

GNOME possui uma outra biblioteca de banco de dados: GNOME Data Access (GDA). Ela visa abstrair o acesso a vários tipos de banco de dados relacionais, para uso em um programa utilitário de banco de dados ou programa de escritório, por exemplo. Ela não é adequado para armazenar configurações de usuários.

# Usando o GOM

Fornecer um tutorial do GOM vai além do escopo deste documento, mas um manual de referência está disponível.

## Injeção de SQL

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.

# Usando o GVDB

GVDB has a simple API which mirrors a conventional hash table. Presently, GVDB is only available as a copy-and-paste library; fetch the most recent copy of the code from GVDB git and copy it into your project. It is licensed under LGPLv2.1+.

Um tutorial completo do GVDB vai além do escopo deste documento.