我们已经通过PHP Laravel构建了一个LAMP堆栈API application。这当前使用本地mySQL实例。我们大多在AngularJS中实现了视图。
为了使用Firebase,我们需要在mySQL中的权威商店与Firebase上存在的任何相关内容之间同步数据,尽可能接近实时。这意味着应用程序的其他非实时部分且不使用Firebase的部分也可以提供最近输入系统的新内容。
我知道Firebase本质上是云中的noSQL数据库。我的问题是 - 如何编写包装器或将我的Firebase的规范版本同步到我的记录数据库中的方法 - mySQL?
更新回答 - 我们的最终决定 - 放弃Firebase作为选项
我们已经决定反对这一点,因为我们可以在同一台服务器上轻松拥有一个socket.io实例,并且与mySQL的延迟极低,这样两者就可以保持同步。当localhost上可以存在资源和端点时,无需浏览Web。它还为我们提供了在没有任何互联网连接的情况下运行我们的应用程序的选项,这对于我们向大公司销售内部部署设备非常重要。
像Firebase这样的noSQL同步平台实际上只是一个临时存储,可以半实时地提高读/写速度。如果他们试图进入“我们也坚持一切为你”的业务 - 这是一个完全不同的要求,需要更多的承诺。
mySQL和Firebase之间最终一致性的保证对于首先获得正确性更为重要 - 以防止出现问题。此外,RDMS对我们的应用程序至关重要 - 它是在我们的分析/数据映射中攻击大量数据密集问题的唯一方法 - 世界上大多数人仍然使用像MySQL这样的RDMS等非常有力的理由。您可以制作那些非常可靠 - 通过Amazon RDS和Google Cloud SQL。
除了扩展Firebase实际为我们解决的实时同步之外没有特别的问题,其他开源框架尚未解决。如果他们的JS lib实际上处理了脱机场景(当你开始离线时),我可能已经考虑过了,但它还没有这样做。
所以,YMMV - 但在我们的具体情况下,由于上述原因,我们不考虑Firebase。
答案 0 :(得分:3)
整个主题非常广泛,绝对过于宽泛,无法提供简单的答案。
我会坚持您在评论中提供的用例:
想象一下,你有一个存储在mySQL中的清单,包含一些属性和一组步骤。这些步骤存储在另一个表中。当有人在Firebase上更新此核对清单时 - 我如何同步mySQL?
如果您坚持将Firebase和mySQL用于此用例,我会:
将Firebase设置为工作队列:var ref = new Firebase('https://my.firebaseio.com/workqueue')
让客户将工作项目推送到Firebase:ref.push({ task: 'id-of-state', newState: 'newstate'})
设置一个(nodejs)服务器:
ref.on('child_added'
)有关Firebase顶部工作队列的示例,请参阅此github项目:https://github.com/firebase/firebase-work-queue