Scale MultiShardConnection 및 MultiShardDataReader를 사용하여 Dapper를 어떻게 사용할 수 있습니까?

azure-elastic-scale dapper sharding

문제

Azure Elastic Scale MultiShardConnection에서 반환 된 쿼리 결과를 구문 분석하려고합니다. Dapper 메서드를 사용할 수 없으므로 SqlConnection 또는 DbConnection에서 상속받는 것처럼 보이지 않습니다. 이는 함께 결합 된 팬 아웃 (fan-out) 쿼리를 실행하고 있다고 생각할 때 의미가 있습니다. 내가 원하는 것은 기존의 Dapper 기능을 사용하여 판독기 결과의 파서를 유형으로 처리하는 것입니다.

원래 매핑에 Dapper를 사용하지 않으면 매핑 기능을 사용할 수 있습니까?

아래는 내가 함께 일하는 유형입니다 :

MultiShardConnection : IDisposable
MultiShardCommand : DbCommand
MultiShardDataReader : DbDataReader, IDataReader, IDisposable, IDataRecord

다음은 Dapper 매퍼를 사용하려고하는 예제 쿼리입니다.

Customer customer = null;
using (MultiShardConnection conn = GetMultiShardConnection())
using (MultiShardCommand cmd = conn.CreateCommand())
{
    cmd.CommandText = "SELECT * FROM [Customer] WHERE ...";
    cmd.CommandTimeout = 120;
    cmd.CommandTimeoutPerShard = 120;

    using (MultiShardDataReader reader = await cmd.ExecuteReaderAsync())
    {
        while (reader.Read())
        {
            // Replace this with mapper...
            customer = new Customer()
            {
                CustomerId = reader.GetInt32(0)
                //etc...
            };
        }
    }
}
return customer;

최신 정보

sp_execute_fanout 을 사용할 필요가있었습니다.

using (var con = GetConnection())
{
    await con.OpenAsync();
    return (await con.QueryAsync<Customer>("sp_execute_fanout ", new
    {
        shard_map_manager_server = "my_server.database.windows.net",
        shard_map_manager_database = "my_shardmapmananger",
        user_id = "my_username",
        password = "my_password",
        shard_map_name = "my_shardmap",
        statement = "SELECT * FROM Customer"
    }, commandTimeout: 120, commandType: CommandType.StoredProcedure)).FirstOrDefault();
}

인기 답변

현재 MultiShardConnection은 Dapper와 통합되어 있지 않습니다. 그 이유는 DbConnection을 구현하지 않는다는 것입니다. 다른 해결책으로, 나는 탄성 데이터베이스 쿼리 (EDQ)를 시도하는 것이 좋습니다 : https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-query-overview/ . EDQ를 사용하면 Azure DB에서 단일 데이터베이스에 연결하고 EDQ 외부 테이블에 대해 일반 Dapper를 사용하여 샤드 전체를 쿼리 할 수 ​​있습니다. 이제 Azure SQL DB의 모든 서비스 티어에서 EDQ를 사용할 수 있습니다.

그게 어떻게 효과가 있는지 알려주세요.

고마워, Torsten



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow