Nano Hash - криптовалюты, майнинг, программирование

Когда столбец rowversion вычисляется на SQL Server

Когда столбец типа rowversion рассчитывается на SQL Server? Это при фиксации транзакции или до (вместе с операцией модификации строки)? Я спрашиваю, потому что для меня очень важно, может ли совершенная транзакция действительно привести к более низкой версии, чем уже зафиксированная версия.

Это кажется очень простой проблемой, но документация MSDN не содержит такой информации. Я тоже нигде не нашел.

Вот визуализация моего вопроса:

Диаграмма проблем версии Row


  • Функцию min_active_rowversion можно использовать, чтобы не просматривать незафиксированные версии, как описано в этом вопросе: postgres" title="реализация добавочных клиентских обновлений с версиями строк в postgres">stackoverflow.com/questions/28444599/ (и да, это для Sql Server) 12.07.2018

Ответы:


1

Легко увидеть с парой скриптов.

Скрипт 1:

create table T1 (
    ID int not null,
    rv rowversion not null
)
go
begin transaction

insert into T1 (ID) values (1)

WAITFOR DELAY '00:03:00'

commit

Скрипт 2:

begin transaction
insert into T1 (ID) values (2)
commit
select * from T1 with (nolock)

Откройте оба скрипта и подключитесь к одной и той же базе данных. Запустите сценарий 1 и, пока он еще работает, переключитесь на сценарий 2 и запустите его.

Вы получите этот результат (или аналогичный):

ID          rv
----------- ------------------
1           0x00000000000007D1
2           0x00000000000007D2

Как видите, строке с ID 1, которая еще не зафиксирована, присвоено низкое значение rowversion.


По размышлению, конечно, так и должно быть. Транзакции могут охватывать несколько операторов (как показано в первом сценарии), и вы можете повторно запросить таблицу в рамках одной и той же транзакции, в том числе запросить конкретное значение rowversion, которое только что установила ваша собственная транзакция.

13.02.2017
  • Выглядит логично, да. Однако очень раздражает синхронизация, потому что это означает, что вы не можете просто выбрать rowversion › newestPreviousRowversion, чтобы узнать, что изменилось с момента последней проверки. 18.01.2021
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..