2016-07-15 3 views
2

저는 Realm (Visual Studio 2015에서 Android 개발 용 Xamarin 버전 사용)을 처음 사용하고 있으며 트랜잭션 처리를위한 모범 사례를 알고 싶습니다.영역 : MVCC 및 장기 실행 트랜잭션

Realm은 트랜잭션에서 RealmObject의 필드에 대한 모든 쓰기 작업을 수행해야하므로 최종 사용자가 사용자 인터페이스를 통해 편집 할 수 있도록 이러한 객체에 데이터 바인딩을 결정하면 해당 트랜잭션에 대해 열린 트랜잭션을 유지해야합니다. 사용자가 저장을 누르십시오. 몇 초 후에 또는 오랜 시간 후에 발생할 수 있습니다.

렐름은 MVCC를 사용하여 동시성을 관리하므로 읽기가 차단되지 않고 다른 쓰기를 차단하기 때문에 (저의 이해입니다) 나쁜 생각은 있지만 (SQL에 익숙하다면 장기 실행 트랜잭션을 유지해야합니다. 서버)는 읽기가 차단되지 않으면 Realm에서 그렇게 나쁠 것 같지 않습니다. 그러나 그것은 여전히 ​​나에게 잘못되었다고 느낀다.

관련 질문 :

1) 데이터 바인딩 RealmObjects에 작업을 수행하는 권장되는 방법은 무엇입니까?

2) 예측할 수없는 시간 동안 버그가 남거나 성능이 저하 될 수있는 UI 컨텍스트에서 트랜잭션을 열어 두었습니까?

미리 감사드립니다. (이것은 내 첫 번째 질문이기도합니다 - 가이드 라인을 벗어나지 않았 으면합니다.). 이에 의지하지 않도록

답변

1

그래,이 우리 마음 (https://github.com/realm/realm-dotnet/issues/647)의 개선이

:-) 너무 우리에게 잘못 느낀다. 다른 질문에 대해서는

: 그 당신을 도움이된다면 this blog post 세부의 비트가됩니다

1), 나도 몰라. 더 구체적인 질문이 있으시면 언제든지 물어보십시오.

2) 긴 수명 트랜잭션은 이유와 SQL 데이터베이스에서의 반 패턴입니다. 업데이트 된 상태는 트랜잭션이 커밋 될 때까지 유지되지 않으므로 트랜잭션이 많은 변경을 나타내며 앱이 충돌하는 경우 사용자가 작업을 잃을 수 있습니다. 또한 읽기를 시도하는 다른 스레드는 이전 버전에 액세스하고 쓰기를 시도하면 트랜잭션이 커밋 될 때까지 차단됩니다.

+1

감사합니다. 나는 그 블로그 포스트를 보았고, (잠재적으로) 오랜 시간 동안 거래가 개최 된 것을 보았습니다. 이제 이것을 해결하기 위해 RealmObject를로드하고 속성을 원하는대로 쓸 수있는 무 차원 인스턴스에 해당 값을 복사 한 다음 나중에 쓰기 트랜잭션 내에서 Realm.Manage()를 통해 다시 첨부 할 생각입니다. Realm.Unmanage() 메소드를 사용하면 편리합니다. 객체를로드하고 Realm에 단독으로 두도록 요청하여 속성 쓰기가 실패하지 않도록 한 다음 나중에 Realm에 쓰기 트랜잭션에서 다시 값을 관리하도록 요청합니다. 지속될 것입니다. –