Domanda

I mapper O / R (oggetto / relazionali) .Net forniscono metodi asincroni pronti all'uso?

Non voglio scrivere la piastra della caldaia per il metodo asincrono, se possibile

Ho implementato il mio DAL con metodi asincroni utilizzando il framework CCR. Il CCR richiede sostanzialmente che io non blocchi nessuna delle sue discussioni in attesa di risposte IO.

La parte buona della mia soluzione finora è che si riduce al minimo indispensabile. Ma man mano che questo progetto cresce in termini di dimensioni e funzionalità, sto affrontando il compito leggermente scoraggiante di mantenere query SQL non elaborate e codice della piastra della caldaia.

MA d'altra parte se i metodi asincroni del mappatore O / R sono in realtà solo un trucco disordinato che aggiunge sfumature di complessità, non sto meglio.

Per favore, non concentrarti sulle alternative alla programmazione asincrona.

È stato utile?

Soluzione

Anche se non sono sicuro che qualcuno di loro lo faccia fuori dalla scatola, puoi usare .NetTiers , che è basato su modello. Potresti semplicemente aggiungere le parti asincrone al modello. Ciò eliminerebbe almeno la necessità di mantenere il codice boilerplate e le query SQL nude. Questo blog mostra come aggiungere chiamate asincrone alla libreria MS Enterprise (che .NetTiers può usare se lo desideri).

A metà dicembre 2008, LLBLGen Pro non supporta nativamente le chiamate asincrone. Anche Genome non lo è neanche. Non sembra neanche Telerik . Praticamente hanno cercato la loro documentazione e hanno cercato asincrono o metodi che iniziano con start perché questo è il modello.

Lascio che le altre risposte parlino se è una buona idea o no ...

Altri suggerimenti

Sì, per SQLAlchemy (uno dei migliori ORM), c'è sAsync:

http://foss.eepatents.com/sAsync

e NADBAPI:

http://developer.berlios.de/projects/nadbapi/

Penso che tu abbia sbagliato. La mia comprensione è che l'esecuzione asincrona nel tuo caso dovrebbe essere gestita a livello di architettura anziché a livello di ORM, ovvero architettura guidata dalla coda dei messaggi. Quello che vedo è che il tuo webserive inserirà solo un messaggio nella coda e c'è un qualche tipo di agente in background che esegue l'elaborazione asincrona dalla coda.

Dato che non ho abbastanza reputazione per commentare e StackOverflow mi sta avvisando inserendo un altro " answer " Lascio qui il mio commento.

Lee B: SQLAlchemy? Come lo usi con .NET ???

Il recupero dei dati in modo asincrono può essere realizzato in vari modi. L'esternalizzazione a un mapper o / r offre sfide che probabilmente non vorresti affrontare in quanto non rendono il tuo codice meno complesso. Il problema principale è che devi disporre di un meccanismo che viene notificato quando il recupero è completato dal mapper o / r, quindi al chiamante viene notificato che i dati sono pronti.

Questo non è meno complesso della creazione di un thread da solo e chiama la logica di recupero del mapper o / r da quel thread.

Mentre dichiari di voler creare un servizio web che dovrebbe essere reattivo, devi capire che il chiamante è al di fuori del servizio web e attende i dati. Iow: se il chiamante utilizza il webservice per il recupero dei dati, è già asincrono, poiché anche altri client saranno ancora in grado di chiamare il webservice: la richiesta del chiamante originale viene gestita su un thread diverso, la logica per recuperare i dati viene eseguita all'interno di quel thread e i dati vengono quindi restituiti al chiamante.

L'uso di metodi asincroni non è di alcuna utilità in questo caso, poiché il chiamante dovrebbe altrimenti essere avvisato quando i dati sono pronti, il che richiede una spinta dal servizio Web al client, il che richiede che il client rimanga connesso al servizio Web per tutto il tempo come il recupero prende comunque.

L'interazione asincrona da db non è qualcosa di magico che puoi lanciare verso qualcosa in modo da renderlo più reattivo. L'interazione db asincrona potrebbe indurre il chiamante a fare altre cose nel frattempo. Tuttavia, se ciò non è già necessario, per iniziare non è necessaria l'interazione db asincrona, che renderà il codice molto meno complesso.

Nhibernate sembra essere relativamente più semplice da implementare Async rispetto a LinqToSQL. Vedi questo

Personalmente ciò che farei è usare ciò che mi fa sentire a mio agio (dato che non ho usato NHibernate mi preoccuperei della curva di apprendimento e dei potenziali problemi, quindi preferirei usare qualcosa come LINQtoSQL o il livello di accesso ai dati su misura) e concludere nel proprio servizio web di Adattatore LOB WCF .

Se davvero non volessi codificare te stesso, potresti semplicemente usare ADO.NET Data Services che sostanzialmente fa ciò per Entity Framework.

Sembra che manchi qualche indice.

O è necessario spostare la progettazione del database sul modello OLAP.

In caso contrario.

  1. Ottieni più RAM.
  2. Ottieni più CPU.
  3. Partiziona i tuoi tavoli.
  4. Crea un wrapper davanti al DB in grado di gestire richieste asincrone. Sembrerà una coda.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top