Database-as-IPC
In computer programming, Database-as-IPC may be considered an anti-pattern where a disk persisted table in a database is used as the message queue store for routine interprocess communication or subscribed data processing. If database performance is of concern, alternatives include sockets, Network Socket, or Message Queue.
British computer scientist, Junade Ali, defined the Database-as-IPC Anti-Pattern as using a database to "schedule jobs or queue up tasks to be completed", noting that this anti-pattern centres around using a database for temporary messages instead of persistent data.[1]
Controversy
The issue arises if there is a performance issue, and if additional systems (and servers) can be justified. In terms of performance, recent advancements in database systems provide more efficient mechanisms for signaling and messaging, and database systems also support memory (non-persisted) tables.
There are databases with built-in notification mechanisms, such as Postgres,[2][3] SQL Server,[4] and Oracle.[5] These mechanisms and future improvements of database systems can make queuing much more efficient and avoid the need to set up a separate signaling or messaging queue system along with the server and management overhead.
While MySQL doesn't have direct support for notifications,[6] some workarounds are possible. However, they would be seen as non-standard and therefore more difficult to maintain.[7]
Rather than being called an anti-pattern, this could be more suitably considered as a design choice to be made on a case by case basis.
References
- Ali, Junade (September 2016). Mastering PHP Design Patterns. Birmingham, England: Packt Publishing Limited. pp. 45–46. ISBN 978-1-78588-713-0. Retrieved 11 December 2017.
- Postgresql.org 2020 September 09
- Postgresql.org 2020 September 09
- Nic Ferrier. 2018 Aug 15
- docs.oracle.com. 2020 September 09
- MariaDB Jira. 2020 September 09
- 5 subtle ways you’re using MySQL as a queue, and why it’ll bite you Schwartz, Baron. 2011 September 14.