在数据库上下文上执行Elastic Sc​​ale多分片查询

时间:2014-12-17 15:25:44

标签: c# entity-framework linq-to-sql azure-sql-database azure-elastic-scale

我正忙于在我正在进行的项目中实施新的Elastic Sc​​ale技术。 这项技术似乎解决了我们在设计新应用程序基础时遇到的一些复杂问题。

到目前为止,这些示例看起来很棒,而且我正忙着在新创建的DAL中实现它。

对于我们的应用程序,我们不能完全依赖Azure中的Elastic Sc​​ale。应用程序必须能够在单个实例计算机上运行,​​也可以在内部运行。 因此,我创建了以下代码来查询数据库,该数据库运行良好,也使用Elastic Sc​​ale。

public IEnumerable<AnEntity> All()
{
    var dbConnection = GetConnection();
    using (var context = new OurDatabaseContext(dbConnection))
    {
        var theEntities = context.EntityTable;
        return theEntities.ToArray();
    }
}
private IDbConnection GetConnection()
{
    var connectionInstance = connection[ConnectionStringNames.TheDatabase];
    var dbConnection = connectionInstance.Create();
    return dbConnection;
}

通过IoC配置connectionInstance,我们可以在IDbConnection中创建OurDatabaseContext。一切都非常简单。

我面临的主要问题是执行MultiShardConnection,由Elastic Sc​​ale提供并在示例中实现。

所以我的问题是,是否可以将MultiShardConnection与数据库上下文(如LINQ2SQL(我们正在使用)或EF)一起使用。

如果没有,是将MultiShardConnectionMultiShardCommand结合使用的唯一解决方案吗?或者什么时候可以使用这样的功能?

1 个答案:

答案 0 :(得分:1)

正如我目前所知,没有简单的方法可以与dbContext建立多线程连接。

使用MultiShardConnection + MultiShardCommand从示例中可以说是非常明确的。但是并非所有方法都可用(例如ReadAsync)。

但我认为大多数多硬连接都可以通过使用正确的Sharding Key(映射键)来绕过。我通过向ShardMapManager添加一个分片键解决了我的问题。 如果您想描述您的具体原因,您需要使用MultiShard Connection并编辑我的帖子。 始终可以选择创建多个dbContexts。