Linq2Sql, carenze imbarazzanti

Annoto delle carenze ... imbarazzanti  ( cosi le definirebbe l'ex collega Riccardo :D )

  • non c'è modo di specificare Hint al Database per ottimizzare/indirizzare il piano di esecuzione di una query
  • la proprietà AutoSync che determina se dopo in INSERT venga eseguito o meno un SELECT per avere in ritorno i valori di campi autoincrement non si può indicare a livello di singola query ma solo di DataContext
  • non c'è modo di eseguire Bulk Insert ossia insert massivi in una unica operazione massiva (come quando si fa  INSERT a_table (colA, ..., colZ) SELECT colA, ..., colZ FROM ...)

E' adatto a applicazioni enterprise ?


Print | posted @ martedì 28 aprile 2009 20.02

Comments on this entry:

Gravatar # re: Linq2Sql, carenze imbarazzanti
by Simone at 28/04/2009 20.44

Premettendo che Linq2Sql non è un ORM, è però sicuramente un livello di astrazione sopra Sql e tende ad essere un ORM.
Da cui:
- Hint per indirizzare un piano d'esecuzione: Linq2Sql non permette di specificare Sql, anche xè dovrebbe essere multi DB
- Per fare un Bulk insert non usi un ORM.. quindi questo è "out of scope"

l'autosync... non ho presente.. magari questo è un problema.

Cmq, Linq2Sql è morto :) Guarda a NH (o a EF se vuoi stare dentro a MS)
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Luca Minudel at 28/04/2009 21.44

Hola Simone, grazie mille del feedback

capisco che dovrebbe essere multi DB anche se funzionare male già col primo mi sembra un pessimo inizio

sul Linq2Sql è morto concordo e spero in un futuri NH (MS ne ha stagliate talmente tante di seguito qui che ...)

nel caso specifico il codice è stato di successo ed è sopravissuto alle tecnologie con cui è sviluppato
mi chiedo sel linq2sql avrebbe mai dovuto essere stato creato/rilasciato/pubblicizzato ai 4 venti ?!?!
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Davide Mauri at 28/04/2009 21.59

Ciao Luca

Per gli HINT se ti servono puoi usare le PLAN GUIDES di SQL Server. Ok, non è la stessa cosa che specificarle nella query....ma a tutti gli effetti è pure meglio. Se avessi l'hint nella query per rimuovere lo stesso perchè magari con l'SPxxx non c'è n'è più bisogno, devi modificare il codice che genera la query, usando le PLAN GUIDES elimini semplicmente il binding della query con il suo plan guide.

Giusto a titolo informativo: l'operazione INSERT INTO ... SELECT FROM *non* è considerata un'operazione di Bulk Insert. Solamente in SQL 2008 c'è questa opzione e deve essere attivata usando un TRACE FLAG particolare (a meno che tu non stia facendo l'inserimento su una tabella senza indice cluster, ossia un'heap)

@Simone:
Non mi pare che Linq2SQL sia multi-db. Da quanto ne so supporta solo SQL Server. Forse ti confondi con EF?
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Luca Minudel at 28/04/2009 22.20

Grazie dei suggerimenti interessanti

Davide, d'accordo che INSERT INTO ... SELECT FROM non è bulk insert.
ma cos'è? intendo che su una tabella di alcuni GB con diversi indici gli INSERT INTO ... VALUES costano ogniuno anche 30ms mentre facendoli col SELECT tutti insieme costano in media solo 1ms l'uno. quindi non è come un normale insert, come chiamarlo allora (e che magie fa) ?
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Davide Mauri at 28/04/2009 23.09

Eh beh parlando la si può definire come un caricamento di massa, ma l'importante è non aspettarsi le stesse prestazioni di una BULK INSERT o di una SELECT INTO...giusto per non avere soprese.
Per quanto riguarda le magie :-) il fatto che è puoi immaginare che una trasazione ha un overhead di "x" indipendente dal numero di righe che muove. Se hai tante trasazioni da una sola riga paghi il costo di "x" per tante volte quante sono le righe, se invece hai una sola transazione con molte righe, il costo di "x" lo paghi una sola volta.

Ciauz!
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Simone at 28/04/2009 23.12

@Mauro: infatti ho detto "dovrebbe" (o forse era meglio dire "avrebbe dovuto essere")
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Davide Mauri at 29/04/2009 0.02

@Chiaretto: Davide, thanks ;)
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Davide Senatore at 29/04/2009 8.27

Ciao Luca! Mi trovi completamente in accordo con te...Vieni a vedere il meeting di XeDotNet l'8 maggio: parlerò proprio di problemi di questo tipo e vedremo come .NetTiers possa risolvere la maggior parte di essi. blogs.ugidotnet.org/.../...n-meeting-xedotnet.aspx Un saluto!
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Luca Minudel at 29/04/2009 9.04

@davide

ho visto il meeting e gli argomenti sono davvero molto interessanti

anche il tool che citi ha quel grado di automatismo insieme alla flessibilita' che ho sempre sognato

sono molto curioso dell'argomento, non é che potresti spostare l'evento qui a Stoccolma ? :)
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Tommaso Caldarola at 29/04/2009 10.11

@Davide:


Se avessi l'hint nella query per rimuovere lo stesso perchè magari con l'SPxxx non c'è n'è più bisogno, devi modificare il codice che genera la query, usando le PLAN GUIDES elimini semplicmente il binding della query con il suo plan guide.



Questo lo vedrei più come un limite di Linq2SQL, ad esempio con NH puoi avere queste cose in comodi file di mapping esterni e cambiarli anche a volo se non sono di tipo embedded.
  
Gravatar # re: Linq2Sql, carenze imbarazzanti
by Davide Mauri at 29/04/2009 14.30

@Tommaso
Si, quello di avere la possibilità di mettere tutto in un file esterno è una buona cosa. Infatti com'è noto a me gli ORM come NH e EF non fanno impazzire, preferisco di gran lunga iBatis ad es.
  

Your comment:

Title:
Name:
Email:
Website:
 
Italic Underline Blockquote Hyperlink
 
 
Please add 6 and 5 and type the answer here: