【问题标题】:Multitenant System with Sequences (on Azure)具有序列的多租户系统(在 Azure 上)
【发布时间】:2013-09-06 05:13:29
【问题描述】:

我正在尝试使用最优雅的解决方案或使用最轻量的库来尝试为特定记录生成序列。这将是一个使用 SQL Azure 在 Azure 中托管的多租户系统。所有租户将共享同一个数据库。它是一个 ASP MVC4 应用程序。

租户 A 和租户 B 都添加了两种不同的费用。 每条记录都将获得系统将使用的唯一 ID(可能是 INT 或 GUID),但是,每条记录都需要一个租户人类可读 ID,该 ID 也是一个整数,每个租户都会递增。为什么?对于每个租户来说,拥有自己可以关联的递增数字会很好。想想发票号码吧。

例如,
租户 A 增加了一笔费用。 PKEY = 1 / 序列 = 1
租户 B 增加了一项费用。 PKEY = 2 / 序列 = 1
租户 A 增加了一笔费用。 PKEY = 3 / 序列 = 2

一种解决方案是保留一个包含序列类型、租户 ID 和下一个值的表,并在我插入费用之前对其进行查询并增加它(使用相同的示例)。从长远来看,这似乎让我自己面临一些糟糕的数据库性能。

在这种情况下是否有另一种技术或库可以提供帮助?

【问题讨论】:

    标签: sql asp.net-mvc database azure azure-sql-database


    【解决方案1】:

    我有一个在 Azure/SQL Azure 上运行的多租户应用程序。我基本上按你说的做。例如,我有一个类似

    的架构
    Business Table
    BusinessId - autoinc
    Name
    
    Client Table
    ClientId - autoinc
    BusinessId
    Name
    

    然后在 SQL for 和 CRUD 操作的 WHERE 子句中使用业务 ID,以确保仅返回正确的数据。我创建了一些辅助方法来简化此操作。如果您正确索引,我不认为应该有太多的性能问题,我从未遇到过任何问题。我的许多应用设置也缓存在内存中以减轻数据库负载。

    【讨论】:

      【解决方案2】:

      我采取了稍微不同的方法。 您可以将其包装到存储过程中...

      它使用序列,但在创建新租户时会动态创建它们。

      declare @Value int = null
      Declare @Company_code varchar(10) = '00' -- Some value to indicate the tenant
      Declare @SeqSchema varchar(20) = 'dbo'
      Declare @SeqName varchar(50) = 'TestSequence_' + @Company_code
      Declare @SeqFullName varchar(200) = quotename(@SeqSchema) + '.' + quotename(@SeqName)
      Declare @Sql nvarchar(500)
      
      if not exists (select object_id from sys.objects where object_id = OBJECT_ID(@SeqFullName) and type = 'SO')
      Begin
      	set @Sql = '
      		CREATE SEQUENCE ' + @SeqSchema + '.' + @SeqName + @Company_code + ' as int
      			START WITH 1
      			INCREMENT BY 1
      			MINVALUE 1
      			MAXVALUE 999999
      			NO CYCLE'
      
      		exec sp_executesql @Sql
      End
      
      set @Sql = N'Set @Value = NEXT VALUE FOR ' + @SeqFullName
      exec sp_executesql @Sql, N'@Value int output', @Value output;
      print @Value

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-03
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 2018-12-29
        • 2017-05-09
        相关资源
        最近更新 更多