Giới thiệu Realm – Giải pháp thay thế cho SQLite

Bối cảnh

Để làm việc với SQLite, ta phải thực hiện rất nhiều thao tác: xây dựng khung chương trình, mô hình, heplers, truy vấn, blah blah. Thực sự việc này tốn rất nhiều thời gian trong tiến trình phát triển phần mềm.
Những người mới tiếp cận với SQLite sẽ phải bỏ ra nhiều giờ loay hoay trong khởi tạo, nhập xuất, xây dựng câu truy vấn và đặc biệt là code sẽ rất khó quản lý.

Giải pháp trước kia

  1. Viết thư viện hỗ trợ
    Hồi ở Nikme, công ty viết ra một thư viện chung, hỗ trợ cho các thao tác lặp đi lặp lại này để giảm thiểu thời gian phát triển đồng thời giúp tương tác với SQLite tốt hơn, code dễ bảo trì hơn…
  2. Sử dụng thư viện ORM (Object Relational Mapping)
    ORM thực sự hữu ích khi chuyển (ánh xạ) các bảng trong SQLite vào các đối tượng (model), mọi thao tác với SQLite bây giờ được thực hiện qua các đối tượng này. Tuy nhiên, việc sử dụng ORM phát sinh ra vấn đề về hiệu năng, độ ổn định. ActiveAndroid là một ví dụ.

Realm – Giải pháp thay thế cho SQLite

Realm is a replacement for SQLite & Core Data.
It can save you thousands of lines of code & weeks of work,
and lets you craft amazing new user experiences.

Realm là một cơ sở dữ liệu (CSDL) nguồn mở, sử dụng ORM, hoàn toàn miễn phí khi sử dụng, kể cả những sản phẩm thương mại.
Realm lưu dữ liệu trên bộ nhớ trong. Realm hỗ trợ đa nền tảng (hiện tại là Android, iOS, OSX), file CSDL có thể chia sẻ dễ dàng giữa các nền tảng trên.
Realm luôn giữ tư tưởng nâng cao hiệu năng và giữ vững độ ổn định. Kết quả benchmark (có source code) cho thấy Realm nhanh hơn khoảng 2-10 lần trong các tác vụ đọc, ghi so với SQLite thuần và một số thư viện ORM phổ biến hiện nay.
Việc làm quen, tiếp cận với Realm cực kỳ dễ dàng và đơn giản.
Vậy Realm còn có gì để tự tin tuyên bố mình là giải pháp thay thế cho SQLite?

  • Cộng đồng hỗ trợ đông đảo, nhiệt tình
    Nếu có bất cứ vấn đề, thắc mắc gì, bạn sẽ được hỗ trợ trực tiếp bởi các lập trình viên phát triển Realm, và cộng đồng nguồn mở trên githubStack Over Flow.
  • Dữ liệu được kết nối trực tiếp tới CSDL chứ không tạo ra bản sao khi truy vấn.
    Do đó, các thao tác với dữ liệu sau khi truy vấn (tìm kiếm, sắp xếp, lọc,…) đều được thực hiện thẳng trên CSDL, do đó, tốc độ thực thi sẽ tăng lên đáng kể.
  • Các lớp của Realm hỗ trợ nhiều trong việc tránh lỗi Null Pointer Exception.
    Khi truy vấn không có kết quả, đối tượng RealmResults được trả về sẽ là rỗng, và phương thức size() sẽ cho ra 0.
  • Hỗ trợ in-memory database
    Trong một số trường hợp, chúng ta chỉ cần tạo một CSDL tạm, cần tương tác (đọc/ghi) nhanh hơn nữa, chúng ta sẽ cần đến việc giữ CSDL trong bộ nhớ RAM (in-memory database). Realm hoàn toàn hỗ trợ giải pháp này.
  • Hỗ trợ tạo model từ JSON hoặc từ InputStream (đọc từ file, tải từ trên mạng về)
  • Tương thích tốt với các thư viện thông dụng đang có (Gson, Retrofit, Otto, Robolectric…), hỗ trợ tích hợp tuỳ chỉnh
    Bạn có thể định nghĩa cách các thư viện này tương tác với nhau, do đó bạn sẽ dùng các thư viện theo đúng ý mình muốn.
  • Hỗ trợ custom migrating
    Việc cập nhật CSDL, thêm/bớt các bảng, trường đều được hỗ trợ một cách thuận tiện, đơn giản nhất bằng cách kế thừa lớp RealmMigration.
  • Hỗ trợ mã hoá file CSDL
    Hiện tại, Realm sử dụng AES-256 để mã hoá file CSDL.
  • Tài liệu đầy đủ, chi tiết
    Bạn có thể bắt tay tích hợp Realm vào dự án của bạn ngay chỉ sau nửa giờ đọc tài liệu hướng dẫn. Documentation cũng rất chi tiết, cụ thể và chuyên nghiệp.
    Ngoài ra, Pealm cũng viết sẵn luôn các ví dụ mẫu trên github.

Kích thích không? Code thử hè?

Code chút chơi

Log cat output:

Chỉ vậy thôi 😛
Ahh, source code on github:

Lập trình và hơn thế nữa

Spread the love
  •  
  •  
  •  
  •  
  •  

Leave a Reply

6 Comments on "Giới thiệu Realm – Giải pháp thay thế cho SQLite"

Notify of
avatar
Sort by:   newest | oldest | most voted
Lê Bình
Guest

Ưu điểm và khuyết điểm của nó là gì?

Lê Bình
Guest

Bạn thật pro. Bạn có thể giải thích ý này rỏ hơn không. Thanks bạn 😉
Dữ liệu được kết nối trực tiếp tới CSDL chứ không tạo ra bản sao khi truy vấn.
Do đó, các thao tác với dữ liệu sau khi truy vấn (tìm kiếm, sắp xếp, lọc,…) đều được thực hiện thẳng trên CSDL, do đó, tốc độ thực thi sẽ tăng lên đáng kể

Phong
Guest

SQLite tao ra ban sao r minh lam viec vow ban sao sau do moi cap nhat van database,Realm lam viec truc tien

Dat Tran
Guest

Chào bạn. Mình đang muốn xây dựng từ điển android sử dụng realm. Hiện tại mình chưa tìm được giải pháp để import dữ liệu từ điển vào. Bạn có thể mách nước giúp mình không? Thanks^^
Mình tham khảo bài này: http://stackoverflow.com/questions/28478987/how-to-view-my-realm-file-in-the-realm-browser

Dat Tran
Guest

Mình muốn có 1 GUI để việc nhập và sửa đổi dữ liệu ấy, vì dữ liệu của mình thi thoảng sẽ thay đổi theo yêu cầu. Cảm ơn bạn.

Cao Quảng Bình
Guest

Chào Đạt, mình nghĩ những việc này bạn nên viết 1 script để nó convert từ db cũ sang realm, chứ không nên sửa thủ công, mất thời gian lắm 🙂

Happy coding!