Firebase快照可以扩展吗?

时间:2016-04-10 08:06:18

标签: firebase firebase-realtime-database nosql

我正在构建一个实时协作应用。总文档大小最多可达100多MB,但文档中的逻辑分区最多可达10 MB以上。

最好的比喻类似于Photoshop,其中可能有数十层图像,但每层可能有数百万像素需要同步。用户通常只会修改我的应用中单个图层的一部分。我想协同编辑这样大小的文档。 Firebase有一个绘图应用程序,但它的规模很小。

理想情况下,我希望收到添加/删除/更新集合中各个记录的事件,而不是收回整个集合。在这个例子中,我希望只能接收更改的像素。

唯一的方法是为每个文档创建一个唯一的集合吗?或者我做错了什么或者理解错了?任何好的建筑指针/建议?

谢谢, 布雷特

1 个答案:

答案 0 :(得分:2)

这个问题非常开放,您应该提供一些代码,说明您尝试过的内容以及Firebase数据结构。

话虽如此,答案是肯定的,可以做到;但还有一些问题需要克服。

如果您的要求是仅使用已更改的像素更新协作者,那么如果要存储整个图像的10Mb切片,这将是一个挑战。

如果slice_0中的像素5000和5001发生了变化,则需要将整个10Mb切片写入Firebase(因为它存储在单个节点中),然后通过观察事件通知您的协作者然后他们会下载那个10Mb切片(哎哟)

由于它不够精细,所以推动了大量数据。

更简单的解决方案是分解数据并存储元素,例如取一个字符串; "你好,世界"

my_string
  element_00: "H"
  element_01: "e"
  element_02: "l"
  ...
  element_11: "d"

如果element_02发生变化,使用此结构,对所有协作者来说都是一个简单的更新。但是,您现在有数百万个节点存储单个数据。

扩展该结构,您需要确定数据切片与性能和可扩展性的大小对您的应用程序有效:

my_string
  element_00
      data: "Hel"
      start: 0
      end: 2
  element_01:
      data: "lo,"
      start: 3
      end: 5
  element_02
      data: " Wo"
      start: 6
      end: 8
  element_03
      data: "old"
      start: 9
      end: 11

现在,如果element_02发生变化,它可以更容易管理,并且处理的节点要少得多,并且节点很容易找到,因为每个存储3个值,并且您知道它们通过开始和结束的值。

还有许多其他结构可以工作:例如:消除开始和结束子节点,并通过等式计算节点名称以获得所需的结构。例如; node_name = int(pixel_#/ 3),因此字符3(l)将是element_01 via 3/3 = 01。

我们不知道应用程序的范围,因此我建议您使用100Mb文件,制作一些代码和Firebase结构并进行旋转。

您可以尝试切片到1Mb切片(因此会有100个切片)并查看性能如何并从那里进行调整。