Database Backends

From Gramps
Revision as of 11:06, 14 August 2015 by Dsblank (talk | contribs) (DB-API 2.0 Backend)
Jump to: navigation, search

This page documents the new backend infrastructure introduced in Gramps 5.0.

Overview

When Gramps was originally written, it was decided that it would use the Berkeley database (also known as BSDDB) and its Python bindings. At the time (early 2000s) there were not that many choices for hierarchical structures, which Gramps uses.

The BSDDB system is very sophisticated; however, it requires that all of the details be manually handled. Although this is quite powerful, it does take a high level of skill.

A serious problem with the BSDDB system is that the internal system can change with a system upgrade. That means that you may not be able to open your database after a system upgrade.

Another problem with the BSDDB system is that it is very easy to end up with corrupted databases.

Finally, the way that Gramps uses BSDDB prevents users from being able to have multiple simultaneous users. This makes the BSDDB unsuitable for a collaborative website, for example.

For these reasons, it was decided to create a level of abstraction such that we can use different databases but keep the core Gramps code the same. This was designed in GEPS 032: Database Backend API and implemented in 2015.

Backends

Currently, there are 4 different database backends with which you can use. These are described below.

BSDDB Backend

As described above, the Berkeley DB (BSDDB) is the standard Gramps database. All internal databases prior to Gramps 5.0 were of this type, although the version and low-level details have continued to evolve and change over the last 10 years.

DB-API 2.0 Backend

This API was defined in Python's PEP-0249. It defines a simple interface to run SQL commands, and return their results. Some common database engines implement this API, including:

  • Sqlite
  • MySQL
  • Postgresql
  • ODBC

Other implementations of DB-API 2.0 are listed here: https://wiki.python.org/moin/DbApiModuleComparison

DB-API 2.0 describes an interface using SQL; however, Gramps does not use SQL in a typical relational database style. The SQL tables are used as a "data store" where your Gramps data is stored as serialized (ie, "pickled") blobs. This keeps the data in a hierarchical structure, but allows any DB-API 2.0 database to be used as the data store.

DictionaryDB Backend

DjangoDb Backend