Azure SQL 服务器弹性池 - 自动将数据库添加到池中

Azure SQL Server Elastic Pool - automatically add database to pool

目前我们有一个 Azure SQL 服务器,每次我们创建新的 Web 应用程序时,我们都会使用 EF Core Code First 来生成数据库。但是,在创建数据库后,我们手动转到 Azure 门户并将新创建的数据库添加到 Azure SQL 服务器内的弹性池中。是否有可能以某种方式使该过程自动化,以便通过门户或使用 EF 或其他方式生成的每个新创建的数据库都将自动添加到池中?

您可以使用 Transact-SQL 以编程方式将现有的 Azure SQL 数据库移动到弹性池中。

ALTER DATABASE db1   
MODIFY ( SERVICE_OBJECTIVE = ELASTIC_POOL ( name = pool1 ) ) ;  

您必须使用弹性数据库客户端库来管理数据库的创建,以便 ShardMapManager 可以注册数据库。请注意,我说的是数据库(或弹性数据库术语中的分片)而不是租户(或弹性数据库术语中的 Shardlet)。

整个Elastic DB components如下SQL服务器,分片是通过弹性数据库SDK添加的,涉及以下组件(其中一些仅在Azure中可用): • Elastic Database Client Library 管理数据分布并将租户映射到数据库。 • Elastic Database Pools(仅限 Azure) 分配可在多个数据库之间共享的资源池。允许数据库以自己的速率使用资源,而不是每个数据库都有特定数量的可用资源。

• 弹性数据库查询 在多租户数据库中查询所有租户的能力。

• 弹性数据库作业 将数据库维护操作或数据库架构更改打包并可靠地部署到多个数据库。

• 弹性交易 以原子和隔离的方式处理对多个数据库的更改。

• 弹性数据库拆分合并工具 允许在参与分片框架的数据库之间移动分片

使用这个库的重要概念是一个碎片可以有一个或映射来保存 Shardlet(或来自 ShardMapManager 的映射)。实际上ShardMapManager维护着两个集合:Shards(getShards)和Mapping(GetMappings)。映射是 ShardKeys 映射到碎片...

您可以有两种类型的分片键定义:RangeMapShard 和 ListMapShard - 两者都继承了 ShardMap(其中包含一个 属性 ShardMapType 来定义实例化 ShardMap 的子类型)。

RangeMapShard - 为一个映射保留一系列键。例如客户 100-200(200 的值比范围内允许的值高一个(在我看来定义它的糟糕方式......但这是 MS 文档)所以他们的意思是 100-199,200-299 被定义使用 100-200 和 200-300 的范围。

ListMapShard - 为每个 Shardlet 保留一个 Shard Key。所以 1 个 ShardKey 的值等于 1 个 ShardMap(一个 Shard 可以容纳一个或多个 Shardlet - 所以一个 Shard 可以容纳映射...)...

所以你必须将你的分片键映射到一个分片映射,然后将分片映射关联到一个分片,而分片必须与数据库关联....记住,你可以创建没有在其中定义分片(或架构)的数据库。

我发现我想反过来考虑这个问题,从数据库开始,然后将数据粘贴到该数据库中。 IMO,Elastic DB SDK 以另一种方式工作,您定义 Shardlet(租户),将其映射到分片(模式),然后将分片(模式)粘贴到数据库中。

HTH.