<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Evangelism 2.0: riflessioni sul business del software da un punto di vista privilegiato! : Data Access</title><link>http://blogs.msdn.com/scoriani/archive/tags/Data+Access/default.aspx</link><description>Tags: Data Access</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>S+S o SaaS che sia, attenti alle performance del DB!</title><link>http://blogs.msdn.com/scoriani/archive/2008/07/18/s-s-o-saas-che-sia-attenti-alle-performance-del-db.aspx</link><pubDate>Fri, 18 Jul 2008 18:16:26 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8749728</guid><dc:creator>scoriani</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/scoriani/comments/8749728.aspx</comments><wfw:commentRss>http://blogs.msdn.com/scoriani/commentrss.aspx?PostID=8749728</wfw:commentRss><wfw:comment>http://blogs.msdn.com/scoriani/rsscomments.aspx?PostID=8749728</wfw:comment><description>&lt;p&gt;Ok, siamo una società che sviluppa software per qualche genere di utilizzo, abbiamo capito che oltre ad offrire la versione "installata" fisicamente sui server dei clienti potremmo aprire nuove prospettive commerciali alla nostra azienda offrendo anche l'alternativa del servizio "hosted" direttamente da noi o da altri partner, ad un costo (mensile per utente? per transazione?) sostenibile anche da realtà che in precedenza non avrebbero potuto permetterselo, almeno per quanto riguarda le funzionalità "top" della gamma. Abbiamo iniziato a progettare ("to design", dall'inglese.. :)) la nostra soluzione e dopo esserci letti tutti i libri possibili su Domain Driven Design, Pattern e anti-Pattern, O/RM come la salvezza del mondo civilizzato (just kidding...), dobbiamo iniziare a lavorare... ehm... a pensare a come strutturare i dati gestiti dal nostro sistema. Siamo dunque in un mondo "multi-tenant" visto che dovremo gestire le informazioni dei nostri clienti garantendo il miglior rapporto possibile tra isolamento e prestazioni (perchè sappiamo bene che tutto ha un costo, vero? soprattutto quando parliamo di gestione dati..). Abbiamo quindi una serie di possibilità, oggi ulteriormente estese dalle tecnologie di virtualizzazione, che vanno dal dedicare un singolo DB server fisico per cliente, uno virtualizzato (dimensionando correttamente il rapporto fisico/virtuale, ovviamente), sfruttare le capacità multi-instanza di SQL Server e dedicare una istanza per cliente, ridurre ad un database per cliente, oppure arrivare ad un unico database partizionandolo logicamente per garantire l'isolamento necessario. Ognuna di queste alternativa ha pregi e difetti, difficile trovare LA soluzione, a seconda di quali sono i requisiti tecnici ed economici del progetto. Ovviamente l'ultima soluzione è quella potenzialmente più scalabile a parità di hw, ma è anche quella che richiede un approccio più complesso in fase di progettazione ("to design", sempre in inglese...). E che succede se vogliamo dare agli utenti finali la possibilità di personalizzarsi lo schema del database aggiungendo qualche campo custom? Quale applicazione realizzata dai nostri ISV "nostrani" non lo fa? Le cose si complicano ancora di più...&lt;/p&gt; &lt;p&gt;I colleghi &lt;a href="http://blogs.msdn.com/eugeniop/"&gt;Eugenio Pace&lt;/a&gt; e &lt;a href="http://blogs.msdn.com/gianpaolo/"&gt;Gianpaolo Carraro&lt;/a&gt; ed il loro team nello sviluppo della ormai famosa applicazione &lt;a href="http://www.codeplex.com/LitwareHR/"&gt;LitwareHR&lt;/a&gt; hanno analizzato in dettaglio le performance delle diverse alternative legate all'utilizzo di un database condiviso e alle relative tecniche principali per realizzare uno schema "dinamico". Quello che ne è uscito è una interessantissima &lt;a href="http://www.codeplex.com/Release/ProjectReleases.aspx?ProjectName=LitwareHR&amp;amp;ReleaseId=8440"&gt;guida&lt;/a&gt; al testing di questa tipologia di soluzioni che permette a chiunque abbia dubbi in questo ambito di provare sul campo la bontà delle diverse scelte nei diversi ambiti della gestione dati.&lt;/p&gt; &lt;p&gt;I risultati non sono stupefacenti, uno schema tradizionale, senza il ricorso a tecniche quali i "campi dinamici" o l'XML, è di gran lunga la soluzione più scalabile, anche se i requisiti a volte potrebbero spingere verso scelte diverse. L'XML è buon ultimo anche se in alcuni ambiti non mi sentirei di sconsigliarlo per partito preso. Suggerisco comunque una lettura attenta, visto che gli spunti interessanti sono molti.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8749728" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/scoriani/archive/tags/Data+Access/default.aspx">Data Access</category><category domain="http://blogs.msdn.com/scoriani/archive/tags/Data+Programmability/default.aspx">Data Programmability</category><category domain="http://blogs.msdn.com/scoriani/archive/tags/SQL+Server/default.aspx">SQL Server</category></item></channel></rss>