4

我们通过PHP Laravel构建了一个LAMP栈API application。这当前使用本地mySQL实例。我们主要在AngularJS中实现了视图。mySQL权威数据库 - 结合Firebase

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

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

更新来回答 - 我们的最终决定 - 开沟火力地堡作为一个选项

我们已经决定针对这一点,我们可以很容易地在同一台服务器上socket.io实例与极低的延迟连接mySQL,这样两者可以保持同步。当资源和端点可以存在于本地主机上时,不需要浏览网页。它还使我们可以选择在没有任何互联网连接的情况下运行我们的应用程序,如果我们向大公司销售内部设备,这一点非常重要。

像Firebase这样的NoSQL同步平台实际上只是一个临时存储,能够以半实时方式更快地读写数据。如果他们试图进入“我们也坚持一切为你”的业务 - 这是一个完全不同的问题,需要更多的承诺。

mySQL和Firebase之间最终一致性的保证对于事先排除问题更重要 - 防止出现问题。此外,RDMS对于我们的应用程序至关重要 - 它是在分析/数据映射中攻击大量数据严重问题的唯一方式 - 世界上大多数人仍然使用RDMS如mySQL等非常强大的原因。您可以制作那些非常可靠的 - 通过Amazon RDS和Google Cloud SQL。

除了扩展实时同步,Firebase实际为我们解决的其他开源框架尚未解决的问题,没有什么特别的问题。如果他们的JS库实际上处理离线场景(当你开始离线时),我可能会考虑它,但它现在还没有这样做。因此,YMMV - 但在我们的具体情况下,我们并没有考虑上述原因的Firebase。

+0

架构非常清晰。但我不确定你在问什么。你在寻找我们来验证这个架构吗?或者你在寻找写这个同步代码的建议吗?两者都是非常广泛的主题,不适合StackOverflow。如果您(也)共享您希望保留在Firebase中的一些mySQL数据结构,我们可能会更好地提供帮助。 – 2014-10-28 15:45:00

+0

@FrankvanPuffelen我会尝试为此添加颜色。想象一下,你有一个存储在mySQL中的清单,包含一些属性和一系列步骤。这些步骤存储在另一个表中。当有人更新Firebase上的清单时 - 我如何同步mySQL?我只想出于性能原因需要Firebase,而不是我系统中任何数据的主存储。因此,需要几乎实时的同步。回退选项总是在进行Firebase调用时发出一个将数据同步到mySQL的调用 - 但这似乎是一个主要的性能拖延。任何优雅的方式为这个非客户端? – 2014-10-29 11:24:24

+1

致你的更新:我已经想知道为什么你想要结合两个数据库。立即在mySQL中更新状态显然更简单。很高兴听到你们得出同样的结论。 – 2014-10-30 11:22:21

回答

3

整个话题非常广泛,绝对太宽泛以至于不能提供简单的答案。

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

假设你有存储在MySQL的一份清单,包括一些属性和一组步骤。这些步骤存储在另一个表中。当有人更新Firebase上的清单时 - 我如何同步mySQL?

如果坚持结合火力地堡和MySQL用于该用途的情况,我想:

  1. 设置你的火力地堡作为工作队列:var ref = new Firebase('https://my.firebaseio.com/workqueue')

  2. 有客户端推送工作项目进入火力地堡:ref.push({ task: 'id-of-state', newState: 'newstate'})

  3. 建立一个(的NodeJS)服务器:

    1. 监测工作队列(ref.on('child_added'
    2. 更新项目在MySQL数据库中
    3. 从队列中删除任务

的工作队列的例子来看看这个GitHub的项目在Firebase之上:https://github.com/firebase/firebase-work-queue

+1

伟大的答案弗兰克!但是我只会尝试将像Firebase这样的现代实时平台变成一个像MySquirrel这样的90年代后端的消息队列,如果有人把枪放在我头上的话。 – Kato 2014-10-30 05:00:38

+0

@Kato我有一个具体的和具体的需求mySQL在图片中。这不是关于我的偏好,而是关于需要对数据进行结构化分析的客户端和预先存在的分析。这个问题很长,与这个问题无关。 – 2014-10-30 07:54:08

+0

@ frank-van-puffelen谢谢你的回答,我已经接受了。那肯定会奏效。不幸的是,我们不使用Firebase的原因有所不同 - 我的答案已更新。这是在对这个非常广泛但重要的问题进行更多考虑之后。 – 2014-10-30 09:16:30