Учитывая, что SQL Azure Federations не поддерживает свойство IDENTITY или SEQUENCE, что было бы эффективным способом генерации последовательных чисел при вставке записей?Эффективный способ генерации последовательных чисел в SQL Azure Federations
Например, дана таблица этих колонок:
CREATE TABLE [dbo].[Orders] (
[TenantId] [uniqueidentifier] NOT NULL,
[OrderId] [uniqueidentifier] NOT NULL,
[OrderNumber] [int] NOT NULL
CONSTRAINT [PK_Orders] PRIMARY KEY CLUSTERED (
[TenantId] ASC,
[OrderId] ASC
)
) FEDERATED ON ([FederationKey] = [TenantId])
для каждого заказа, вставленный для данного арендатора, OrderId должен быть увеличен. Например, для палатки A OrderId будет 1, 2, 3 ... и для арендатора B OrderId также будет 1, 2, 3 ... в независимой последовательности. В идеале не должно быть пробелов.
TenantId и OrderId являются компонентами первичного ключа. Их значения задаются приложением, и они не связаны с проблемой генерации последовательностей; только OrderId имеет порядковый номер с бизнес-значением. Кроме того, TenantId является ключом распределения федерации.
This MSDN Blog article описывает в варианте 1 подход к тому, чтобы таблица содержала последовательности и использовала хранимую процедуру в отдельной транзакции для увеличения последовательностей. У каждого арендатора была бы запись на этой таблице, содержащая последнее использованное значение последовательности.
Будет ли это оптимальным подходом к рассмотрению возможности масштабирования, конкуренции, блокировки ресурсов? Любые другие полезные трюки, учитывая ограничения SQL Azure Federations?
Великий ответ, в дополнение к опции я цитировал в моем вопросе (используя хранимую процедуру для обновления записи с использованием отдельного подключения), ваш первый вариант обеспечивает большую масштабируемость и пропускную способность за счет некоторой сложности; вторая альтернатива довольно проста и может быть достаточно, когда процесс упорядочен (например, с использованием очереди сообщений) или когда скорость создания нового заказа для каждого арендатора не слишком высока. –