A buffered message queue architecture for managing messages in a database
management system is disclosed. A "buffered message queue" refers to a
message queue implemented in a volatile memory, such as a RAM. The
volatile memory may be a shared volatile memory that is accessible by a
plurality of processes. The buffered message queue architecture supports
a publish and subscribe communication mechanism, where the message
producers and message consumers may be decoupled from and independent of
each other. The buffered message queue architecture provides all the
functionality of a persistent publish-subscriber messaging system,
without ever having to store the messages in persistent storage. The
buffered message queue architecture provides better performance and
scalability since no persistent operations are needed and no UNDO/REDO
logs need to be maintained. Messages published to the buffered message
queue are delivered to all eligible subscribers at least once, even in
the event of failures, as long as the application is "repeatable." The
buffered message queue architecture also includes management mechanisms
for performing buffered message queue cleanup and also for providing
unlimited size buffered message queues when limited amounts of shared
memory are available. The architecture also includes "zero copy" buffered
message queues and provides for transaction-based enqueue of messages.