我什么时候应该使用firebase的实时数据库?

时间:2018-05-30 04:10:13

标签: ruby-on-rails firebase firebase-realtime-database architecture

我想利用Firebase的服务,例如身份验证和实时数据库。它使与前端客户端的集成变得非常容易。但是,我正在努力处理数据库部分。我仍然想要一个关系数据库,所以我可以更轻松地与我的其他数据进行交互,所以我想到了Rails和Postgres。我知道Rails有ActionCable,但我想在firebase中使用更多的服务。我想让我的前端客户端与我的Rails应用程序通信,然后将Rails保存到Postgres,然后以适当的NoSQL格式为Firebase的DB转换数据。这是使用Firebase的正确方法吗?我怎样才能利用Firebase的实时数据库而不将其作为事实的来源?

2 个答案:

答案 0 :(得分:2)

我认为你可以做到。我通常使用事件源架构来做类似的事情 我们假设我有一个名为User的课程,我想让它们与firebase上的user集合保持同步。为此,我会在User

上放一个听众

<强>模型/ user_observer.rb

class UserObserver < ActiveRecord::Observer
  include Wisper::Publisher

  def initialize
    subscribe(FirebaseUserPublisher, async: true)
    super
  end

  def after_save(user)
    publish_changes_to_firebase(user)
  end
end

这样,每次更改/创建用户时,更改将在您的firebase上反映出 async FirebaseUserPublisher类将负责处理。

请注意,这意味着最终一致性:如果FirebaseUserPublisher失败,则您的数据不同步

答案 1 :(得分:2)

这基本上就是我们在大型协作网络应用程序中所做的事情。我们有一个基于Java的后端,它可以监视Firebase RTDB中的特定键以进行更改/添加/删除,并做出相应的响应。它使用来自Firebase的数据,然后为我们的Web应用程序中当前活动的每个工作区启动一个新的Apache Mesos执行程序(具有“存在”),每个实例都有自己的执行程序使用的PostgreSQL数据库。该数据库使用分布在我们的RTDB周围的数据进行填充。

当我们希望让后端为客户端执行长时间运行的计算或任务时,我们会将一些数据写入特定位置(“dbRequests”),概述我们想要的任务和一些用户定义的参数。后端执行程序读取请求然后关闭并生成工作服务以执行我们的任务。完成后,它会将新数据作为子项写入客户端提取并显示给用户的原始请求(或者,如果是报告,则使用计算数据打开包含渲染图表的新选项卡)。通常,它适用于我们的用例:许多在数字工作区中工作的连接用户,每个连接的客户端都有实时更新。

我们使用此模型遇到的最大问题是运行数据迁移脚本,并管理我们在RTDB中拥有的所有数据。我猜想,因为它本质上是一个巨大的JSON结构;)。