visual una tablas tabla studio que paso datos crear como codigo database queue message-queue

database - tablas - que es una tabla en sql



Colas contra tablas en sistemas de mensajería (5)

  1. Los datos se almacenan permanentemente en una tabla. He visto tantas aplicaciones java (jms) que pierden o desaparecen mensajes en camino a excepciones no detectadas u otros errores.

    ¿Qué implementación JMS? Sun vende una cola confiable que no puede perder mensajes. Tal vez acaba de comprar un producto cursi compatible con JMS. El MQ de IBM es extremadamente confiable y existen bibliotecas JMS para acceder a él.

  2. Las colas tienden a llenarse. El almacenamiento de Db es virtualmente infinito, en cambio.

    Ummm ... Si tu cola se llena, parece que algo está roto. Si tus aplicaciones fallan, eso no es bueno, y las colas tienen poco que ver con eso. Si compró una implementación JMS realmente pobre, puedo ver dónde puede estar descontento con ella. Es un mercado competitivo. Encuentra un mejor administrador de colas JCAPS de Sun tiene un administrador de colas realmente bueno, antiguamente la cola de mensajes SeeBeyond.

  3. Las tablas son de fácil acceso, mientras que debe usar instrumentos esotéricos para leer desde una cola.

    Eso no encaja con mi experiencia. Se accede a las tablas a través de este peculiar "otro idioma" (SQL) y requiere que conozca las correlaciones de estructura desde las tablas hasta los objetos y las correlaciones de tipos de datos desde VARCHAR2 a String. Además, tengo que usar algún tipo de capa de acceso (JDBC o un ORM que usa JDBC). Eso parece muy, muy complejo. Se accede a una cola a través de MessageConsumers y MessageProducers utilizando envíos y recepciones simples.

He estado experimentando los lados buenos y malos de los sistemas de mensajería en entornos de producción real , y debo admitir que una tabla o esquema de tablas bien organizado simplemente gana cada vez más cualquier otra forma de cola de mensajes, porque:

  1. Los datos se almacenan permanentemente en una tabla. He visto tantas aplicaciones java (jms) que pierden o desaparecen mensajes en camino a excepciones no detectadas u otros errores.
  2. Las colas tienden a llenarse. El almacenamiento de Db es virtualmente infinito, en cambio.
  3. Las tablas son de fácil acceso, mientras que debe usar instrumentos esotéricos para leer desde una cola.

¿Cuál es su opinión sobre cada enfoque?


Las colas brindan mensajes confiables. La naturaleza de almacenamiento y retransmisión desconectada de las colas lo hace mucho más escalable que las bases de datos, por no mencionar que es más robusto.

Y las colas no deberían utilizarse para el almacenamiento permanente de información: lo mejor es considerarlas como bandejas de entrada temporales, a diferencia de las bases de datos.


Primero utilicé tablas, luego refactoré a una cola de mensajes completa cuando (y si) hay una razón, que es trivial si su diseño es razonable.

Los mayores beneficios son a). Es más fácil, (b) es una pista de auditoría mejor porque tiene las otras tablas para unirse, c.) Si conoce las herramientas de la base de datos realmente bien, son más fáciles de usar que las herramientas de Message Queue , d.) en general, es un poco más fácil configurar un entorno de prueba / desarrollo en un contexto que ya existe para su aplicación (si se aplica la misma familiaridad).

Ah, y e.) Tal vez usted y otros, no es otro producto para aprender, instalar, configurar, administrar y apoyar.

IMPE, es igual de confiable, desconectable, y puede convertir si necesita más escalable.


Parece que los problemas que ha experimentado no son inherentes a la mensajería, sino que son artefactos de sistemas de mensajería mal implementados. ¿Construir sistemas de mensajería es más difícil que construir sistemas de bases de datos? Sí, si todo lo que haces es construir sistemas de bases de datos.

  • ¿Perder mensajes a excepciones no detectadas? Eso no es culpa de la cola de mensajes. Las aplicaciones que estás utilizando están mal diseñadas. Están eliminando mensajes de la cola antes de que finalice el procesamiento. No están usando transacciones ni haciendo journalling.
  • Las colas de mensajes se llenan mientras el almacenamiento de la base de datos es "virtualmente infinito". Usted habla como si administrar el espacio en disco fuera algo que las bases de datos no requerían. Los servidores de cola de mensajes requieren administración, al igual que los servidores de bases de datos.
  • Instrumentos esotéricos para leer desde una cola? Tal vez si encuentra métodos asincrónicos esotéricos. Tal vez si encuentra serialización y deserialización esotérica. (Al menos, esas son las cosas que encontré esotéricas cuando estaba aprendiendo mensajes. Al igual que muchas tecnologías aparentemente esotéricas, en realidad son bastante mundanas una vez que las entiendes, y comprenderlas es una parte importante de la educación del desarrollador experimentado).

