Realm – a mobile database and a replacement for SQLite & Core Data

Sau khi Apple công bố iOS 8 với những cải tiến về performance và những tính năng mang tính đột phá như: Health, Handoff, Airdrop…tại WWDC 2014, thì ngay sau đó một tháng, 7/2014, một cross-platform database được ra mắt dành riêng cho các ứng dụng mobile với cách viết code ngắn gọn, trong sáng và vô cùng mạnh mẽ. Đó là Realm(https://twitter.com/realm).

Realm(https://realm.io/) được phát triển bởi một công ty chuyên hỗ trợ các dự án startup trong việc thu hút vốn đầu tư từ các investors trên toàn thế giới. Công ty có trụ sở chính tại San Francisco, bạn có thể muốn tìm hiểu thêm về họ: http://www.ycombinator.com/

Quay trở lại một chút thời điểm khi chưa có Realm. Khi các bạn LTV mobile xây dựng một ứng dụng mobile có sử dụng đến database lưu trữ data sẽ cần lựa chọn một database backend cụ thể như CoreData (iOS) hoặc SQLite(iOS, Android). Tùy vào từng dự án cụ thể mà một team có thể lựa chọn các vendor khác nhau, giả dụ như team nhận được một dự án về phát triển một ứng dụng cho phép người dùng tìm điểm sửa xe gần nhất với giả rẻ nhất, chất lượng tốt nhất (tạm gọi tên ứng dụng là Viva). Ứng dụng được đặt hàng phát triển trên 2 nền tảng chính là Android và iOS, lại phân tích yêu cầu bài toán một chút, với ứng dụng kiểu này thì chắc chắn sẽ cần lưu trữ lại data của các điểm sửa xe trong một phạm vi nào đó quanh vị trí của người dùng trong trường hợp không có 3G or wifi (offline mode). Điều này có nghĩa team cần đưa ra quyết định là sẽ xử dụng vendor nào (CoreData or SQLite) ? Thông thường sự lựa chọn tối ưu nhất sẽ là SQLite. Lý do:

  • Support trên 2 nền tảng iOS và Android.
  • Quen thuộc cho LTV thông qua các câu lệnh sql statements.
  • Có các wrappers tiện ích như FMDB (https://github.com/ccgus/fmdb).

Với các ưu điểm trên, lựa chọn SQLite thật dễ dàng. Tuy nhiên cũng có các nhược điểm tồn tại không chỉ ở SQLite, mà còn ở CoreData. Do bài viết này tập trung vào phân tích về Realm nên các bạn có thể tìm hiểu thêm ưu nhược điểm của 2 vendor này thông qua slide về chúng tại đây: https://drive.google.com/file/d/0ByBQxPjuuB5pYkcwZk9uYzVsWEk/view?pli=1

Vậy vì sao lại chọn Realm(https://www.youtube.com/watch?v=hNDNXECD84c) ?? Đây là lý do:

  • Realm cũng hỗ trợ các nền tảng mobile, có cả support cho Java.
  • Realm nhỏ gọn, vô cùng dễ dàng để tích hợp vào project.
  • Realm tỏ ra vượt trội về performance trong việc insert and fetch hàng trăm ngàn record.
  • Realm tối ưu các dòng code cho một tác vụ nào đó với database local.

Tóm lại, đây là tất cả những gì họ nói về Realm:

Đến đây có thể các bạn sẽ nghi ngờ về độ chính xác về các đặc điểm ưu việt của Realm ? Tôi sẽ đưa thêm các bản so sánh về performance và code demo để xác thực một số điều về Realm: