Saturday, June 17, 2017

Realm - An Alternative to SQLite

Introduction:
Realm Mobile Database adalah sebuah open source mobile database yang dibuat sebagai alternatif SQLite dan Core Data. Realm lebih cepat dari SQLite dan ORM library lainnya. Realm lebih mudah digunakan, mempunyai API yang simple. Realm juga support untuk beberapa bahasa yaitu Java, Obj-C, Swift, React Native (JavaScript), dan Xamarin.

Keuntungan:
  • Fast!
  • Cross-Platform
  • Easy to use
  • Reduce dev time
  • Good documentation
Berikut adalah grafik perbandingan kecepatan dengan SQLite

 

Pada tulisan ini, saya hanya menunjukkan cara menggunakan Realm dalam Android saja.

Getting Started:
Pertama, pada project build.gradle dalam Android Studio tambahkan library berikut
  Screen Shot 2017-06-15 at 23.17.05.png
Selanjutnya, pada app build.gradle dalam Android Studio tambahkan plugin berikut
Screen Shot 2017-06-15 at 23.17.14.png 
Kemudian buat sebuah class dengan meng-extend aplication untuk membuat konfigurasi Realm yang nantinya ditambahkan kedalam file manifest project. Berikut contoh kofigurasi Realm
Screen Shot 2017-06-15 at 23.32.52.png
  
Selanjutnya konfigurasi tersebut bisa digunakan dimana saja. 
Screen Shot 2017-06-16 at 00.01.52.png 
 
SQLite vs Realm:
Misalnya kita ingin membuat sebuat tabel contact yang berisi kolom id, nama, dan nomor telepon. Dengan SQLite kita bisa membuat tabel seperti ini
 
Screen Shot 2017-06-15 at 14.43.22.png
Bayangkan jika kolom ada lebih dari 10 dst, pasti akan repot sekali ketik satu-satu. Dengan Realm kita tidak perlu repot-repot mengetik seperti SQLite. Kita hanya perlu membuat model class dengan meng-extend RealmObject dan generate getter-setter. Kekurangannya primary key ID pada Realm tidak tersedia auto-increment, sehingga kita harus membuat custom auto-increment atau menggunakan UUID pada java. Contoh model class Realm seperti ini

Screen Shot 2017-06-15 at 14.33.11.png

Selanjutnya untuk contoh method retrieve dalam SQLite seperti berikut
 
Screen Shot 2017-06-15 at 19.53.46.png

SQLite menggunakan cursor untuk mendapatkan hasil query, selanjutnya dikonversi kembali kedalam object java. Hal ini cukup merepotkan, ketika tabel mempunyai kolom yang banyak dan juga kita harus teliti dengan tipe variabel yang akan dikonversikan. Dengan Realm kita hanya perlu beberapa kode baris saja, contohnya seperti 
 
Screen Shot 2017-06-15 at 19.55.32.png
Untuk method add, update, delete tidak jauh berbeda baik SQLite dan Realm.
 
More Features:
Fitur-fitur lain dalam Realm, sebagai berikut
 
1. Query Options
- Conditions:
between(), greaterThan(), lessThan(),
greaterThanOrEqualTo() & lessThanOrEqualTo() 
equalTo() & notEqualTo() 
contains(), beginsWith() & endsWith() 
isNull() & isNotNull() 
beginsWith() & endsWith() & contains()
 
- Conditions Grouping: 
beginGroup() & endGroup() & not() & or()
 
- Sorting 
RealmResults<User> result = realm.where(User.class).findAll(); 
result.sort("age", RealmResults.SORT_ORDER_DESCENDING); 
 
- Querying 
findAll() & findFirst() & findAllSorted() 
 
2. Annotations 
@Required: Memberlakukan pemeriksaan untuk tidak membolehkan nilai null.
@Ignore: Kolom tidak harus disimpan.
@Index: Menambahkan index pencarian pada kolom.
@PrimaryKey: Identifikasi unik pada tiap database.
 
3. And Many More Features . . . .
Masih banyak lagi fitur-fitur yang disediakan oleh Realm, seperti enkripsi, schema, migrations, asynchronous transactions, dynamic realm, UI control,  browser, dll. 
 
Lebih lengkapnya silahkan buka docs realm :))

Terima kasih :D

Referensi:

No comments:

Post a Comment