Pregunta

¿Algún asignador .Net O / R (objeto / relacional) proporciona métodos asincrónicos listos para usar?

No quiero tener que escribir la placa de la caldera para el método asincrónico si es posible

He desarrollado mi propio DAL con métodos asincrónicos utilizando el marco CCR. El CCR básicamente exige que no bloquee ninguno de sus hilos que esperan respuestas de IO.

Lo bueno de mi solución hasta ahora es que se reduce al mínimo. Pero a medida que este proyecto crece en términos de escala y funcionalidad, me enfrento a la tarea levemente desalentadora de mantener consultas SQL sin procesar y código de placa de caldera.

PERO, por otro lado, si los métodos asincrónicos del mapeador O / R son realmente un truco desordenado que agrega extraños complejos, no estoy mejor.

No se centre en alternativas a la programación asincrónica.

¿Fue útil?

Solución

Si bien no estoy seguro de si alguno de ellos lo hace fuera de la caja, puede usar .NetTiers , que se basa en la plantilla. Simplemente puede agregar las partes asíncronas a la plantilla. Eso al menos eliminaría la necesidad de mantener el código repetitivo y las consultas SQL desnudas. Este blog muestra cómo agregar llamadas asíncronas a la biblioteca de MS Enterprise (que .NetTiers puede usar si lo desea).

A mediados de diciembre de 2008, LLBLGen Pro no admite de forma nativa las llamadas asíncronas. Actualmente Genoma tampoco lo hace. No parece que Telerik tampoco lo haga. Prácticamente solo busqué en su documentación y busqué asíncrono o métodos que comienzan con comenzar porque ese es el patrón.

Dejo que las otras respuestas hablen si es una buena idea o no ...

Otros consejos

Sí, para SQLAlchemy (uno de los mejores ORM), hay sAsync:

http://foss.eepatents.com/sAsync

y NADBAPI:

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

Creo que te equivocaste. Entiendo que la ejecución asíncrona en su caso debe manejarse a nivel de arquitectura en lugar de a nivel de ORM, es decir, arquitectura dirigida por la cola de mensajes. Lo que veo es que su servidor web solo colocará un mensaje en la cola y hay algún tipo de agente en segundo plano que realiza el procesamiento asincrónico fuera de la cola.

Como no tengo suficiente reputación para comentar y Stackoverflow me está alertando insertando otro " answer " Dejaré mi comentario aquí.

Lee B: ¿SQLAlchemy? ¿Cómo lo usas con .NET ???

La obtención de datos de forma asincrónica se puede lograr de varias maneras. Para externalizarlo a un mapeador de O / R se presentan desafíos con los que probablemente no desee lidiar, ya que realmente no hace que su código sea menos complejo. El problema principal es que debe tener un mecanismo que se notifica cuando el mapeador o / r completa la búsqueda, por lo que el llamante recibe una notificación de que los datos están listos.

Esto no es menos complejo que crear un hilo usted mismo y llamar a la lógica de captación del mapeador o / r desde ese hilo.

Cuando declara que desea crear un servicio web que debe responder, debe darse cuenta de que la persona que llama está fuera del servicio web y espera los datos. Iow: si la persona que llama utiliza el servicio web para recuperar datos, ya es asíncrono, ya que otros clientes también podrán llamar al servicio web: la solicitud del llamador original se maneja en un hilo diferente, la lógica para recuperar los datos se ejecuta dentro de ese hilo, y los datos se devuelven a la persona que llama.

El uso de métodos asincrónicos no sirve de nada aquí, ya que de lo contrario la persona que llama tendría que ser notificada cuando los datos estén listos, lo que requiere un impulso del servicio web al cliente, lo que requiere que el cliente permanezca conectado al servicio web por tanto tiempo como la búsqueda toma de todos modos.

La interacción db asincrónica no es algo mágico que puedes lanzar a algo, por lo que se vuelve más receptivo. La interacción db asincrónica podría hacer que la persona que llama haga otras cosas mientras tanto. Sin embargo, si eso ya no es necesario, no necesita interacción db asincrónica para comenzar, lo que hará que su código sea mucho menos complejo.

Nhibernate parece ser relativamente más fácil de implementar Async que LinqToSQL. Consulte esto

Personalmente, lo que haría es usar con lo que me sienta cómodo (como no he usado NHibernate, me preocuparía la curva de aprendizaje y los posibles problemas, así que preferiría usar algo como LINQtoSQL o una capa de acceso a datos a medida) y envolver en su propio servicio web de Adaptador WCF LOB .

Si realmente no desea codificarlo usted mismo, puede usar Servicios de datos ADO.NET que básicamente hace eso para Entity Framework.

Parece que te faltan algunos índices.

O necesita cambiar el diseño de la base de datos al modelo OLAP.

Si ese no es el caso.

  1. Obtenga más ram.
  2. Obtenga más CPU.
  3. Particionar sus tablas.
  4. Cree un contenedor enfrente de la base de datos que pueda manejar solicitudes asíncronas. Se verá como una cola.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top