mySQL权威数据库 - 与Firebase结合使用

Ami*_*ari 5 mysql synchronization data-synchronization angularjs firebase

我们已经通过PHP Laravel 构建了一个LAMP-stack API 应用程序.这当前使用本地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.

Fra*_*len 3

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

我将坚持您在评论中提供的用例:

想象一下,您有一个存储在 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