2015-01-15 1 views
2

Я понимаю транзакцию только для чтения Spanner в одной группе paxos.Операция только для чтения с помощью гаечного ключа

Но как работает транзакция только для чтения более чем одной группы paxos? В документе говорится, что он использует TT.now().latest как временную метку, которая затем выполняет моментальный снимок, считанный с заданной меткой времени. Но почему это работает?

В каждой реплике есть безопасное время. Безопасное время - это отметка времени последней транзакции записи в реплике. Реплика актуальна, если asked timestamp <= safe time.

В документе также говорится, что для моментального снимка, считываемого с данной отметкой времени (вторая фаза транзакции только для чтения), может потребоваться дождаться обновления реплик. Что произойдет, если после транзакции чтения никогда не произойдет какой-либо транзакции записи? Тогда безопасное время никогда не будет обновлено, и транзакция чтения будет заблокирована навсегда?

ответ

1

AFAICT, дело в том, что если процесс видит TT.now(), последний прошел, все остальные процессы никогда не получат эту метку времени, поэтому любая будущая транзакция записи будет иметь время фиксации (безопасное время) больше, чем это , Таким образом, процесс выполнения моментального снимка должен только ждать, пока эта метка времени не пройдет.

1

С помощью гаечного ключа теперь доступна услуга на Google Cloud Platform.

Вот документы о том, как работает операция чтения только:

https://cloud.google.com/spanner/docs/transactions#read-only_transactions

==

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

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