2016-11-11 6 views
0

В Realm, если сделка A и B оба работают как:Realm MVCC поведение

Возьмите первый пункт как "First" => У некоторых Long Running Операция => Удалить "Первый"

Will:

  • Сделка A и B всегда получает одинаковое значение для «Первого»?
  • транзакции Блок Транзакция B, если он работает «First"?

Я надеюсь, что блоки А полноту В, потому что он „пишет“, затем бежит B и получает другое значение для „First“, но похоже, что блокировка более мелкозернистая, чем B, и B не будет заблокирован до тех пор, пока не будет получена инструкция delete.

Означает ли это, что они просто будут работать со своими отдельными копиями БД, одно и то же значение для «Первого» и выполняться вдоль друг друга, затем B будет бросать, потому что он пытается удалить «Первый» после того, как A уже удалил его?

ответ

0

Транзакции блокируют друг друга. Два экземпляра Realm не могут одновременно находиться в режиме «записи» одновременно. Если транзакция продолжается, то экземпляр Realm другого потока блокируется и вынужден дождаться завершения другой транзакции. Вот почему слияния потоков пользовательского интерфейса Realm не поощряются.

В режиме записи Realm постоянно видит «новейшие данные в реальном времени», что означало, что даже когда вы изменили базу данных, RealmResults под ней обновлялось в реальном времени. (Тот факт, что этого не происходит, является своего рода «взломом» в привязке Java.)

Сделка Блок Транзакция B, если она работает Сначала?

Это побед.

Смежные вопросы