UPDATED 2022. At Droidcon Berlin, we noticed a lot of questions around databases. Many people weren’t aware of SQLite alternatives and Object-Relational Mappers (ORMs). Therefore, we follow up with an overview of the mobile database landscape.
What is a mobile database?
While Wikipedia defines a mobile database as “either a stationary database that can be connected to by a mobile computing device […] over a mobile network, or a database which is actually stored by the mobile device,” we solely refer to databases that run on the mobile device itself.
Why use a mobile database?
There are some advantages associated with using a mobile database:
- full offline modus for apps that depend on stored data
- frugal on bandwidth for apps that depend on stored data
- stable and predictable performance independent from network availability
- (personal data can be stored with the user, where some say they belong)
What are the advantages and disadvantages of working with SQLite?
The most established mobile database – one could even say the only “established” – mobile database is SQLite. This may be due to SQLite being around since the year 2000 and being embedded with iOS and Android since the beginning. SQLite is a relational database.
In our previous post, we presented advantages and disadvantages of using raw SQLite without any tools as we had gathered them with a group of developers. Based on this, we generated a more generic overview of advantages and disadvantages of using raw SQLite:
advantages | disadvantages |
|
|
What are SQLite alternatives?
There are plenty of SQLite alternatives. If you simply find it unpleasant to write a lot of SQL and boilerplate code, you can use a object abstraction on top of SQLite. This abstraction is usually an ORM (object/relational mapping). But if you want to replace SQLite completely, there are also quite a few alternative databases: Couchbase Lite, Interbase, LevelDB, Oracle Berkeley DB (formerly Oracle's mobile database was "Oracle Database Lite"), Realm, SnappyDB, Sparksee Mobile (graph database, brand-new at the time of this article), SQL Anywhere, SQL Server Compact (discontinued), and UnQLite.
To give you an overview, we have compiled a small comparison table:
Edge Database | Android / iOS | Type of data stored | Sync Central | Sync P2P | Offline Sync | Data level encryption | License / business model | Flutter support | Short description | Minimum Footprint size | Company |
Azure SQL Edge | No | Relational DB for IoT | No | No | No | will provide encryption | Proprietary | No | Designed as a SQL database for the IoT edge; however, due to the footprint it is no edge database | 500 MB+ | Microsoft |
Couchbase Lite | Android / iOS | JSON Documents / NoSQL db | Yes | Yes | No | Database encryption with SQLCipher (256-bit AES) | Apache 2.0 | Unofficial Flutter plugin for Couchbase Lite Community Editionavialable | Embedded / portable database with P2P and central synchronization (sync) support. Secure SSL. | < 3,5 MB | Couchbase |
extremeDB | iOS | In-memory relational DB, hybrid persistence | No | No | No | AES encryption | Proprietary | No | Embedded relational database | < 1 MB | McObject LLC |
InterBase ToGo / IBLite | Android / iOS | Relational | No | No | No | 256 bit AES strength encryption | Proprietary | No | Embeddable SQL database. | < 1 MB | Embarcadero |
LevelDB | Android / iOS | Key-value pairs / NoSQL db | No | No | No | No | New BSD | Unofficial client that is very badly rated | Portable lightweight key-value store, NoSQL, no index support; benchmarks from 2011 have been removed unfortunately | < 1 MB | LevelDB Team |
LiteDB | Android / iOS (with Xamarin only) | NoSQL document store, fully wirtten in .Net | No | No | No | Salted AES | MIT license | No | A .Net embedded NoSQL database | < 1 MB | LiteDB team |
Mongo Realm (acquired by Mongo in 2019) | Android / iOS | Object Database | Yes, tied to using MongoDB servers | No | No | Yes | Proprietary with Apache 2.0 License APIs | Unofficial Flutter plugin, in Alpha according to their website [11.03.2022] | Embedded object database | 5 MB+ | MongoDB Inc. |
ObjectBox | Android / iOS / Linux / Windows / any POSIX | Object-oriented NoSQL edge database for high-performance on edge devices in Mobile and IoT | Yes | WIP | Yes | transport encryption; additional encryption upon request | Apache 2.0 and Proprietary | Yes | High-performance NoSQL Edge Database with out-of-the-box Data Sync for Mobile and IoT; fully ACID compliant; benchmarks available. | < 1 MB | ObjectBox |
Oracle Database Lite | Android / iOS | Relational | Yes | Yes | No | 128-bit AES Standard encrytion | Proprietary | No | Portable with P2P and central sync support as well as support for sync with SQLite | < 1 MB | Oracle Corporation |
redis DB | No | K/V in-memory store, typically used as cache | No | No | No | TLS/SSL-based encryption can be enabled for data in motion. | Three clause BSD license, RSAL and Proprietary | Unofficial redis Dart client available | High-performance in-memory Key Value store with optional durability | An empty instance uses ~ 3MB of memory | redislabs (the original author of redis left in 2020) |
SQL Anywhere | Android / iOS | Relational | Dependent | No | No | AES-FIPS cipher encryption for full database or selected tables | Proprietary | No | Embedded / portable database with central snyc support with a stationary database | Sybase iAnywhere | |
SQLite | embedded on iOS and Android | Relational | No | No | No | No, Use SQLCipher to encrypt SQLite | Public domain | Flutter plugins (ORMs) for SQLite, but nothing from Hwaci | C programming library; probably 90% market share (very personal assumption, 2016) | < 1 MB | Hwaci |
SQL Server Compact | Android / iOS | Relational | No | No | No | Yes | Proprietary | No | Small-footprint embedded / portable database for Microsoft Windows mobile devices and desktops, supports synchronization with Microsoft SQL Server | 2 MB | Microsoft |
UnQLite | Android / iOS | Key-value pairs / JSON store / NoSQL db | No | No | No | 128-bit or 256-bit AES standard encryption | 2-Clause BSD | not yet; might be coming though; there was a 0.0.1 released some time ago | Portable lightweight embedded db; self-contained C library without dependency. | ~ 1.5 MB | Symisc systems |
Star this matrix on GitHub. Mobile databases - as defined here - is a subset of Edge databases.
If you are interested in an indication of the diffusion rate, check out the following database popularity ranking: http://db-engines.com/en/ranking
Also note: DB-Engines lists 300+ databases as of 2020; the database of databases, which also includes hobby projects, counts 700+ databases. While the database market is very crowded and indeed vibrant, the Edge Database market, is still is a very small and clear market with only few notable players. In short: In the realm of edge databases there is still room 😉
What about NoSQL on Mobile?
NoSQL is a rather large bracket for database approaches that use a data structure that is non-relational. Indeed, NoSQL databases include key-value stores, document databases, wide-column stores, object databases, and graph databases. Generally, NoSQL is associated with scalability and performance. However, the scalability of NoSQL approaches on the serverside largely stems from scaling horizontally (adding more servers), which usually is no advantage for a mobile database running on mobile devices.
While NoSQL approaches usually process some operations faster, the particular fit of a particular NoSQL database depends on the use case. Also, the speed of a NoSQL approach may come with less emphasis on reliable data storage (see ACID). So, if your app requires strong data consistency or you handle highly structured data, like e.g. an address book, a relational database may still be a good choice. If, however, you are looking to handle unstructured data or need a lot of flexibility, a NoSQL approach may be more interesting for you.
The general traits of NoSQL approaches that make it worthy for evaluation for mobile:
-
Object-oriented code in iOS and Android Apps
Developers implement apps in object-oriented languages, meaning an app works with objects. But a relational database works with columns and rows and does not allow storing objects directly. Consequently, objects need to be serialized or reassembled in possibly inefficient way when stored or retrieved. For any database operation this takes time and imposes a natural speed limitation. The right NoSQL approach, e.g. an object database/store, may solve it without complex mappings.
-
Dynamic requirements of Mobile Apps
After the release of a mobile app, there is often an ongoing live operation process to continually adapt and enhance the app (bug fixes, new features, changes due to changes in the software or legal environment). Implementing changes in a mobile app with a relational client database requires changes to the database schema, which results in additional work. NoSQL databases usually operate without a schema (usually with some enforcing data validation rules). Adding new fields as needed and storing dissimilar data together as necessary means minimal implementing effort for the database. However, again it all depends on the specific database implementation and use case.
-
Growing need for handling big and / or unstructured data on Mobile
There seems to be the need for handling more and more data (roughly speaking, the amount of data is doubling every 24 months) generally and on mobile. Obviously, on mobile the storage space is still a major concern, which usually omits simply storing every possible data point for potential use. Nevertheless, most NoSQL databases favor speed and store unstructured data. So, for mobile app handling large amounts of (unstructured) data, a NoSQL approach may be the solution.
However, other criteria like size, battery-friendliness or security may also be important factors for choosing a mobile database.
All in all, we hope, we provide a good general overview of the general status of mobile databases.