Как последовательность базы данных управляет состоянием гонки? - PullRequest
0 голосов
/ 16 сентября 2018

Я пишу приложение, которое будет развернуто на n узлах.Классы сущностей приложений использовали стратегию генерации SEQUENCE для генерации первичных ключей.Так как были бы массовые вставки;мы также дадим размер распределения.

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

  1. Не было бы какого-либо состояния гонки?
  2. Или эта последовательность также имеет некоторый легкий механизм блокировки для последовательного обслуживания запросов, как это происходит в стратегии IDENTITY?
  3. Или последовательность не является правильным решением этой проблемы?

Пожалуйста, помогите.Спасибо!

1 Ответ

0 голосов
/ 16 сентября 2018

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

  • Текущее значение из таблицы SEQUENCE читается
  • Это значение присваивается в качестве идентификатора новой записи
  • Значение из SEQUENCE увеличивается

Чтобы ответить на ваши вопросы

  1. Проблемы параллелизма решаются базой данных.
  2. Поскольку в транзакции выполняются вставки (как простые, так и массовые), согласованность при генерации идентификатора обеспечивается механизмом базы данных посредством транзакций (точнее, уровнем изоляции транзакции). Убедитесь, что ваша база данных поддерживает транзакции.
  3. Последовательность - правильное решение, при условии, что ядро ​​вашей базы данных поддерживает транзакции.
...