【问题标题】:mySQL authoritative database - combined with FirebasemySQL权威数据库——结合Firebase
【发布时间】:2014-12-24 00:30:54
【问题描述】:

我们通过 PHP Laravel 构建了一个 LAMP-stack API application。这当前使用本地 mySQL 实例。我们主要在 AngularJS 中实现视图。

为了使用 Firebase,我们需要在 mySQL 中的权威存储与 Firebase 上存在的任何相关内容之间尽可能接近实时地同步数据。这意味着应用的其他非实时且不使用 Firebase 的部分也可以提供最近输入系统的新鲜内容。

我知道 Firebase 本质上是云中的 noSQL 数据库。我的问题是 - 如何编写包装器或方法将 Firebase 的规范版本同步到我的记录数据库 - mySQL?

更新答案 - 我们的最终决定 - 放弃 Firebase 作为一个选项

我们决定不这样做,因为我们可以很容易地在同一台服务器上拥有一个 socket.io 实例,并以极低的延迟连接到 mySQL,这样两者就可以保持同步。当资源和端点可以存在于 localhost 上时,无需通过网络。它还让我们可以选择在没有任何互联网连接的情况下运行我们的应用程序,这对于我们向大公司销售本地设备非常重要。

像 Firebase 这样的 noSQL 同步平台实际上只是一个临时存储,它可以半实时地提高读/写速度。如果他们试图进入“我们也为您坚持一切”的业务 - 那是一个完全不同的要求,需要更多的承诺。

保证 mySQL 和 Firebase 之间的最终一致性更重要的是首先做好准备 - 以防止出现问题。此外,RDMS 对我们的应用程序至关重要 - 它是解决我们的分析/数据映射中大量数据密集型问题的唯一方法 - 世界上大多数人仍然使用像 mySQL 等 RDMS 有很强的理由。你可以那些也非常可靠 - 通过 Amazon RDS 和 Google Cloud SQL。

除了 Firebase 实际为我们解决的扩展实时同步之外没有其他具体问题,而其他开源框架尚未解决这些问题。如果他们的 JS 库实际上优雅地处理了离线场景(当您开始离线时),我可能已经考虑过了,但它还没有这样做。

所以,YMMV - 但在我们的具体情况下,由于上述原因,我们不考虑 Firebase。

【问题讨论】:

  • 架构清晰。但我不确定你在问什么。您是否在寻找我们来验证此架构?或者您是否正在寻找有关编写此同步代码的建议?两者都是相当广泛的主题,不适合 StackOverflow。如果您(也)分享一些您希望保留在 Firebase 中的 mySQL 数据结构,我们可能会更好地提供帮助。
  • @FrankvanPuffelen 我会尝试为此添加颜色。想象一下,您有一个存储在 mySQL 中的清单,由一些属性和一组步骤组成。这些步骤存储在另一个表中。当有人在 Firebase 上更新此清单时 - 我将如何同步 mySQL?我想要 Firebase 只是出于性能原因,而不是作为我系统中任何数据的主存储。因此,需要几乎实时的同步。后备选项是在进行 Firebase 调用时始终进行调用以将数据同步到 mySQL - 但这似乎是一个主要的性能拖累。这个非客户端有什么优雅的方式吗?
  • 致您的更新:我已经想知道您为什么要合并两个数据库。立即更新 mySQL 中的状态似乎更简单。很高兴听到你得出了同样的结论。

标签: mysql angularjs firebase synchronization data-synchronization


【解决方案1】:

整个主题非常广泛,绝对无法提供简单的答案。

我会坚持你在 cmets 中提供的用例:

假设您有一个存储在 mySQL 中的清单,由一些属性和一组步骤组成。这些步骤存储在另一个表中。当有人在 Firebase 上更新此清单时 - 我将如何同步 mySQL?

如果您坚持将此用例结合使用 Firebase 和 mySQL,我会:

  1. 将您的 Firebase 设置为工作队列:var ref = new Firebase('https://my.firebaseio.com/workqueue')

  2. 让客户端将工作项推送到 Firebase:ref.push({ task: 'id-of-state', newState: 'newstate'})

  3. 设置一个(nodejs)服务器:

    1. 监控工作队列 (ref.on('child_added')
    2. 更新 mySQL 数据库中的项目
    3. 从队列中移除任务

有关 Firebase 上的工作队列示例,请参阅此 github 项目:https://github.com/firebase/firebase-work-queue

【讨论】:

  • 很好的答案弗兰克!但我只会尝试将像 Firebase 这样的现代实时平台变成像 MySquirrel 这样的 90 年代后端的消息队列,前提是有人用枪指着我的头。
  • @Kato 我对 mySQL 有一个具体而具体的需求。这与我的偏好无关,而是客户的偏好和需要对数据进行结构化分析的预先存在的分析。这是一个与这个问题无关的长篇故事。
  • @frank-van-puffelen 感谢您的回答,我已接受。那肯定行得通。不幸的是,我们不使用 Firebase 的原因有很多——我的回答中对此进行了更新。这是在对这个非常广泛但重要的问题进行了更多考虑之后。
猜你喜欢
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多