Mobile OS is growing bigger and bigger and recently Android mobile OS surpassed Windows OS as the most used Operating System in the world. As mobile OS is growing larger and hardware as powerful as any normal computing device, data computation from mobiles is also increasing.
Database is the most common way of storing and managing data. For quite some time now, databases are handled on server-side or cloud and mobile devices only communicate with them through network. However, to make applications more responsive and less dependent on network connectivity, the trend of offline usage or less dependency on network is gaining popularity. Nowadays, applications keep DB locally or make a copy of DB over cloud onto local device and sync with it once in a day or whenever there is a network connectivity. This will help in faster and responsive applications which are functional even when there is no or limited internet connectivity.
Databases for mobiles need to be:
- Lightweight as storage is limited on mobile devices.
- No server requirement.
- In a form of library with no or very limited dependency (embeddable) so that it can be used when needed
- Fast and secure.
- Easy to handle through code, and option to make it private or shared with other applications.
- Low memory and power consumption.
There are lots of mobile databases coming into the market but not all of them satisfy all requirements mentioned in this article. Let us discuss few of the most popular databases for mobile apps and try to highlight their characteristics, pros and cons.
SQLite is relational DB, a lighter version of SQL designed for mobile. It is an in-process library that implements a self-contained, serverless, zero-configuration, transactional SQL database engine. It is an embedded SQL Database engine without any separate server process, unlike any other SQL database.
SQLite supports all the relational databases features and is open source compact library which is by default present in two main Mobile OS i.e. Android and iOS, and supported by blackberry and Windows phone.
SQLite can be stored both on disk as well as in memory and each database file is a single disk file and can be used cross-platform. It is very fast and need very less memory to operate.
Realm is a relational database management system which is like conventional databases, data can be queried and filtered, interconnected, and persisted but also have objects which are live and fully reactive.
Realm DB is developed by Realm and specially designed to run on mobile devices. Like SQLite, Realm is also serverless and cross-platform. It can be stored both on disk as well as in memory.
Realm has so many advantages over native SQLite, like:
- Objects in Realm are native Objects, You don’t have to copy objects out of the database, modify them, and save them back—you’re always working with the “live,” real object.
- Objects always stays in sync.
- Realm is much faster than SQLite. Realm can query up to 57 records/sec, whereas SQLite can do only up to 20 records/sec.
- Data can be secured with transparent encryption and decryption.
- Realm has a reactive architecture, means it can be directly connected to UI, if data changes it will automatically refresh and appear on screen.
- It automatically syncs to Realm Object server (if present) when there is network connectivity present.
- One application can have multiple Realms, both local and remote
- Can set different permissions for different users.
ORMLite is lighter version of Object Relational Mapping which provide some simple functionality for persisting java objects to SQL databases. It is ORM wrapper over any mobile SQL related DB.
ORMLite is used to simplify complicated SQL operations by providing flexible query builder. It also provides powerful abstract Database Access Object (DAO) classes.
ORMLite is helpful in big size applications with complex queries because it handles “compiled” SQL statements for repetitive query tasks. It also has support for configuring of tables and fields without annotations and supports native calls to Android SQLite database APIs.
But ORMLite does not fulfil all the requirements, like it is bulky as compared to SQLite or Realm, slower than SQLite and Realm but faster than most of the other ORMs present in market.
All in all ORMLite is a good SQLite replacement if application is big and complex in terms of DB usage.
Berkeley DB is an open source high performance embedded DB that allow us to handle data in different ways. It was developed by Sleepycat Software but acquired by Oracle in 2006. It provides API for so many languages including Android and iOS.
Berkeley DB can handle data in many ways. It can be in relational way like SQLite (by replacing SQLite with its own library), or it can be in Key/Value pair data as byte arrays and supports multiple data items for a single key. It also supports java objects as data or it can also be XML documents. Different libraries provides different types of API to handle multiple formats but all packaged Berkeley DB.
Berkeley can work as relational DB as well as NoSQL DB (Depends on which library you are using).
Good thing about Berkeley DB is that the API provided by it are compatible with SQLite. So one can use Berkeley DB without rewriting whole code again. Combination of Berkeley and SQLite is considered faster and perform better in concurrent and single writing multiple reading operations.
Berkeley is relatively faster than SQLite but because of so many different features it is bulkier than any other discussed DBs. So if Size of the application is a criteria try to use some other DB, unless you want a feature exclusively provided by Berkeley DB.
Couchbase Lite is powerful NoSQL embedded JSON database. It is a highly scalable DB with enterprise-level security.
Data in Couchbase Lite is stored as JSON documents. Each documents can have one or more attachments which is stored and loaded separately from documents.
Couchbase Mobile is the solution provided by Couchbase Lite for mobile applications. It is comprised of three different components: Couchbase Lite, an embedded NoSQL database, Sync Gateway. Couchbase is an offline first DB and sync with Cloud is needed or when network is available. Couchbase Lite runs locally on the device and persists data as JSON and binary format. All crud operations performed on local DB. Developer does not need to write sync code (if needed) to sync local DB with cloud, it is handled by Sync Gateway. Couchbase Lite comes with a conflict resolution mechanism that is quite similar to the one used by Git.
Another advantage of Couchbase Lite is that it provided native APIs for Android and iOS and plugins for Xamarin and PhoneGap.
So if there is a requirement of any NoSQL DB in mobile OS, Couchbase lite is the best bet as it is very fast, reliable and moderate in size.
In the end it totally depends on the requirements and feasibility for the application to choose which DB will fit in. But every mobile DB should fill most of the above mentioned requirements if not all.