2015-11-11 16 views
8

Tôi đang nghĩ đến việc sử dụng Realm.io làm ORM trong ứng dụng sản xuất.Các trường đọc của đối tượng Realm có chậm hơn đối tượng java không?

Như tôi hiểu từ các tài liệu, các đối tượng RealmResults được lưu trữ trong BackendStore (đĩa) thay vì trên RAM, vì RealmResult chỉ là proxy của các đối tượng thực được lưu trong cơ sở dữ liệu.

Vì vậy, câu hỏi của tôi là, sẽ đọc các trường của một RealmObject nhanh như đọc nó từ một đối tượng Java bình thường, cho rằng các đối tượng Java được lưu trữ trên RAM. Tôi có nhiều bài đọc trong ứng dụng của mình và tôi e rằng điều này sẽ ảnh hưởng đến khả năng phản hồi.

Trả lời

3

Tùy thuộc vào những gì bạn đang so sánh. Các RealmResults là kết quả của một truy vấn, và Realm không sao chép các đối tượng - trái với một ORM truyền thống. Realm sẽ chỉ lấy đối tượng khi cần thiết trong khi một ORM điển hình sẽ sao chép các đối tượng vào bộ nhớ. Việc sao chép các đối tượng từ SQLite sang các đối tượng Java thuần túy bị ràng buộc bởi hiệu năng I/O.

Truy cập RealmObject có thể chậm hơn truy cập đối tượng Java thuần túy. Nhưng một đối tượng Java đơn giản không liên tục. Realm cung cấp một tùy chọn trong bộ nhớ, đó là một so sánh trực tiếp hơn với các đối tượng Java thuần túy. Cõi trong bộ nhớ có thuộc tính là đối tượng Plain: bạn mất dữ liệu khi ứng dụng đóng.

Vì vậy, nếu bạn dành nhiều thời gian sao chép các đối tượng từ SQLite để có các đối tượng trong bộ nhớ nhanh, nó có thể sẽ chậm hơn tổng thể.

+2

Vì vậy, để có được quyền này, mỗi khi tôi sử dụng một getter trong một RealmObject nó thực sự đi để lấy nó từ db? Không có lớp bộ nhớ cache hay gì đó? Nếu không, bạn sẽ nhanh chóng nhận được truy vấn nào nếu bạn đang chậm chạp nhận được đối tượng thực sự? – orelzion

+0

Mỗi đối tượng Realm được hỗ trợ bởi tập tin Realm. Nội bộ, Realm là bộ nhớ ánh xạ các tập tin Realm vào bộ nhớ mà thực sự tăng tốc độ những thứ lên như bạn không phải deserialise đối tượng. – geisshirt

Các vấn đề liên quan