Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

Atlas로 데이터 스트리밍 - Swift SDK

이 페이지의 내용

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

버전 10.29.0의 새로운 기능

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

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

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

1

해당 객체 가 AsymmetricObject 인 경우 데이터를 단방향으로 동기화 할 수 있습니다. AsymmetricObject에서 파생하여 AsymmetricObject를 정의합니다 .

class WeatherSensor: AsymmetricObject {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var deviceId: String
@Persisted var temperatureInFahrenheit: Float
@Persisted var barometricPressureInHg: Float
@Persisted var windSpeedInMph: Int
}

AsymmetricObject 를 정의하는 방법에 대한 자세한 내용 은 AsymmetricObject 정의를 참조하세요.

2

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

let app = App(id: INSERT_APP_ID_HERE)
do {
let user = try await login()
await openSyncedRealm(user: user)
} catch {
print("Error logging in: \(error.localizedDescription)")
}
func login() async throws -> User {
let user = try await app.login(credentials: .anonymous)
return user
}

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

3

인증된 사용자가 있으면 flexibleSyncConfiguration() 을 사용하여 동기화된 영역을 열 수 있습니다. 동기화하려는 AsymmetricObject 유형을 지정합니다.

@MainActor
func openSyncedRealm(user: User) async {
do {
var asymmetricConfig = user.flexibleSyncConfiguration()
asymmetricConfig.objectTypes = [WeatherSensor.self]
let asymmetricRealm = try await Realm(configuration: asymmetricConfig)
await useRealm(asymmetricRealm, user)
} catch {
print("Error opening realm: \(error.localizedDescription)")
}
}

양방향 동기화와 달리 데이터 수집은 Flexible Sync 구독을 사용하지 않습니다.

참고

프로젝트의 동기화된 Realm과 동기화되지 않은 Realm의 혼합

AsymmetricObject 유형은 동기화되지 않은 Realm과 호환되지 않습니다. 프로젝트에서 동기화된 Realm과 동기화되지 않은 Realm을 모두 사용하는 경우 Realm 구성에서 클래스의 하위 집합을 명시적으로 전달하여 동기화되지 않은 Realm에서 AsymmetricObject 을(를) 제외해야 합니다.

자동 스키마 검색은 구성에서 AsymmetricObject 를 구체적으로 제외하지 않고 동기화되지 않은 Realm을 열면 호환되지 않는 Realm 객체 유형을 사용하려고 하는 것과 관련된 오류가 발생할 수 있음을 의미합니다.

4

Realm 이 열려 있으면 create(_ type:, value:)를 사용하여 쓰기 트랜잭션 (write transaction) (write transaction) 내에 AsymmetricObject 를 만들 수 있습니다.

@MainActor
func useRealm(_ asymmetricRealm: Realm, _ user: User) async {
try! asymmetricRealm.write {
asymmetricRealm.create(WeatherSensor.self,
value: [ "_id": ObjectId.generate(),
"deviceId": "WX1278UIT",
"temperatureInFahrenheit": 66.7,
"barometricPressureInHg": 29.65,
"windSpeedInMph": 2
])
}
}

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

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

돌아가기

Realm 이벤트 기록