여러 프로세스의 데이터 동기화
Atlas Device Sync를 통해 단일 영역으로 여러 프로세스의 데이터를 동기화할 수 있습니다.
여러 프로세스에서 동기화된 영역을 열려고 하는 시나리오의 예는 다음과 같습니다.
각 창이 동일한 동기화된 영역에 기록하는 다중 창 데스크톱 애플리케이션입니다.
여러 프로세스에서 동기화된 영역에 쓰는 서버 애플리케이션입니다.
여러 프로세스에서 동기화된 Realm 열기
여러 프로세스에서 동기화된 단일 영역을 열려면 다음을 수행합니다.
표준 flexible sync 구성을 사용하여 Realm을 여는 단일 메인 프로세스 를 만듭니다. 메인 프로세스는 동기화를 처리합니다.
연결이 끊긴 동기화 구성을 사용하여 동일한 영역을 여는 하나 이상의 세컨더리 프로세스 를 만듭니다. 연결이 끊긴 동기화 구성을 사용하면 세컨더리 프로세스는 동기화를 처리하지 않고 영역에 데이터를 읽고 씁니다. 메인 프로세스는 세컨더리 프로세스에 대한 모든 데이터의 동기화를 처리합니다.
메인 프로세스 에서 동기화된 영역 을 열려면 Configuration.flexibleSync() 생성자. 자세한 내용 은 동기화된 Realm 열기를 참조하세요.
// Same realm file location as secondary process final realmPath = path.join(Configuration.defaultStoragePath, 'synced.realm'); final flexibleConfig = Configuration.flexibleSync(currentUser, schema, path: realmPath); final realmWithSync = Realm(flexibleConfig);
세컨더리 프로세스에서 동기화된 영역을 열려면 Configuration
Configuration.disconnectedSync() 메서드를 사용하여 를 만듭니다. 생성자. 스키마와 추가 선택적 명명 인수를 포함합니다.
// Same realm file location as primary process final sameRealmPath = path.join(Configuration.defaultStoragePath, 'synced.realm'); final disconnectedSyncConfig = Configuration.disconnectedSync(schema, path: sameRealmPath); final realmWithDisconnectedSync = Realm(disconnectedSyncConfig);
프로세스 간 데이터 새로 고침
여러 프로세스 간에 동일한 Realm 파일을 공유하는 경우, Realm에는 자동 새로 고침 기능이 내장되어 있습니다. 한 프로세스에서 기록된 데이터는 다른 프로세스에서 볼 수 있습니다. 일반적으로 프로세스 간에 데이터를 새로 고치기 위해 추가 로직을 작성할 필요가 없습니다.
그러나 경우에 따라 새로 고침이 즉시 수행되지 않을 수 있습니다. 이 경우 trigger Realm.refresh() 메서드 를 사용하여 프로세스에서 수동 새로 고침을 할 수 있습니다.또는 Realm.refreshAsync().
다른 프로세스의 변경 사항에 대한 업데이트 알림을 동시에 강제하려면 Realm.refresh()
을(를) 호출합니다.
// Add object in one process realm.write(() { realm.add(Person('John')); });
// Call realm.refresh() in the secondary process // to trigger the data written in the main process // to register in the secondary process. realm.refresh(); final john = realm.find<Person>('John');
또는 Realm.refreshAsync()
를 사용하여 다른 프로세스의 변경 사항에 대한 업데이트 알림을 비동기적으로 강제할 수 있습니다.
// Asynchronously refresh the realm in the background. await realm.refreshAsync(); final john = realm.find<Person>('John');