Realm database
Realm là gì? Realm gồm 2 sản phầm là Realm database và Realm Platform. Trong đó Realm databse là cơ sở dữ liệu mã nguồn mở, miễn phí trên mobile (hiện nay đã hộ trợ Android và iOS, trong tương lai gần sẽ có thêm React Native và Xamarin). Realm Platform hiện mới ra phiên bản Beta hỗ trợ trên ...
Realm là gì?
Realm gồm 2 sản phầm là Realm database và Realm Platform. Trong đó Realm databse là cơ sở dữ liệu mã nguồn mở, miễn phí trên mobile (hiện nay đã hộ trợ Android và iOS, trong tương lai gần sẽ có thêm React Native và Xamarin). Realm Platform hiện mới ra phiên bản Beta hỗ trợ trên MacOS, cho phép tương tác trực tiếp với cơ sở dữ liệu cả offline và mô hình client-server chạy realtime, giải quyết vấn đề muôn thuở là đồng bộ dữ liệu, bắt các sự kiện (reactive event handling). Realm Platform thì có 2 phiên bản, 1 bản miễn phí dành cho mọi người dùng, phù hợp cho phát triển ứng dụng nhỏ; bản Enterprise Edition thì có thời gian sử dụng thử và sẽ phải trả phí, phù hợp với phát triển ứng dụng lớn.
Sản phẩm này có vẽ hữu dụng để phát triển ứng dụng với những vấn đề khó như xử lý đồng bộ. Trong video demo của Realm Platform có trình diễn một ví dụ khá thú vi:
Có 2 người cùng chat facetime và tạo 1 tài liệu chung, họ cùng vẽ lên tài liệu đó, ngạc nhiên là phần vẽ của người kia hầu như hiện ngay trên giao diện của người còn lại, rất trực quan. Hiệu năng đạt đến như thế này thì rất đáng để xem xét đây! Link video: https://realm.io/news/introducing-realm-mobile-platform/ (Rất tiếc vì video này họ không đưa lên youtube nên chỉ có thể xem trên trang chủ của họ)
Realm được phát triển bởi các nhà phát triển Realm Inc. Đầu tiên Realm hỗ trợ iOS chính thức phát hành năm 2014.SQLite phát hành năm 2000, trước đó 14 năm và trên cơ sở phát triển bền vững của SQL. Vậy Realm có gì hay ho?
1. Realm mã nguồn mở
https://github.com/realm
2. Tất cả mọi phương thức của Realm đều từ objects
Mô hình dữ liệu của Realms là object nên cấu trúc trong cơ sở dữ liệu của bạn chính là model mà bạn dùng luôn. Ví dụ trong ứng dụng Android, cơ sở dữ liệu Realm có bảng Example thì nó sẽ được định nghĩa như thế này:
public class User extends RealmObject { @PrimaryKey private String name; private int age; @Ignore private int sessionId; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; }
Realm sẽ tự động tạo 1 bảng tên User với các trường y như trong object User đã định nghĩa.
Well done! so sánh với SQL thì chỗ này Realm hơn hẳn này. Nhưng hiệu năng thì sao?
3. Realm nhanh hơn SQLite
Kết quả điểm benchmark khi truy vấn Realm và SQLite
Tại sao Reaml nhanh hơn?
Ở Realm dữ liệu kết nối trực tiếp với CSDL chứ không tạo ra bản sao khi truy vấn -> dẫn đến các thao tác với cơ sở dữ liệu sau khi truy vấn đều thực hiện thẳng trên CSDL -> tốc độ thực thi tăng lên đáng kể.
4. Dễ dùng
Ghi dữ liệu
private void writeToDb() { Realm realm = Realm.getInstance(this); realm.beginTransaction(); User user = realm.createObject(User.class); user.setSessionId(1); user.setName("Binh"); user.setAge(23); realm.commitTransaction(); }
Tìm kiếm
private void readFromDb() { Realm realm = Realm.getInstance(this); User user = realm.where(User.class).equaTo("age",23).findFirst(); }
5. Cross-platform
Một CSDL từ Android có thể export ra .realm file dùng đúng file đấy import vào iOS, và ngược lại chỉ với vài dòng lệnh
Ngoài ra Realm còn hỗ trợ Encryption, Realm Brower, Realm platform, tài liệu khá chi tiết và đày đủ.
Chỉ mất khoảng hơn 1h để có thể thực hành với Realm và theo cá nhân tôi thực hành thì thấy công sức implemnt nhanh hơn SQLite nhiều lần.
Hi vọng cung cấp cho bạn 1 công cụ hữu ích khi làm việc với CSDL trên mobile.
Reference https://sebastiandobrincu.com/blog/5-reasons-why-you-should-choose-realm-over-coredata
https://realm.io/news/introducing-realm-mobile-platform/
http://blog.appconus.com/2015/08/06/gioi-thieu-realm-giai-phap-thay-the-cho-sqlite-2/
Ẹjnoy coding!