6

Jestem zajęty wdrażaniem nowej technologii Elastic Scale w projekcie, nad którym obecnie pracuję. Ta technologia wydaje się rozwiązywać złożone problemy, które mieliśmy podczas projektowania nowej podstawy aplikacji.Wykonywanie kwerendy wielowątkowej Elastic Scale w kontekście bazy danych

Do tej pory przykłady wyglądają świetnie i jestem zajęty wdrażaniem tego w naszym nowo utworzonym DAL.

Do naszej aplikacji nie możemy polegać wyłącznie na Skali elastycznej na platformie Azure. Aplikacja musi być również uruchomiona na maszynie z pojedynczą instancją, także na poziomie lokalnym. Dlatego stworzyłem następujący kod do kwerendy do bazy danych, która działa całkiem dobrze, również ze skalą elastyczną.

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; 
} 

The connectionInstance jest skonfigurowany poprzez IoC który będzie stworzyć IDbConnection które możemy wykorzystać w OurDatabaseContext. Wszystko dość proste.

Głównym problemem, przed którym stoję, jest wykonanie MultiShardConnection dostarczonej przez Elastic Scale i zaimplementowanej w przykładach.

Moje pytanie brzmi: czy można użyć MultiShardConnection z kontekstem bazy danych (np. LINQ2SQL (którego używamy) lub EF).

Jeśli nie, czy jedynym rozwiązaniem jest użycie MultiShardConnection w połączeniu z MultiShardCommand? Lub kiedy taka funkcja stanie się dostępna?

+0

Dlaczego próbujesz użyć MultiShardConnection w DbContext? Czy próbowałeś podejścia opisanego w tym artykule - http://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-scale-use-entity-framework-applications-visual-studio/ –

Odpowiedz

1

Jak już wiem, nie ma trywialnego sposobu na utworzenie połączenia wielodostępowego z dbContext.

Korzystanie z MultiShardConnection + MultiShardCommand jest dość uproszczone z przykładów. Jednak nie wszystkie dostępne metody (na przykład ReadAsync).

ALE, myślę, że większość połączeń wielostanowiskowych można ominąć za pomocą odpowiedniego klucza do Sharding (klucz odwzorowania). Rozwiązałem mój problem, dodając kolejny klucz do ShardMapManager. Jeśli chcesz opisać konkretny powód, potrzebujesz MultiShard Connection i źle edytujesz mój post. Zawsze istnieje możliwość utworzenia wielu plików dbContext.