Docs Menu
Docs Home
/ /
Atlas Device SDK
/ / /

CRUD - 생성 - Flutter SDK

이 페이지의 내용

  • 쓰기 트랜잭션(write transaction)
  • 쓰기 작업
  • 백그라운드 쓰기
  • 객체 생성
  • 하나의 객체 생성
  • 다중 객체 생성

Atlas Device SDK는 매우 효율적인 스토리지 엔진을 사용하여 객체를 지속합니다. 객체를 생성하고, 데이터베이스에서 객체를 업데이트하고, 최종적으로 데이터베이스에서 객체를 삭제할 수 있습니다. 이러한 작업은 데이터베이스의 상태를 수정하기 때문에 쓰기 작업이라고 합니다.

SDK는 트랜잭션 측면에서 쓰기를 처리합니다. 트랜잭션은 SDK가 분할할 수 없는 단일 작업으로 처리하는 읽기 및 쓰기 작업 목록입니다. 즉, 트랜잭션은 전부 아니면 전무입니다. 즉, 트랜잭션의 모든 작업이 성공하거나 트랜잭션의 모든 작업이 적용되지 않습니다.

모든 쓰기는 트랜잭션에서 이루어져야 합니다.

데이터베이스는 한 번에 하나의 오픈 트랜잭션만 허용합니다. SDK는 열려 있는 트랜잭션이 완료될 때까지 다른 스레드에서 다른 쓰기를 차단합니다. 따라서 트랜잭션 내의 데이터베이스에서 값을 읽을 때 경쟁 상태가 없습니다.

트랜잭션을 완료하면 SDK가 트랜잭션을 커밋하거나 취소합니다.

  • SDK는 트랜잭션을 커밋할 때 모든 변경 사항을 디스크에 기록합니다. 동기화된 데이터베이스의 경우 SDK는 Atlas Device Sync와의 동기화를 위해 변경 사항을 대기열에 넣습니다.

  • SDK가 쓰기 트랜잭션(write transaction)을 취소하거나 트랜잭션 작업으로 인해 오류가 발생하면 모든 변경 사항이 삭제됩니다(또는 "롤백").

데이터베이스를 연 후에는 Realm 을 사용하여 데이터베이스 내에 객체를 만들 수 있습니다. 쓰기 (write)() 트랜잭션 차단.

realm.write((){
// ...write data to realm
});

쓰기 트랜잭션(write transaction) 콜백 함수에서 값을 반환할 수도 있습니다.

final yoda = realm.write<Person>(() {
return realm.add(Person(ObjectId(), 'Yoda'));
});

경고

하나의 Realm 파일에 Realm 객체 쓰기

하나의 영역 파일에는 RealmObjects만 쓸 수 있습니다. 이미 한 영역 파일에 RealmObject를 쓴 경우 다른 데이터베이스에 쓰려고 하면 SDK에서 RealmException를 .발생시킵니다

Realm.writeAsync()를사용하여 객체를 비동기적으로 추가, 수정 또는 삭제할 수 있습니다.

Realm.writeAsync()를 사용하여 쓰기 작업을 수행하는 경우 백그라운드에서 쓰기 잠금(write lock)을 확보하기 위해 대기하고 트랜잭션을 커밋합니다. 쓰기 자체만 메인 프로세스에서 발생합니다.

이렇게 하면 메인 프로세스의 실행을 차단하는 데 소요되는 시간을 줄일 수 있습니다. 이 기능은 동기화 클라이언트가 언제, 얼마나 오래 작성할지 알 수 없는 Device Sync를 사용할 때 특히 유용합니다.

// Add Leia to the realm using `writeAsync`
Person leia = Person(ObjectId(), "Leia");
realm.writeAsync(() {
realm.add<Person>(leia);
});

이 페이지의 예시에서는 PersonTeam이라는 두 가지 객체 유형을 사용합니다.

@RealmModel()
class _Person {
@PrimaryKey()
late ObjectId id;
late String name;
late List<String> hobbies;
}
@RealmModel()
class _Team {
@PrimaryKey()
late ObjectId id;
late String name;
late List<_Person> crew;
late RealmValue eventLog;
}

데이터베이스에 객체를 추가하려면 Realm.add()를 사용하여 쓰기 트랜잭션(write transaction) 블록에서 데이터베이스에 Realm 객체 클래스의 인스턴스를 전달합니다.

realm.write(() {
realm.add(Person(ObjectId(), 'Lando'));
});

데이터베이스에 여러 객체를 추가하려면 쓰기 트랜잭션(write transaction) 블록 내의 Realm.addAll()에 여러 객체 목록을 전달합니다.

realm.write(() {
realm.addAll([
Person(ObjectId(), 'Figrin D\'an'),
Person(ObjectId(), 'Greedo'),
Person(ObjectId(), 'Toro')
]);
});

돌아가기

CRUD