Я понимаю транзакцию только для чтения Spanner в одной группе paxos.Операция только для чтения с помощью гаечного ключа
Но как работает транзакция только для чтения более чем одной группы paxos? В документе говорится, что он использует TT.now().latest
как временную метку, которая затем выполняет моментальный снимок, считанный с заданной меткой времени. Но почему это работает?
В каждой реплике есть безопасное время. Безопасное время - это отметка времени последней транзакции записи в реплике. Реплика актуальна, если asked timestamp <= safe time
.
В документе также говорится, что для моментального снимка, считываемого с данной отметкой времени (вторая фаза транзакции только для чтения), может потребоваться дождаться обновления реплик. Что произойдет, если после транзакции чтения никогда не произойдет какой-либо транзакции записи? Тогда безопасное время никогда не будет обновлено, и транзакция чтения будет заблокирована навсегда?