【发布时间】: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