聚合物应用中的firebase数据库结构 - 性能和用户/组/公共访问



计划的应用程序:

我想与聚合物进行网络应用程序&用户可以在其中创建"卡片"(例如在Android上的Google Now中)并与团体/公共共享的Firebase。卡集由卡片列表组成(需要轻松对列表进行排序)。卡片列表包含以某种方式包含内容的卡数据。

燃料结构:

我正在阅读有关Firebase中构造数据的很多内容,并提出了以下结构(以保持其平坦的方式)。拆分的原因是,我可能想拥有大量的"卡集",然后加载概述。

|-user
   |-cardset
     |-UID
        |-title
        |-category
        |-reference-to-cardlist-UID
     |-UID
        |-....
   |-cardlist
     |-UID
        |-1
          |-reference-to-carditem-UID
          |-order
          |-visible
        |-2
          |-...
   |-carditem
     |-UID
        |-title
        |-content
     |-UID
        |....

如果用户想共享,我会在" public"或" group"节点而不是"用户"中复制此内容。

聚合物元素结构:

至于聚合物中的元素结构,我将在相同结构中创建数据加载元素,我可以以所需的方式加载节点:

data-card-set.html
data-card-list.html
data-card-item.html

(即使我将它们组合成一个,也不会减少我在父母中启动元素的次数)在父母中,他们将彼此互动并加载数据以显示它。

问题

  1. fb:这是Firebase的合理平坦结构吗?
  2. fb:是用户/公共/组数据的正确方法吗?
  3. 聚合物:这是加载数据的正确方法吗?似乎很多元素和许多请求发送到数据库,但我想避免从DB中加载太多数据。

在我可以在线找到的大多数示例(例如todo-data),用户的所有数据都会立即加载。我想避免,例如一个用户可能有很多卡片。

非常感谢您的反馈!

tim

我发现NoSQL难以理解的是"写作很便宜,阅读很昂贵"。在您的示例中,这意味着您的卡特(带有心脏名单)还应包括Cardlist的所有必要数据(以及相关卡项目数据(如果需要)):

    Cardset
      Reference to cardlist uid
      Cardlist name
      Cardlist visible
      Card item uid
        Card item title
        Card item content
      Card item uid
        Card item title
        Card item content
      Reference to cardlist uid
  Cardlist name
  Cardlist visible
  Card item uid
    Card item title
    Card item content

这意味着您必须在多个位置编写相同的信息。例如,卡项目的标题写给:卡项目本身所有使用此项目的心脏列表所有使用CARDLIST的卡集,其中包含卡项目

您多次编写此信息,因为"写作很便宜"。现在,使用这种数据架构读取很简单,您只需要读一次卡组,就可以显示要显示的所有数据。您必须确定要在最高级别显示的数据(卡特)以及用户单击儿童(CRADLIST)时检索的其他数据。当用户选择心脏列表时,您将检索该心脏列表的新数据,包括儿童的数据(卡项)。同样,您必须确定需要哪些数据来显示有关孩子的信息。如果卡特不需要显示孙子(卡项目)中的任何数据,那么您就不需要存储有关孙子到卡特的任何数据,只有与Cardlist有关的数据。

因此,再一次,您必须将数据写入多个位置,以便仅通过一个请求快速阅读。这是SQL和NOSQL之间的主要区别。更新数据要困难得多,因为它存储在许多地方。这是您必须为快速应用支付的费用。

感谢Grohjy。因此,我了解的是我需要查看我的"用例"。我现在重新结构它:

卡特到表 - 列表 =>这是加载卡片的概述列表卡片 - 载荷 - cardset-content =>这是用所有项目加载卡片的 - 无论如何我都需要所有项目,我不介意它们是否为"嵌套"

这有意义吗?

也在这里描述:使用大数据集的firebase的性能

|-user
   |-cardset-TO-SHOW-LIST-ONLY
     |-UID
        |-title
        |-category
        |-reference-to-cardlist-UID
     |-UID
        |-....
   |-cardset-LOAD-CARDSET-WITH-CONTENT
     |-UID
        |-title
        |-category
        |-carditems
          |-carditem-UID
             |-title
             |-content
          |-carditem-UID
             |....
     |-UID
        |-....

逐步加载?

我仍然看到的唯一性能问题是,我需要等待以获取整个"卡塞特载荷 - 符合意见",而无法从服务器中逐一加载",至少显示一些首先。还是有办法?

最新更新