6

Sono impegnato a implementare la nuova tecnologia Elastic Scale in un progetto al quale sto lavorando al momento. Questa tecnologia sembra risolvere alcuni problemi complessi che avevamo durante la progettazione della nuova base applicativa.Esecuzione di una query multi-shard a scala elastica sul contesto del database

Finora, gli esempi sembrano grandiosi e sono impegnato a implementarlo nel nostro DAL appena creato.

Per la nostra applicazione non possiamo fare affidamento esclusivamente su Elastic Scale in Azure. L'applicazione deve essere in grado di essere eseguita anche su una singola istanza, in locale. Quindi ho creato il seguente codice per interrogare il database che funziona abbastanza bene, anche con Elastic Scale.

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

Il connectionInstance è configurato tramite IoC che creerà un IDbConnection che possiamo utilizzare nel OurDatabaseContext. Tutto molto semplice.

Il problema principale che sto affrontando è un MultiShardConnection fornito da Elastic Scale e implementato negli esempi.

Quindi la mia domanda è, è possibile utilizzare un MultiShardConnection con un contesto di database (come quelli di LINQ2SQL (che stiamo utilizzando) o EF).

In caso negativo, è l'unica soluzione per utilizzare MultiShardConnection in combinazione con MultiShardCommand? O quando sarà disponibile una tale funzione?

+0

Perché stai cercando di utilizzare MultiShardConnection in DbContext? Hai provato l'approccio descritto in questo articolo - http://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-scale-use-entity-framework-applications-visual-studio/ –

risposta

1

Come al momento so che non esiste un modo semplice per creare una connessione multishard con un dbContext.

Utilizzo di MultiShardConnection + MultiShardCommand è piuttosto semplice dagli esempi. Tuttavia non sono disponibili tutti i metodi (ad esempio ReadAsync).

MA, penso che la maggior parte delle connessioni multishard può essere aggirata usando la giusta Sharding Key (chiave di mappatura). Ho risolto il mio problema aggiungendo un'altra chiave sharding al mio ShardMapManager. Se vuoi descrivere la tua ragione specifica hai bisogno di MultiShard Connection e modifica il mio post. C'è sempre l'opzione per creare più dbContexts.