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