目前我们有一个Azure SQL Server,每次创建新的Web应用程序时,我们都会使用EF Core Code First来生成数据库。但是,在创建数据库之后,我们手动转到Azure门户并将新创建的数据库添加到Azure SQL Server内的弹性池中。有可能以某种方式自动化该过程,以便通过门户网站或使用EF或其他任何方式生成每个新创建的数据库,它将自动添加到池中吗?
答案 0 :(得分:9)
您可以使用Transact-SQL以编程方式将现有Azure SQL数据库移动到弹性池中。
ALTER DATABASE db1
MODIFY ( SERVICE_OBJECTIVE = ELASTIC_POOL ( name = pool1 ) ) ;
答案 1 :(得分:2)
您必须使用Elastic数据库客户端库来管理数据库的创建,以便ShardMapManager可以注册数据库。请注意,我说数据库(或Elastic DB术语中的分片)NOT Tenant(或Elastic DB术语中的Shardlet)。
SQL服务器的整个Elastic DB components如下所示,通过Elastic Database SDK添加了分片,其中涉及以下组件(其中一些仅在Azure中可用): •Elastic Database Client Library 管理数据分布并将租户映射到数据库。 •Elastic Database Pools(仅限Azure) 可以在多个数据库中共享的资源池的分配。允许数据库以自己的速率使用消费者资源,而不是每个数据库都有可用的特定资源。
•弹性数据库查询 能够在多租户数据库中查询所有租户。
•弹性数据库作业 将数据库维护操作或数据库模式更改打包并可靠地部署到多个数据库。
•弹性交易 以原子和隔离的方式处理对几个数据库的更改。
•弹性数据库拆分合并工具 允许在参与分片框架的数据库之间移动分片
使用此库的重要概念是Shard可以有一个或映射来保存Shardlets(或来自ShardMapManager的映射)。事实上,ShardMapManager维护着两个集合:Shards(getShards)和Mapping(GetMappings)。 ShardKeys映射到Shard ......
你有两种类型的Shard Key定义:RangeMapShard和ListMapShard - 它们都继承了ShardMap(它包含一个属性ShardMapType来定义实例化ShardMap的子类型)。
RangeMapShard - 保存一个映射的RANGE键,例如客户100-200(200的价值高于该范围内的允许值(在我看来,这是一种蹩脚的定义方式......但那是MS文档)所以他们的意思是100-199,200-299定义使用范围100-200和200-300。
ListMapShard - 为每个Shardlet保留一个Shard Key。因此,ShardKey的1个值等于1个ShardMap(Shard可以容纳一个或多个Shardlet - 因此Shard可以保存映射...)...
因此,您必须将分片键映射到分片映射,然后将分片映射关联到分片,并且分片必须与数据库关联....记住,您可以创建数据库没有在其中定义的分片(或模式)。
我发现我想以相反的方式考虑这个问题,从数据库开始,并将数据插入到数据库中。 IMO,Elastic DB SDK以另一种方式工作,您定义Shardlet(租户),将其映射到分片(架构),然后将Shard(架构)粘贴到数据库中。
HTH。