Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Atlas로 데이터 스트리밍 - React Native SDK

이 페이지의 내용

  • 클라이언트 애플리케이션에서 단방향으로 데이터 동기화
  • 비대칭 객체 정의
  • App Services App으로 연결 및 인증
  • Realm 열기
  • 비대칭 객체 생성

데이터 수집 을 사용하여 클라이언트 애플리케이션 에서 Flexible Sync 지원 Atlas App Services 앱으로 데이터를 스트림 할 수 있습니다.

날씨 센서가 데이터를 cloud로 전송하는 등 IoT 애플리케이션에서는 데이터를 단방향으로 동기화할 수 있습니다. 데이터 수집은 소매 앱에서 청구서를 생성하거나 애플리케이션 이벤트를 기록하는 등 충돌 해결이 필요하지 않은 다른 유형의 불변 데이터를 작성하는 데에도 유용합니다.

데이터 수집은 과중한 클라이언트 사이드 삽입 전용 워크로드의 성능 향상을 제공하도록 최적화되었습니다.

1

비대칭 객체는 데이터를 단방향으로 동기화합니다. 객체 모델에서 asymmetric 을(를) true (으)로 설정하여 비대칭 객체를 정의합니다.

class WeatherSensor extends Realm.Object {
static schema = {
name: 'WeatherSensor',
// sync WeatherSensor objects one way from your device
// to your Atlas database.
asymmetric: true,
primaryKey: '_id',
properties: {
_id: 'objectId',
deviceId: 'string',
temperatureInFahrenheit: 'int',
barometricPressureInHg: 'float',
windSpeedInMph: 'float',
},
};
}
class WeatherSensor extends Realm.Object<WeatherSensor> {
_id!: Realm.BSON.ObjectId;
deviceId!: string;
temperatureInFahrenheit!: number;
barometricPressureInHg!: number;
windSpeedInMph!: number;
static schema: ObjectSchema = {
name: 'WeatherSensor',
// sync WeatherSensor objects one way from your device
// to your Atlas database.
asymmetric: true,
primaryKey: '_id',
properties: {
_id: 'objectId',
deviceId: 'string',
temperatureInFahrenheit: 'int',
barometricPressureInHg: 'float',
windSpeedInMph: 'float',
},
};
}

비대칭 객체를 정의하는 방법에 대한 자세한 내용은 비대칭 객체 정의를 참조하세요 .

2

클라이언트에서 백엔드 앱으로 데이터를 스트리밍하려면 App Services 백엔드에 연결 하고 사용자를 인증해야 합니다.

function LogIn() {
const app = useApp();
useEffect(() => {
app.logIn(Realm.Credentials.anonymous());
}, []);
return <></>;
}

데이터 수집은 Flexible Sync의 기능이므로 연결하는 앱은 Flexible Sync를 사용해야 합니다.

3

인증된 사용자가 있으면 Flexible Sync 구성 객체를 사용하여 동기화된 영역을 열 수 있습니다.

// Create a configuration object
const realmConfig = {schema: [WeatherSensor]};
// Create a realm context
const {RealmProvider, useRealm, useObject, useQuery} =
createRealmContext(realmConfig);
// Expose a sync realm
function AppWrapperSync() {
return (
<AppProvider id={APP_ID}>
<UserProvider fallback={LogIn}>
<RealmProvider sync={{flexible: true}}>
<App />
</RealmProvider>
</UserProvider>
</AppProvider>
);
}
// Create a configuration object
const realmConfig: Realm.Configuration = {
schema: [WeatherSensor],
};
// Create a realm context
const {RealmProvider, useRealm} = createRealmContext(realmConfig);
// Expose a sync realm
function AppWrapperSync() {
return (
<AppProvider id={APP_ID}>
<UserProvider fallback={LogIn}>
<RealmProvider sync={{flexible: true}}>
<App />
</RealmProvider>
</UserProvider>
</AppProvider>
);
}

BI-directional Sync와 달리 데이터 수집은 Flexible Sync 구독을 사용하지 않습니다.

비대칭 객체를 쿼리하거나 로컬 Realm에 쓸 수 없으므로 비대칭 객체는 양방향 Flexible Sync, 파티션 기반 동기화 또는 로컬 Realm 사용과 호환되지 않습니다.

4

Realm이 열려 있으면 쓰기 트랜잭션(write transaction) 내에서 Realm.create() 를 사용하여 비대칭 객체를 만들 수 있습니다. 비대칭 객체를 만들 때 Realm.create() 는 객체 자체가 아닌 undefined 를 반환합니다.

const App = () => {
// Getting access to our opened realm instance
const realm = useRealm();
const handleAddSensor = () => {
realm.write(() => {
realm.create('WeatherSensor', {
_id: weatherSensorPrimaryKey,
deviceId: 'WX1278UIT',
temperatureInFahrenheit: 66.7,
barometricPressureInHg: 29.65,
windSpeedInMph: 2,
});
});
};
return (
<Button
title='Add A New Sensor'
onPress={() => handleAddSensor()}
/>
);
};

이러한 객체는 읽을 수 없습니다. 생성되면 App Services 백엔드 및 연결된 Atlas 데이터베이스와 동기화됩니다.

Atlas Device Sync는 이 데이터의 수명 주기를 완벽하게 관리합니다. 데이터 수집 동기화가 완료될 때까지 유지된 후 기기에서 제거됩니다.

돌아가기

클라이언트 로그 수준 설정