Aspectos de los mensajes que lo hacen superior a las bases de datos:

  • Procesamiento asincrónico. Las colas de mensajes notifican los procesos en espera cuando llegan nuevos mensajes. Para lograr esta funcionalidad en una base de datos, los procesos de espera deben sondear la base de datos.
  • Separación de intereses. El canal de comunicaciones está desacoplado de los detalles de implementación del contenido del mensaje. Solo el emisor y el receptor necesitan saber algo sobre el formato del flujo de datos dentro de un mensaje dado.
  • Tolerancia a fallos. . La mensajería puede funcionar cuando las conexiones entre servidores son intermitentes. Las colas de mensajes pueden almacenar mensajes localmente y solo reenviarlos a servidores remotos cuando la conexión está activa.
  • Integración de sistemas. En el mundo de Windows, al menos, la mensajería está integrada en el sistema operativo. Utiliza el modelo de seguridad del sistema operativo, se gestiona a través de las herramientas del sistema operativo, etc.

Si no necesita estas cosas, probablemente no necesite mensajes.

Aquí hay un ejemplo simple de una aplicación para mensajería: estoy construyendo un sistema en este momento donde los usuarios, distribuidos a través de múltiples redes, están ingresando conjuntos de transacciones bastante complejos que se utilizan para producir resultados impresos. La generación de salida es computacionalmente costosa y no parte de su flujo de trabajo; es decir, a los usuarios no les importa cuándo se genera la salida, solo que sí.

Así que serializamos las transacciones en un mensaje y lo dejamos en una cola. Un proceso que se ejecuta en un servidor toma los mensajes de la cola, produce los resultados y almacena los resultados en un sistema de imágenes.

Si utilizáramos una base de datos como nuestro almacén de mensajes, tendríamos que idear un esquema para almacenar un formato de transacción que en este momento solo preocupan al remitente y al receptor, tendríamos que asegurarnos de que cada estación de trabajo en la red tuviera un conexiones persistentes al servidor de la base de datos, no tendríamos la capacidad de distribuir esta carga de transacción entre múltiples servidores, y nuestro servidor de salida tendría que consultar la base de datos miles de veces al día esperando para ver si había nuevos trabajos para procesar.


La frase late cada vez totalmente depende de cuáles fueron sus requisitos para comenzar. Ciertamente no va a latir todo el tiempo para todos.

Si está construyendo un sistema único que ya está utilizando una base de datos, no tiene requisitos de rendimiento de muy alto rendimiento y no tiene que comunicarse con ningún otro equipo o sistema, entonces probablemente tenga razón.

Para cosas sencillas, de bajo rendimiento y con un solo hilo, la base de datos es una alternativa totalmente buena a las colas de mensajes.

Donde brilla una cola de mensajes es cuando

  • desea un equilibrador de carga altamente concurrente y escalable de alto rendimiento para que pueda procesar decenas de miles de mensajes por segundo simultáneamente en muchos servidores / procesos (utilizando una tabla de base de datos con la que podría procesar unos pocos cientos por segundo y procesando con múltiples hilos es bastante difícil ya que un proceso tenderá a bloquear la tabla de cola de mensajes)
  • necesita comunicarse entre diferentes sistemas usando diferentes bases de datos (para que no tenga que repartir el acceso de escritura a su base de datos de sistemas a otras personas en diferentes equipos, etc.)

Para sistemas simples con una sola base de datos, equipo y requisitos de rendimiento bastante modestos, seguro, use una base de datos. Use la herramienta adecuada para el trabajo, etc.

Sin embargo, donde las colas de mensajes brillan es en organizaciones grandes donde hay muchos sistemas que necesitan comunicarse entre sí (y por lo tanto no desea que una base de datos comercial sea un punto central de falla o lugar de la versión infierno) o cuando tiene requisitos de alto rendimiento.

En términos de rendimiento, una cola de mensajes siempre superará una tabla de base de datos, ya que las colas de mensajes están diseñadas específicamente para el trabajo y no dependen de bloqueos de tabla pesimistas (que son necesarios para la implementación de una base de datos de cola) para equilibrar la carga. y las buenas colas de mensajes realizarán una carga ansiosa de mensajes en colas para evitar la sobrecarga de red de una base de datos .

Del mismo modo, nunca usaría una base de datos para equilibrar la carga de las solicitudes HTTP en sus servidores web, ya que sería demasiado lento. Si tiene requisitos de alto rendimiento para su equilibrador de carga, tampoco usaría una base de datos.