In primo luogo, devo confessare che questa domanda deriva principalmente dal modello di licenza ancora costoso utilizzato da Microsoft per SQL Server Standard. Anche perché la versione Web è ora disponibile solo tramite il provider di hosting Web. Per informazioni: è 1 licenza per 2 CPU Core + CAL per utente.
Da un contatto di vendita Microsoft ho parlato ieri: tra 550 e 800 € (notare l'incredibile differenza a seconda del rivenditore e immagino volume: 250 € vicino al 50%) per 2 Core + tra 280 e 293 € per utente.
Quindi, se potessimo spostare facilmente i nostri dati da SQL Server a qualsiasi motore open source (MySQL, PostgreSQL o NoSQL come Redis) adoriamo spendere questi soldi in tempo per apprendere nuove competenze invece di darlo a Microsoft per un sistema di grandi dimensioni per i nostri bisogni Quando scrivo sovradimensionato mi riferisco alle altre funzionalità incluse in Standard Edition invece di Web Edition (SSRS, SSAS, ecc ...)
La nostra architettura software è una Onion Architecture come proposto da Jeffrey Pallermo nel 2008:
Comepuoivederedall'immagineèstatousatopensandoaMVC.LoabbiamousatoconWebAPI2checondividelostessotipodifilosofia.
CiaffidiamoaiIEntityRepository
corretta risolta quando il controller viene istanziato durante il ciclo di vita delle richieste Asp.Net. Quindi, in teoria, abbiamo solo dipendenze sull'interfaccia IEntityRepository che fa il suo lavoro come "Contratto":
public interface IWriteBaseRepository<TEntity> : IReadBaseRepository<TEntity>, IDisposable
where TEntity : class
{
TEntity Add(TEntity entity);
IEnumerable<TEntity> AddRange(IEnumerable<TEntity> entities);
TEntity Update(TEntity entity);
TEntity AddOrUpdate(TEntity entity);
IEnumerable<TEntity> AddOrUpdate(IEnumerable<TEntity> entities);
void Delete(TEntity entity);
void SaveChanges();
IEnumerable<string> GetPendingChanges(TEntity entity, string identifierPropertyName, Dictionary<string, string> includeProperties = null);
}
Per la parte repository abbiamo usato l'approccio Code First e non c'è assolutamente alcuna intelligenza nel DB (grazie a Uncle Bob per le sue chiare visioni). I nostri repository restituiscono principalmente DbSet come IEnumerable. Quindi potresti aver intuito che utilizziamo strongmente il caricamento pigro per tipo di "Transito" nei nostri Servizi di dominio.
Quindi conoscendo i pochi che ho scritto e la tua esperienza passata sul passaggio da un motore DB a un altro, qualsiasi feedback sarebbe molto apprezzato prima di trovare il coraggio di immergermi in profondità in PostgreSQL che non mi ricorda un paio di ore così facili primo tentativo di Oracle nel 2002.