基于Microsoft Azure Elastic Scale示例应用程序在线,我已经能够在Azure中创建我的Shard Map Manager(SMM)和弹性池数据库。我的架构是每个租户的单独数据库。我在我的Web应用程序中使用Entity Framework。我使用byte []哈希作为我的Shard Key,基于字母数字客户名称。客户名称是作为客户登录的一部分输入的,因此我可以在登录时确定唯一的分片密钥以传递给SMM。
我的问题是:
1。)由于每个租户都有自己的数据库,我是否仍需要在客户表的每一行中包含散列客户名称/分片密钥?
2。)我不知道在调用服务器期间分片密钥信息传递给SMM的位置。它是在实体的上下文中还是需要成为查询本身的一部分?任何样本都将非常感谢!
答案 0 :(得分:2)
在查找特定租户的连接字符串时,可以访问Shard Map Manager数据库。获得连接字符串后,即可连接到特定于租户的数据库。在数据库内部,您根本不需要使用分片键。
Elastic Database Tools library的执行情况为data dependent routing (DDR)。但是当你有一个简单的single tenant sharding pattern实现时,你可能会发现它有点过分。您始终可以在启动时查询分片地图数据库(或自定义配置存储),并加载Dictonary<string,string>
以存储CustomerName - &gt; ConnectionString查找。