通过不可靠的网络实时 SQL 插入
Real-time SQL Inserts Over Unreliable Network
我需要每分钟通过 "unreliable" Internet 连接向基于云的数据库插入 5K 条记录(同时来自不同的 10 个系统,全部 运行)。 Internet 连接为 10 MB,我的应用程序需要每月容忍一次中断,最多 1 天。我的应用 运行 位于亚洲的一家工厂,IT 技术较差 infrastructure/support,这是不可靠和长期中断的根源。
能否请您推荐如何在不丢失数据的情况下执行此操作?
我想到的解决方案:
在内存中(或简单的文本文件)保留插入队列,每次插入失败时将其放入队列中,稍后再试。我不喜欢这样,因为我必须重新设计我的应用程序以使用并行循环来处理此问题,以免打乱主循环的计时。
使用消息 broker/queue(如 RabbitMQ)。我不喜欢这样,因为虽然将 SQL 语句放入代理很容易,但我宁愿不必编写额外的服务来轮询代理、执行 sql 语句、处理错误等. 我知道 Mule ESB 可以完成所有这些工作,但它的设置看起来很复杂。
数据库复制。我实际上需要 N:1 (合并)复制,我认为除了 MS SQL 服务器之外的任何主要数据库都不支持它,因为它的复杂性我宁愿不必处理。我也可能需要在这样的中断后重新启动数据库并等待它赶上,然后再执行任何不希望的写入。
还有其他解决方案吗?谢谢
我决定在本地实例和云实例之间使用 replicated 消息代理 (RabbitMQ)。然后我将使用队列中的 JSON 数据并将其存储在数据库中(JSON -> Object -> ORM -> DB)。
虽然这确实增加了相当大的复杂性,但事实证明我需要与另一个应用程序进行双向通信,所以这是值得的。
我需要每分钟通过 "unreliable" Internet 连接向基于云的数据库插入 5K 条记录(同时来自不同的 10 个系统,全部 运行)。 Internet 连接为 10 MB,我的应用程序需要每月容忍一次中断,最多 1 天。我的应用 运行 位于亚洲的一家工厂,IT 技术较差 infrastructure/support,这是不可靠和长期中断的根源。
能否请您推荐如何在不丢失数据的情况下执行此操作?
我想到的解决方案:
在内存中(或简单的文本文件)保留插入队列,每次插入失败时将其放入队列中,稍后再试。我不喜欢这样,因为我必须重新设计我的应用程序以使用并行循环来处理此问题,以免打乱主循环的计时。
使用消息 broker/queue(如 RabbitMQ)。我不喜欢这样,因为虽然将 SQL 语句放入代理很容易,但我宁愿不必编写额外的服务来轮询代理、执行 sql 语句、处理错误等. 我知道 Mule ESB 可以完成所有这些工作,但它的设置看起来很复杂。
数据库复制。我实际上需要 N:1 (合并)复制,我认为除了 MS SQL 服务器之外的任何主要数据库都不支持它,因为它的复杂性我宁愿不必处理。我也可能需要在这样的中断后重新启动数据库并等待它赶上,然后再执行任何不希望的写入。
还有其他解决方案吗?谢谢
我决定在本地实例和云实例之间使用 replicated 消息代理 (RabbitMQ)。然后我将使用队列中的 JSON 数据并将其存储在数据库中(JSON -> Object -> ORM -> DB)。
虽然这确实增加了相当大的复杂性,但事实证明我需要与另一个应用程序进行双向通信,所以这是值得的。