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

В 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.

1 Ответ

0 голосов
/ 06 декабря 2018

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

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

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

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

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

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

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

...