Realm Blog

Realm Java 1.1.0 — 새롭고 빠른 삽입 API!

우리는 Realm Java의 새 버전을 웹사이트와 Bintray에 출시하였습니다. 이 버전은 여러 버그 수정과 새로운 삽입 API를 포함합니다.

삽입 API

Realm의 저장소 엔진은 데이터 삽입에서 SQLite에 비해 항상 빠르지만 몇몇 Realm Java API의 설계 결정 때문에 이점을 상실했습니다. 소량의 자료(<1000)를 삽입할 때는 일반적으로 SQLite 만큼 빠르지만 일괄적으로 더 이상의 항목을 추가하면 느려지기 시작합니다.

v1.1.0에서 몇가지 최적화를 하였고 아래 4개의 새로운 메서드를 제공합니다.

  • void Realm.insert(RealmModel obj)
  • void Realm.insert(Collection collection)
  • void Realm.insertOrUpdate(RealmModel obj)
  • void Realm.insertOrUpdate(Collection collection)
Realm realm = Realm.getDefaultInstance();
realm.beginTransaction();
realm.insertOrUpdate(restApi.getPersons());
realm.commitTransaction();

이 메서드들이 어떠한 객체도 반환하지 않는다는 점에서 일반적인 Realm.copyToRealm()와 크게 다릅니다. 이를 통해 메모리 할당을 거의하지 않고 순수히 비용이었던 많은 확인을 제거합니다.

이렇게 해서 10만여개의 객체를 다룰 때 최적화된 SQLite 구현에 비해 40%가 늦었던 성능을 70% 가량 빠르게 개선하였습니다.

Realm Batch Insert Benchmark

이런 규모를 직접 검증할 수 있게 벤치마크 저장소를 출시합니다. 여기에서 확인해보세요. 위에 측정된 수치는 출시된 안드로이드 6.0.1을 이용하여 Nexus 6P에서 측정하였습니다.

Realm의 자동 갱신 측정 때문에 데이타가 저장되기 전에 질의를 할 수 있고 데이터가 준비되었을 때 통보받을 수 있습니다. 이는 데이터 저장과 데이터 출력을 분리하고자 할 때 큰 이점이 있습니다.

final PersonApi api = new PersonApi();
Realm realm = Realm.getDefaultInstance();
RealmResults<Person> persons = realm.where(Person.class).findAllAsync();
person.addChangeListner(new RealmChangeListener() {
    @Override
    public void onChange(RealmResults<Person> persons) {
      if (!persons.isEmpty()) {
	    // Callback when data is available
      }
  }
});

realm.executeTransactionAsync(new Realm.Transaction() {
    @Override
    public void execute(Realm realm) {
      realm.insertOrUpdate(api.getPersons());
    }
});

버그 수정

  • 비동기 트랜잭션과 비동기 질의가 UI 스레드에서 결합할 때 UI 스레드에서 데이터가 준비되기 전에 트랜잭션의 onSuccess 콜백이 호출될 수 있습니다.

  • 1.0.1에서 소개된 RealmOptionalAPITransformer가 DexGuard와 제대로 동작하지 않아서 이제 비활성화되었습니다.

전체 변경 사항에서 상세 내용을 확인하세요.


읽어주셔서 감사합니다. Realm과 함께 위대한 앱을 만들어 나가 봅시다! 우리는 항상 Stack Overflow, GitHub, Twitter에 있습니다.


Realm Team

Realm의 미션은 더 나은 앱을 빠르게 개발할 수 있도록 돕는 것입니다. 이를 위해 저희는 개발자들이 실시간 협업, 가상 현실, 라이브 데이터 동기화, 오프라인 경험, 메시징 등 정교하고 강력한 기능을 쉽게 개발할 수 있도록 하는 개발 도구와 플랫폼을 제공하고 있습니다.

저희는 모바일 인터넷이 수많은 사용자와 보다 많은 디바이스가 속한 개방형 네트워크와 이들 간의 실시간 상호 작용으로 진화할 것이라고 믿으며, 개발자가 이같은 방향으로 발전할 수 있도록 돕기 위해 저희 제품들을 개발하고 있습니다.

이런 개발 뉴스를 더 만나보세요