(Start Akonadi database internals documentation.) |
~reeves-87 (Talk | contribs) m (→Generic: run->running) |
||
| (8 intermediate revisions by 3 users not shown) | |||
| Line 13: | Line 13: | ||
== Backends == | == Backends == | ||
| + | |||
| + | Akonadi can use different SQL backends. The following documents backend-specific details. | ||
| + | |||
| + | In general, backend specific configuration and setup code can be found in server/src/storage/dbconfig*. | ||
| + | |||
| + | There are three possible operation modes for backends, most only support a subset: | ||
| + | * Embedded: No server process, database is completely integrated into the Akonadi process | ||
| + | * Internal server: Akonadi manages the database server process itself, taking care of starting/stopping and configuring it. | ||
| + | * External server: Akonadi connects to an already running database server. | ||
| + | |||
| + | Selecting and configuring the different backends can be done in ~/.config/akonadi/akonadiserverrc, details on the available options can be found here: [http://api.kde.org/kdesupport-api/kdesupport-apidocs/akonadi/html/classAkonadi_1_1DataStore.html akonadiserverrc options] | ||
=== MySQL === | === MySQL === | ||
| Line 18: | Line 29: | ||
Status: working, default backend for desktop systems | Status: working, default backend for desktop systems | ||
| − | + | Supported modes: Internal, External | |
| + | |||
| + | MySQL server configuration files for the internal mode can be found here: server/src/storage/mysql-global*.conf. | ||
=== Sqlite === | === Sqlite === | ||
| Line 24: | Line 37: | ||
Status: working with limitations, default backend for mobile systems | Status: working with limitations, default backend for mobile systems | ||
| − | + | Supported modes: Embedded | |
| + | |||
| + | Known issues: | ||
| + | * Requires newer version than the default Qt one. | ||
| + | * Requires patched QtSql driver to fix concurrency issues (Akonadi ships a fork of the driver with the necessary changes) | ||
| + | * Slower than MySQL (see e.g. http://bertjan.broeksemaatjes.nl/node/53), based on our measurments about 2-5x on the query level, but still in the milliseconds range, so that's probably not a big issue. | ||
| + | * Mutex-based transaction serialization in Akonadi (required because SQlite's support of concurrency might not be enough) can block clients while background operations such as a IMAP sync are going on. This is the real killer here, the more clients (including background processes like indexing) are accessing the data, the more blocking you experience. Background http://www.sqlite.org/faq.html#q5 , http://www.somacon.com/p369.php , http://www.sqlite.org/lockingv3.html , http://www.mail-archive.com/sqlite-users%40sqlite.org/msg43873.html | ||
=== PostgreSQL === | === PostgreSQL === | ||
| − | Status: | + | Status: Working |
| − | + | Supported modes: Internal, External | |
| + | |||
| + | Known issues: | ||
| + | * Manual dump and import are required after upgrading the Postgres server installation if the database scheme changes. | ||
=== Virtuoso === | === Virtuoso === | ||
Status: not working | Status: not working | ||
| + | |||
| + | Supported modes: External | ||
Proof-of-concept work was done during Akademy 2010, up to the point where the database could be created successfully. Known issues: | Proof-of-concept work was done during Akademy 2010, up to the point where the database could be created successfully. Known issues: | ||
| Line 47: | Line 71: | ||
Status: not working | Status: not working | ||
| − | + | Supported modes: Embedded | |
| + | Development stopped, MySQL/Embedded does not support transactions. | ||
== Tools == | == Tools == | ||
| Line 54: | Line 79: | ||
=== Generic === | === Generic === | ||
| − | ''akonadiconsole'' has support for browsing the database and | + | ''akonadiconsole'' has support for browsing the database and running arbitrary SQL queries. See [[Development/Tutorials/Akonadi/Application]]. |
=== MySQL === | === MySQL === | ||
Contents |
This page contains information about how the Akonadi server uses its internal SQL database. This is purely for Akonadi server developers, you are NOT supposed to use the database yourself, by-passing Akonadi!
Akonadi can use different SQL backends. The following documents backend-specific details.
In general, backend specific configuration and setup code can be found in server/src/storage/dbconfig*.
There are three possible operation modes for backends, most only support a subset:
Selecting and configuring the different backends can be done in ~/.config/akonadi/akonadiserverrc, details on the available options can be found here: akonadiserverrc options
Status: working, default backend for desktop systems
Supported modes: Internal, External
MySQL server configuration files for the internal mode can be found here: server/src/storage/mysql-global*.conf.
Status: working with limitations, default backend for mobile systems
Supported modes: Embedded
Known issues:
Status: Working
Supported modes: Internal, External
Known issues:
Status: not working
Supported modes: External
Proof-of-concept work was done during Akademy 2010, up to the point where the database could be created successfully. Known issues:
Completion of Virtuoso support is considered non-trivial and probably requires a lot of work on the Akonadi side, the SQL dialect is too different from what we support so far.
Status: not working
Supported modes: Embedded
Development stopped, MySQL/Embedded does not support transactions.
akonadiconsole has support for browsing the database and running arbitrary SQL queries. See Development/Tutorials/Akonadi/Application.
There are convenience scripts for running mysqld in the configuration used by Akonadi as well as (and probably more useful) running the MySQL command line client connected to the Akonadi database. See server/src/storage/akonadi-mysql-[client|server].sh.