Учитывая, что SQL Azure Federations не поддерживает свойство IDENTITY или SEQUENCE, каким может быть эффективный способ генерировать последовательные числа при вставке записей?
Например, для таблицы со следующими столбцами:
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 должно увеличиваться. Например, для тенанта OrderId будет равен 1, 2, 3... и для арендатора B OrderId также будет 1, 2, 3... в независимой последовательности. В идеале не должно быть зазоров.
TenantId и OrderId являются компонентами первичного ключа. Их значения устанавливаются приложением и не связаны с проблемой генерации последовательностей; только OrderId имеет порядковый номер, имеющий значение для бизнеса. Кроме того, TenantId — это ключ распространения федерации.
В этой статье блога MSDNв варианте 1 описывается подход, заключающийся в наличии таблицы, содержащей последовательности, и использовании хранимой процедуры в отдельной транзакции для увеличения последовательностей. У каждого арендатора будет запись в этой таблице, содержащая последнее использованное значение последовательности.
Будет ли это оптимальным подходом с учетом масштабируемости, конкуренции и блокировки ресурсов? Любые другие полезные приемы, учитывая ограничения SQL Azure Federations?