В Google Spanner, возможно ли, что точно такая же временная метка фиксации может появиться снова после уже наблюдаемого

В Google Spanner временные метки фиксации генерируются сервером на основе TrueTime, как описано в https://cloud.google.com/spanner/docs/commit-timestamp. На этой странице также указано, что временные метки не гарантированно уникальны, поэтому несколько независимых авторов могут генерировать одинаковые временные метки.

В документации о гарантиях согласованности указано, что In addition if one transaction completes before another transaction starts to commit, the system guarantees that clients can never see a state that includes the effect of the second transaction but not the first.

Я пытаюсь понять комбинацию

  1. Множественные параллельные транзакции, фиксирующиеся «одновременно», приводящие к одной и той же временной метке фиксации (где временная метка фиксации является частью ключа для таблицы)
  2. Читатель наблюдает за вводом новых строк в таблицу выше

В этих обстоятельствах возможно ли, что читатель может наблюдать некоторые, но не все строки, которые (в конечном итоге) будут сохранены с одной и той же меткой времени? Или, иначе говоря, если поиск всех строк до известной точной метки времени и строки вставляются с этой меткой времени, возможно ли, что запрос сначала возвращает некоторые результаты, но при повторном выполнении возвращает больше?

Контекст этого - попытка смоделировать поток событий, упорядоченных по времени, способом только добавления - мне нужно иметь возможность удерживать то, что фактически является курсором, в определенный момент времени (точка в потоке событий) и мне нужно знать, означает ли наличие событий в момент T, что вы больше никогда не сможете получить больше событий точно в момент T.


person SoftMemes    schedule 06.12.2018    source источник


Ответы (1)


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

Наряду со всеми внешне согласованными БД, для читателя вне транзакции невозможно прочитать «состояние ожидания» другой транзакции. Таким образом, читатель во время T сможет видеть только транзакции, которые были совершены до времени T.

Множественные одновременные транзакции вставки / обновления во время фиксации T (которые повлияли бы на разные строки, иначе они не могли бы быть одновременными) не будут видны читателю во время T, но обе будут видны читателю в T + 1

Мне ... нужно знать, означает ли то, что наблюдаемые события в момент времени T, вы больше никогда не сможете получить больше событий точно в момент T.

Да-аш. Немного перефразируя, поскольку здесь есть нюансы:
Прочитав события до времени T включительно, вы никогда не получите больше событий, происходящих со временем, равным или раньше времени T

Но помните, что столбец временной метки фиксации - это простой столбец TIMESTAMP, в котором может быть сохранено любое значение - это приложение, которое запрашивает, чтобы сохраненное значение было меткой времени фиксации, и на уровне БД ничего нет. чтобы приложение не сохраняло любое значение, которое ему нравится ...

Как всегда со Spanner, именно приложение должно обеспечивать / поддерживать целостность данных.

person RedPandaCurios    schedule 06.12.2018