基于 Microsoft Azure Elastic Scale 在线示例应用程序,我已经能够在 Azure 中创建我的分片映射管理器 (SMM) 和弹性池数据库。我的架构是每个租户单独的数据库。我在我的 Web 应用程序中使用 Entity Framework 。我使用 byte[] 哈希作为基于字母数字客户名称的分片键。客户名称作为客户登录的一部分输入,以便我可以确定登录时传递给 SMM 的唯一分片键。
我的问题是:
1.) 由于每个租户都有自己的数据库,我是否还需要在客户表的每一行中包含散列的客户名称/分片键?
2.) 我不明白在调用服务器期间分片键信息传递到 SMM 的位置。它是在实体的上下文中还是需要成为查询本身的一部分?任何这样的样本将不胜感激!
最佳答案
在查找特定租户的连接字符串时,您可以访问 Shard Map Manager 数据库。获得连接字符串后,即可连接到特定于租户的数据库。在数据库内部,您根本不需要使用分片键。
Elastic Database Tools library有 data dependent routing (DDR) 的实现。但当你有一个简单的 single tenant sharding pattern 时,你可能会发现它太过分了。执行。您始终可以在启动时查询分片映射数据库(或自定义配置存储)并加载 Dictonary<string,string>
存储 CustomerName -> ConnectionString 查找。
关于Azure 弹性规模/每个租户数据库 : how to implement data dependent routing,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50781540/