【发布时间】:2017-01-12 15:47:37
【问题描述】:
对于full-text search(在ElasticSearch)和Firebase不容易支持的其他类型的查询,我们需要保持我们的Firebase数据与其他databases同步。
这需要尽可能接近实时,我们不能只导出Firebase JSON 的夜间转储或类似的东西,除非这会变得相当大。
我最初的想法是运行一个Node.js 客户端来监听child_changed、child_added、child_removed 等...所有主列表的事件,但这可能会有点笨拙,会不会如果客户端在一段时间后重新连接,这是一种可靠的同步方式吗?
我的下一个想法是维护一个“项目更改”事件列表,并在每次创建/更新项目时写入该列表,类似于Firebase work queue 示例。队列可以包含已更改数据的完整路径,工作人员只需使用该路径并相应地更新本地数据库。
这里的问题是,使更新的每一位代码都必须记住写入此队列,否则两个系统将不同步。不过,一些代理代码应该不会太难写。
有没有其他人做过类似的事情并取得了成功?
【问题讨论】:
-
我认为您的代理想法最有意义。我们肯定见过人们运行 node.js 进程的情况,这些进程存储了他们最后一次写入数据的时间戳。如果进程崩溃,您可以通过查看您写入的最后一个时间戳来进行初始导入。
-
@rlivsey 你想出解决方案了吗?我需要解决同样的问题,我正在考虑使用 Elastic Search。任何有关您体验的信息将不胜感激。
-
我们解决了这个问题,但在我们的例子中,设置是不同的——我们很高兴拥有两个数据库,每个数据库都有不同的目的。我们有 MongoDB (authoritative store) 和 Firebase (real-time store),它们不完全相同,每个都保存它需要的数据。并非 Firebase 中的所有实时数据都需要写入 MongoDB。反之亦然 - 很多非实时数据不在我们的 Mongo 上。只有 片段 的数据被同步:client --> nodejs --> Mongo + Firebase。所以我想问题是 - 你真的需要同步所有数据吗?