【问题标题】:Real-time SQL Inserts Over Unreliable Network不可靠网络上的实时 SQL 插入
【发布时间】:2015-02-10 16:01:59
【问题描述】:

我需要通过“不可靠”的 Internet 连接每分钟插入 5K 条记录到基于云的数据库(来自同时运行的不同 10 个系统)。 Internet 连接为 10 MB,我的应用程序需要每月容忍一次中断,最长可达 1 天。我的应用在亚洲的一家工厂运行,IT 基础设施/支持很差,这是不可靠和长时间停机的根源。

您能否推荐如何在不丢失数据的情况下执行此操作?

我想到的解决方案:

  1. 保留一个内存(或简单文本文件)插入队列,每次插入失败时将其放入队列中,以便稍后重试。我不喜欢这样,因为我必须重新设计我的应用程序,让它有一个并行循环来处理这个问题,以免影响主循环的时间。

  2. 使用消息代理/队列(如 RabbitMQ)。我不喜欢这样,因为虽然将 SQL 语句放入代理很容易,但我宁愿不必编写额外的服务来轮询代理、执行 sql 语句、处理错误等。我知道 Mule ESB它可以完成所有这些,但设置起来看起来很复杂。

  3. 数据库复制。我实际上需要 N:1(合并)复制,我认为除了 MS SQL Server 之外的任何主要数据库都不支持它,由于复杂性,我宁愿不必处理。在这样的中断之后,我还可能需要重新启动数据库并等待它赶上来,然后再执行任何更多的写入,这两者都是不可取的。

还有其他解决方案吗?谢谢。

【问题讨论】:

  • 如果您的网络连接不可靠,那么复制将如何解决任何问题?无论哪种方式,您的数据都必须通过该废话链接到主服务器。
  • 我已经澄清了我所说的不可靠的意思。

标签: cloud real-time merge-replication rdbms


【解决方案1】:

我决定在本地实例和云实例之间使用 replicated 的消息代理 (RabbitMQ)。然后,我将使用队列中的 JSON 数据并将其存储到数据库中(JSON -> Object -> ORM -> DB)。

虽然这确实增加了相当大的复杂性,但事实证明我需要与另一个应用程序进行双向通信,所以这是值得的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-09
    • 2011-04-06
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2012-12-26
    • 1970-01-01
    • 2011-08-20
    相关资源
    最近更新 更多