2016-02-14 3 views
1

Я прочитал, что двухфазное коммитирование страдает от проблемы блокировки.Как избежать блокировки при двухфазном фиксации в гаечном ключе?

Но в Google Spanner Paper они написали, что Google использует двухфазную фиксацию в Spanner.

Мой вопрос в том, что: Как эта проблема блокировки решена в Spanner?

ответ

2

«Некоторые авторы заявили, что общая двухфазная фиксация слишком дорого для поддержки из-за проблем с производительностью или доступностью, которые она приносит [9, 10, 19]. Мы считаем, что лучше иметь применение программ-программистов с проблемами производительности из-за чрезмерного использования транзакций, поскольку возникают узкие места, а не всегда кодирование вокруг отсутствия транзакций. Выполнение двухфазного фиксации над Paxos смягчает проблемы с доступностью ».

Если один узел вниз, Paxos может обрабатывать операции чтения или записи с других живых узлов.

1

Ключ теперь доступен на Google Cloud Platform. Вот несколько дополнительных документов о 2PC и блокировке.

https://cloud.google.com/spanner/docs/transactions

==

Cloud вращатель позволяет нескольким клиентам одновременно взаимодействовать с одной базой данных. Чтобы обеспечить согласованность нескольких параллельных транзакций, Cloud Spanner использует комбинацию общих блокировок и эксклюзивных блокировок для управления доступом к данным. Когда вы выполняете чтение как часть транзакции, Cloud Spanner получает общие блокировки чтения, что позволяет другим чтениям продолжать доступ к данным, пока ваша транзакция не будет готова к фиксации. Когда транзакция совершается и применяются записи, транзакция пытается перейти на эксклюзивную блокировку. Он блокирует новые общие блокировки чтения для данных, ждет, пока существующие общие блокировки чтения будут очищены, а затем помещает исключительную блокировку для эксклюзивного доступа к данным.

Заметки о замках:

Замки принимаются на зернистостью строки-и-колонки. Если транзакция T1 заблокировала столбец «A» строки «foo», а транзакция T2 хочет записать столбец «B» строки «foo», тогда конфликта нет. Записывает элемент данных, который также не читает записанные данные (иначе говоря, «слепые записи») не конфликтует с другими слепыми писателями того же элемента (метка фиксации каждой записи определяет порядок ее применения к базе данных). Следствием этого является то, что Cloud Spanner необходимо обновить до эксклюзивной блокировки, если вы прочитали данные, которые вы пишете. В противном случае Cloud Spanner использует общую блокировку, называемую общей блокировкой записи.