我正在寻找一个可以推送数据的库或服务,每次都会有其他几列。现在,我正在使用IronMQ将json推送到队列,然后解析json并获取属性。但是,我想知道是否有一个队列库或服务可以让我将所有属性推送到单独的列中,以便稍后在队列中执行SQL查询。
我已经考虑过Python和Sqlite3来做到这一点(与AmazonSQS或IronMQ相比有什么区别),这将使这一点变得非常容易。
消息队列技术(如IronMQ、RabbitMQ、Amazon SQS等)和RDBMS(如Sqlite、SqlServer、PostGres等)之间的区别在于,如果您使用RDBMS表作为队列并希望允许查询,则必须自己管理LIFO队列过程。当数据库表是随机访问时,队列(除某些例外)强制执行LIFO过程,而不强制执行数据的插入、修改或删除方式或时间。这些规则在业务层中处理。(您提到使用Python和Sqlite。Sqlite将是您的队列/数据存储,Python应用程序将执行管理后进先出队列和随机查询的逻辑。)
RDBMS通常被用作中间消息存储,根据您的问题,我猜LIFO队列甚至没有那么重要,因为您似乎对随机访问最感兴趣。如果不了解更多你正在设计的东西,很难判断。但是,如果您想要像现成的队列和数据库一样工作的东西,请查看OracleAQ。
从链接页面:
因为Oracle Streams高级队列是在数据库中实现的表,高可用性、可扩展性的所有操作优势,以及可靠性也适用于队列数据。标准数据库支持恢复、重新启动和安全性等功能Oracle流高级队列。您可以使用数据库开发和用于监视队列的管理工具,如Oracle Enterprise Manager。与其他数据库表一样,可以导入和导出队列表。
可以使用标准SQL查询消息。这意味着你可以使用SQL访问消息属性、消息历史记录和有效载荷。使用SQL访问,您还可以进行审核和跟踪。全部的可用的SQL技术(如索引)可用于优化访问消息。
更多资源和进一步阅读:
- 数据库作为队列反模式(咆哮)
- 在数据库中构建高性能队列(的蓝图)