【问题标题】:How to keep Firebase in sync with another database如何使 Firebase 与另一个数据库保持同步
【发布时间】:2017-01-12 15:47:37
【问题描述】:

对于full-text search(在ElasticSearch)和Firebase不容易支持的其他类型的查询,我们需要保持我们的Firebase数据与其他databases同步。

这需要尽可能接近实时,我们不能只导出Firebase JSON 的夜间转储或类似的东西,除非这会变得相当大。

我最初的想法是运行一个Node.js 客户端来监听child_changedchild_addedchild_removed 等...所有主列表的事件,但这可能会有点笨拙,会不会如果客户端在一段时间后重新连接,这是一种可靠的同步方式吗?

我的下一个想法是维护一个“项目更改”事件列表,并在每次创建/更新项目时写入该列表,类似于Firebase work queue 示例。队列可以包含已更改数据的完整路径,工作人员只需使用该路径并相应地更新本地数据库。

这里的问题是,使更新的每一位代码都必须记住写入此队列,否则两个系统将不同步。不过,一些代理代码应该不会太难写。

有没有其他人做过类似的事情并取得了成功?

【问题讨论】:

  • 我认为您的代理想法最有意义。我们肯定见过人们运行 node.js 进程的情况,这些进程存储了他们最后一次写入数据的时间戳。如果进程崩溃,您可以通过查看您写入的最后一个时间戳来进行初始导入。
  • @rlivsey 你想出解决方案了吗?我需要解决同样的问题,我正在考虑使用 Elastic Search。任何有关您体验的信息将不胜感激。
  • 我们解决了这个问题,但在我们的例子中,设置是不同的——我们很高兴拥有两个数据库,每个数据库都有不同的目的。我们有 MongoDB (authoritative store) 和 Firebase (real-time store),它们完全相同,每个都保存它需要的数据。并非 Firebase 中的所有实时数据都需要写入 MongoDB。反之亦然 - 很多非实时数据不在我们的 Mongo 上。只有 片段 的数据被同步:client --> nodejs --> Mongo + Firebase。所以我想问题是 - 你真的需要同步所有数据吗?

标签: database firebase


【解决方案1】:

对于搜索查询,可以直接与 ElasticSearch 集成;无需与辅助数据库同步。 Firebase 有一个 blog post about integrating 和一个库 Flashlight,可以快速轻松地完成此操作。

【讨论】:

  • 虽然这很有帮助,但我决定编写一小段代码将 Firebase 同步到 Mongo。更多信息请见this post
【解决方案2】:

另一种选择是使用logstash-input-firebase Logstash 插件来监听 Firebase 实时数据库中的变化,并使用elasticsearch 输出将数据实时转发到 Elasticsearch。

【讨论】:

  • 能否请您添加说明如何将插件安装到logstash?
猜你喜欢
  • 2017-09-01
  • 2010-09-14
  • 2010-10-29
  • 1970-01-01
  • 1970-01-01
  • 2013-06-12
  • 2021-01-03
  • 2011-07-14
  • 1970-01-01
相关资源
最近更新 更多