Realm est une base de données, orientée objets, open source, destinée aux mobiles. La version Android est sortie en septembre 2014, moins de 3 mois après la version iOS.
Comme nous l'avons écrit précédemment, Realm n'utilise pas SQLite comme moteur. Au lieu de cela, Realm dispose de son propre moteur C++ et se positionne comme la première alternative à SQLite destinée aux mobiles. Et cette alternative est maintenant disponible pour Android.
La version Android de l'API Realm est légèrement différente de la version iOS, ce qui est lié aux différences entre Objective C et Java. L'API Java étant bien plus fortement typée et bien plus fluent.
Par exemple, sur iOS, les requêtes sont exécutées à l'aide de méthodes statiques telles que "objectWhere" qui retourne un RLMArray. Les prédicats sont totalement basés sur des chaînes de caractères. Voilà comment écrire une requête en Objective C :
RLMArray *tanDogs = [Dog objectsWhere:@"color = 'tan' AND name BEGINSWITH 'B'"];
Voilà comment vous écririez la même requête en Java pour Android :
RealmResults<Dog> tanDogs = realm.where(Dog.class)
.equalTo("color", "tan")
.beginsWith("name", "B")
.findAll();
Ceci pourrait être totalement remplacé par une version basée sur un langage de requêtes sous forme de chaînes de caractères qui fonctionnerait sous iOS, Android et d'autres plateformes. Tim Anglade, chef de produit chez Realm, nous a indiqué lors d'un échange par email que la direction que prendrait l'API serait largement basée sur les retours de la communauté.
Bien que Realm soit une base de données orientée objets, il existe des différences majeures avec d'autres bases orientées objets. Tim nous explique que, bien que les données soient stockées dans un format natif, les objets ne sont pas stockés tels quels, dans leur langage spécifique et simplement écrits sur les disques. Au lieu de cela, les objets sont stockés dans un format universel, basé sur des tableaux, par le noyau c++. Ceci permet à Realm d'accéder aux données à l'aide de nombreux langages et de requêtes ad hoc.
Un des avantages de cette approche hybride basée sur les objets et les tableaux par rapport aux bases de données relationnelles est qu'elle permet de requêter sur des graphes - même des graphes d'objets profonds que l'on peut trouver sur des smartphones anciens, sans impacter les temps de réponses. Les benchmarks, qui ont été publiés par Realm, révèlent des performances jusqu'à dix fois supérieures à celles de SQLite pour des opérations communes.
Si vous disposez actuellement d'une application qui utilise CoreData (sur iOS) ou SQLite (sur Android) et que vous souhaitez migrer vers Realm, vous avez clairement du travail. Il ne s'agit pas d'un simple changement - Tim nous explique que CoreData et SQLite préfèrent une forme très normalisée qui ne fonctionne pas toujours avec Realm. Il est préférable de repenser votre schéma et de construire votre modèle à partir d'objets.
Une fois que vous avez modifié votre schéma pour qu'il soit adapté à Realm, il sera beaucoup plus simple de migrer de CoreData/SQLite. Il suffit de mettre en place une migration (de la version 0 à la version 1 de votre base Realm), et, au cours de cette migration, de charger les données de votre base SQLite dans des objets Realm et de simplement les sauver.
Plus simplement, si vos données sont également stockées sur un serveur, vous pouvez simplement créer la base de données Realm from scratch.
Avant que vous adoptiez Realm, notez qu'il s'agit d'un composant d'avant-garde, pour lequel la compatibilité de l'API n'est pas garantie avec les versions futures.
Vous pouvez en apprendre plus sur Realm pour Android ou jeter un oeil au code sur Github.