目前我们有一个Azure SQL Server,每次创建新的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)。
SQL 服务器的整个弹性数据库组件如下,分片是通过弹性数据库 SDK 添加的,其中涉及以下组件(其中一些仅在 Azure 中可用): • 弹性数据库客户端库 管理数据分布并将租户映射到数据库。 • 弹性数据库池(仅限 Azure) 分配可在多个数据库之间共享的资源池。 允许数据库以自己的速率使用资源,而不是每个数据库都具有特定数量的可用资源。
• 弹性数据库查询 能够跨多租户数据库中的所有租户进行查询。
• 弹性数据库作业 将数据库维护操作或数据库架构更改打包并可靠地部署到多个数据库。
• 弹易 以原子和隔离的方式处理对多个数据库的更改。
• 弹性数据库拆分-合并工具 允许在参与分片框架的数据库之间移动分片
使用此库的重要概念是,分片可以有一个或映射来保存Shardlets(或来自ShardMapManager的映射)。 事实上,ShardMapManager维护着两个集合:Shards(getShards)和Mapping(GetMappings)。 映射是分片键映射到分片...
你可以有两种类型的分片键定义:RangeMapShard和ListMapShard——两者都继承了ShardMap(其中包含一个属性ShardMapType,用于定义实例化ShardMap的子类型)。
RangeMapShard - 为一个映射持有一系列键..例如客户 100-200(200 的价值比该范围内允许的值高一个(在我看来,定义它的方式很糟糕......但那是 MS 文档),所以他们的意思是 100-199,200-299 是使用 100-200 和 200-300 的范围定义的。
ListMapShard - 为每个 Shardlet 持有一个分片密钥。 所以一个分片键的 1 个值等于 1 个分片映射(一个分片可以容纳一个或多个分片 - 所以一个分片可以容纳映射.........
所以你必须将你的分片键映射到分片映射,然后将分片映射到分片,并且分片必须与数据库相关联...... 请记住,您可以创建一个未在其中定义分片(或架构)的数据库。
我发现我想反过来思考这个问题,从数据库开始,将数据粘贴到那个数据库中。 IMO,弹性数据库开发工具包以另一种方式工作,您定义 Shardlet(租户),将其映射到分片(架构),然后将分片(模式)粘贴到数据库中。
呵呵。