Эффективный способ генерации последовательных чисел в федерациях SQL Azure

Учитывая, что 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?

6
задан Fernando Correia 10 March 2012 в 00:50
поделиться