Archivi categoria: Linq

Articoli relativi a Linq to SQL

Nasce caraffinity.it il primo social network per chi vende e compra auto

E’ ormai online da qualche mese il primo portale di automotive social oriented, www.caraffinity.it .
Interamente sviluppato dal sottoscritto, utilizza svariate tecnologie sia del mondo Microsoft che del mondo Linux.

Microsoft

Linux

Se vi state domandando perchè ho scelto di mixare Microsoft e Linux è semplice, un ambiente eterogeneo per quanto più complesso da gestire, consente di sfruttare il meglio di ambedue le tecnologie.

A morte i talebani informatici! :-)

Benchmark MySQL Connector NET Vs DevArt DotConnect For MySQL

Era da un po’ di tempo che mi chiedevo se l’implementazione di Linq To SQL per MySQL di DevArt fosse più efficiente o meno dell’alternativa di casa MySQL.

Ho quindi deciso di farmi in casa un benchmark che, sebbene effettuato in modo piuttosto grossolano e rapido ha dato dei risultati abbastanza netti.
Il test è stato eseguito con le seguenti condizioni (da qui capirete che è abbastanza spartano come benchmark):

  • Windows 7 64 BIT
  • MySQL 5.1.x 64 BIT per Windows
  • .NET Framework 4.0
  • Utilizzato Cassini al posto di IIS
  • DevArt versione 6.30.185.0
  • MySQL Connector NET versione 6.4.4

In pratica ho lanciato due procedure separate con la mia macchina nelle stesse condizioni di lavoro e a distanza di pochissimo tempo, quindi applicativi aperti, musica che suona e via discorrendo :-)

Il test era suddiviso in due componenti, l’esecuzione di 1.000 query su una tabella con campo indicizzato passandogli un valore randomico e l’inserimento di 1.000 record sempre con valori randomici.
In particolare l’inserimento prevedeva il COMMIT ad ogni STATEMENT perché altrimenti non si notava alcuna differenza di performance tra i due drivers.

Di seguito i risultati nudi e crudi:

MYSQL (utilizzo 27%/30% CPU poi sceso in insert a 13%/15%) 6.4.4

  • Data avvio select: 30/12/2011 18:12:03
  • Data fine select: 30/12/2011 18:12:31
  • Data avvio insert: 30/12/2011 18:12:31
  • Data fine insert: 30/12/2011 18:12:43

DevArt (utilizzo 27%/31% CPU in insert a 13%/17%) 6.30.185.0

  • Data avvio select: 30/12/2011 18:13:21
  • Data fine select: 30/12/2011 18:13:38
  • Data avvio insert: 30/12/2011 18:13:38
  • Data fine insert: 30/12/2011 18:13:44

Tempo SELECT MySQL: 28 secondi
Tempo SELECT DevArt: 17 secondi

Tempo INSERT MySQL: 12 secondi
Tempo INSERT DevArt: 6 secondi

Direi che è abbastanza chiaro che, a parte una lieve differenza nell’utilizzo della CPU (in favore del driver MySQL Connector NET meno esoso), la velocità di esecuzione sia delle SELECT che delle INSERT è nettamente in favore di DevArt.

Morale, bene così, almeno non ho toppato driver per un importante progetto che sto sviluppando! :-)

Attivata seconda istanza di Dogs On Web, il canile online

Tempo fa mi è stato chiesto se potevo realizzare il sito web per un canile sardo, nello specifico la sezione di Carbonia della Lega Nazionale per la Difesa del Cane.
All’epoca oltre ad aver accettato ho avuto un’idea semplice ma credo funzionale, ovvero realizzare una piccola applicazioncina web che consenta la messa online di potenzialmente infiniti siti web per canili.

Ne ho quindi realizzata una prima release che si trova su Source Forge completa di codici sorgenti e di accesso SVN.

E’ ancora embrionale e sicuramente poco sviluppata, però al momento serve già con successo i seguenti due siti web:

Il progetto DogsOnWeb è in ASP.NET e si basa su MVC 2.

Chiunque volesse contribuire allo sviluppo del progetto sarà il benvenuto.
Attualmente non c’è alcun sistema di installazione, pertanto nel caso fatemi sapere e contattatemi via mail a: info@massimo-caselli.com

Ottenere dati random da una query con LINQ to SQL

Per un progetto avevo la necessità di estrarre randomicamente i dati presenti in una tabella “Articolo” contenente appunto articoli di categorie diverse.
Per fare questa operazione con classici statement SQL con MySQL sarebbe stato abbastanza semplice, bastava utilizzare una query del tipo:

1
SELECT *, RAND() AS rand_value FROM Articolo ORDER BY rand_value;

Con il modello a oggetti di LINQ to SQL, era un filo più complesso (tra l’altro come base dati avevo SQL Server), per cui ho seguito questo howto:
http://weblogs.asp.net/fmarguerie/archive/2008/01/10/randomizing-linq-to-sql-queries.aspx

In buona sostanza è sufficiente andare a creare una nuova view:

1
CREATE VIEW RandomView AS SELECT NEWID() AS ID

E una funziona che possa richiamarla:

1
2
3
4
5
6
7
8
CREATE FUNCTION GetNewId
(
)
RETURNS uniqueidentifier
AS
BEGIN
RETURN  (SELECT ID FROM RandomView)
END

A questo punto il tutto si conclude andando ad aggiornare il modello LINQ to SQL per poter utilizzare la funzione utilizzare la seguente sintassi:

1
2
3
4
5
6
7
8
9
public IEnumerable<articolo> GetArticoliRandom(string AreaCode)
{
    IEnumerable < Articolo >  ArtList = (from art in _model.Articolo
        where art.AreaCode == AreaCode
        orderby _model.GetNewId()
        select art).Take(5);

    return ArtList;
}

Ovviamente il .Take(5) non serve necessariamente ma solo nel mio caso dove dovevo estrarre 5 articoli.