12/08/2018, 18:04

ObjectBox, một cơ sở dữ liệu Android hiện đại và dễ sử dụng ( phần 3)

Ở phần trước mình đã giới thiệu về các kiểu query trong objectbox, ObjectBox thực sự là một thư viện rất mạnh mẽ với hơn 1300 hàm truy vấn, bên cạnh đó ObjextBox còn tích hợp với những library mạnh mẽ khác hôm nay chúng ta sẽ tiếp tục tìm hiểu về các tính năng nâng cao của objectbox đồng thời thực ...

Ở phần trước mình đã giới thiệu về các kiểu query trong objectbox, ObjectBox thực sự là một thư viện rất mạnh mẽ với hơn 1300 hàm truy vấn, bên cạnh đó ObjextBox còn tích hợp với những library mạnh mẽ khác hôm nay chúng ta sẽ tiếp tục tìm hiểu về các tính năng nâng cao của objectbox đồng thời thực nghiệm so sáng với Room Database xem thử thật sự tốc độ của nó có nhanh hơn 10X so với các cơ sở dữ liệu khác không nhé

ObjectBox giúp ứng dụng của bạn dễ dàng theo dõi và xử lý các luồng dữ liệu khi có sự thay thông qua các thành phần

  • data observers,
  • reactive extensions,
  • and an optional library to work with RxJava.

EX

Query<Task> query = taskBox.query().equal(Task_.complete, false).build();
query.subscribe(subscriptions)
     .on(AndroidScheduler.mainThread())
     .observer(data -> updateUi(data));

Observing General Changes BoxStore cho phép đăng ký các loại đối tượng. Giả sử bạn muốn quan sát các đối tượng cho một ứng dụng danh sách task phải làm:DataObserverTask

DataObserver<Class> taskObserver = ...;
boxStore.subscribe(Task.class).observer(taskObserver);

ObjectBox sẽ gọi taskObserver.onData(Task.class) để thông báo cho bạn về những thay đổi

Observing Queries

Query<Task> query = taskBox.query().equal(Task_.completed, false).build();
subscription = query.subscribe().observer(data -> updateUi(data));

LiveData là một thư viện mới trong clean android Architecture, cho phép lắng nghe sự thay đổi của luồng dữ liệu, ObjextBox cũng tích hợp với livedata

public class NoteViewModel extends ViewModel {
​
    private ObjectBoxLiveData<Note> noteLiveData;
​
    public ObjectBoxLiveData<Note> getNoteLiveData(Box<Note> notesBox) {
        if (noteLiveData == null) {
            // query all notes, sorted a-z by their text
            noteLiveData = new ObjectBoxLiveData<>(notesBox.query().order(Note_.text).build());
        }
        return noteLiveData;
    }
}
NoteViewModel model = ViewModelProviders.of(this).get(NoteViewModel.class);
model.getNoteLiveData(notesBox).observe(this, new Observer<List<Note>>() {
    @Override
    public void onChanged(@Nullable List<Note>; notes) {
        notesAdapter.setNotes(notes);
    }
});

Khi có sự thay đổi về dữ liệu hàm onChanged sẽ được gọi và chúng ta có thể update UI

Để so sánh với Room mình sẽ viết một đoạn mã input và get 1.000.000 object ở cả 2 thư viện và so sánh thời gian thực thi của 2 thư hiện như thế nào

ObjectBox

for(int i =0; i<1000000; i++){
   User user = new User("A",15);
   users.add(user);
}
userBox.put(users);

Room

for(int i =0; i<1000000; i++){
   User user = new User("A",15);
   users.add(user);
}
userDatabase.userDAO().insertUsers(users);

Kết quả

Có thể thấy tốc độ của objectbox thực sự rất vượt trồi so với room

0