오늘도 더 나은 코드를 작성하였습니까?

Realm Transaction 본문

kotlin Multiplatform/realm-kotlin-kmm

Realm Transaction

hik14 2022. 7. 25. 19:42

Open a Realm - Kotlin SDK

Realm open

- Realm을 열려면 RealmConfiguration.Builder를 사용하여 RealmConfiguration을 생성

- RealmConfiguration을 Realm.open()에 전달합니다.

val config = RealmConfiguration.Builder(setOf(Frog::class))
    .build()
val realm = Realm.open(config)
Log.v("Successfully opened realm: ${realm.configuration.name}")

Realm close

realm.close()를 사용하여 Realm을 닫을 수 있습니다. close() 메서드는 모든 write 트랜잭션이 완료될 때까지 차단됩니다.

 

Write Transactions - Kotlin SDK

 

Realm 데이터베이스는 매우 효율적인 스토리지 엔진을 사용하여 객체를 유지합니다.

Realm에서 객체를 만들고, Realm에서 개체를 업데이트하고 결국 Realm에서 객체를 삭제할 수 있습니다

이러한 작업은 Realm의 상태를 수정하므로 write라고 합니다.

 

Realm은 트랜잭션 측면에서 write 처리합니다

트랜잭션은 Realm이 분리할 수 없는 단일 작업으로 취급하는 read 및 write 작업 목록입니다.

 

즉, 트랜잭션은 All 또는 nothing 입니다.

트랜잭션의 모든 작업이 성공하거나 트랜잭션의 모든 작업이 적용되지 않습니다

 

Realm은 한 번에 하나의 open write 트랜잭션만 허용합니다.

Realm은 open 트랜잭션이 완료될 때까지 다른 스레드에서 다른 write를 차단합니다.

결과적으로 트랜잭션 내의 영역에서 값을 읽을 때  race condition이 없습니다.

 

트랜잭션이 끝나면 Realm은 트랜잭션을 commit하거나 cancel합니다.

Realm이 트랜잭션을 commit하면 Realm은 모든 변경 사항을 디스크에 기록합니다.

 synced realms의 경우 SDK는 백엔드와의 동기화를 위해 변경 사항을 대기열에 넣습니다.
Realm이 write 트랜잭션을 취소하거나 트랜잭션의 작업에서 오류가 발생하면 모든 변경 사항이 삭제됩니다(또는 "롤백").

 

Run a Transaction

Realm은 각 트랜잭션을 0개 이상의 read 및 write 작업을 포함하는 콜백 함수로 나타냅니다.

트랜잭션을 실행하려면 트랜잭션 콜백을 정의하고 realm의 write 메서드에 전달합니다.

이 콜백 내에서 realm에서 자유롭게 생성, 읽기, 업데이트 및 삭제할 수 있습니다.

 

Realm이 실행할 때 콜백의 코드에서 예외가 발생하면 Realm은 트랜잭션을 취소합니다.

특별한 예외가 발생하지 않으면, Realm은 콜백 직후 트랜잭션을 커밋합니다.

 

realm.write {
    // create a frog object in the realm
    val frog = this.copyToRealm(Frog().apply {
        name = "Kermit"
        age = 45
        species = "Green"
        owner = "Jim"
    })
    // update the frog
    frog.age = frog.age + 1
    // get all frogs that belong to Jim
    val jimsFrogs = this.query<Frog>("owner == 'Jim'").find()
    // give all of Jim's frogs to Brian
    jimsFrogs.forEach {
        it.owner = "Brian"
    }
}

'kotlin Multiplatform > realm-kotlin-kmm' 카테고리의 다른 글

Realm kotlin Read  (0) 2022.07.26
Realm Kotlin Create  (0) 2022.07.25
Realm kotlin scheme  (0) 2022.07.25
Realm kotlin schem(Data Type)  (0) 2022.07.25
Frozen Architecture - Kotlin SDK  (0) 2022.07.25