Firebase数据结构和要使用的网址

时间:2016-08-08 21:46:58

标签: firebase data-structures firebase-realtime-database nosql

我是firebase的新手,想尝试一个简单的混合客户端应用程序 - android,js。我有一个users表和一个tasks表。我想到的第一个问题是,如何存储它们(以及如何存储它们)?例如,基于tasks表,我应该使用:

  1. /tasks/{userid}/task1/tasks/{userid}/task2,...
  2. 或者

    1. /{userid}/tasks/task1/{userid}/tasks/task2,...
    2. 下一个问题,基于第一个问题的答案 - 为什么要使用任何版本?

      在我看来,第一个版本很好,因为域名是分开的。 第二种方法很好,因为数据存储在 per-user 中,这可能会使一些操作更容易。

      有任何想法/建议吗?

      更新:对于目前的情况,请说有以下功能:

      • 显示每个用户的任务列表
      • 将新任务添加到列表中
      • 按用户编辑/删除任务。

      简单操作。

1 个答案:

答案 0 :(得分:1)

这个答案可能会迟到,但这是我对Firebase一年经验后对这个问题的看法。

  1. 对于您的第一个问题,它完全取决于您的应用程序将主要阅读哪些数据以及您希望读取数据的方式和顺序(类似排序)。
  2. 你的第一个数据结构提议,即“/ tasks / {userid} / task1”,“taks / {userid} / task2”......如果应用程序经常按照用户的意愿读取任务,那就很好了如果我可以调用任何任务的“属性”,可能会增加对数据进行排序的优势。

    说每个任务都有一个优先级属性,

      // get all of a user's tasks with a priority of 25.
      var userTasksRef = firebase.database().ref("tasks/${auth.uid}");
      userTasksRef.orderByChild("priority").equalTo(25).on(
        "desired_event",
        (snapshot) => {
          //do something important here.
      });
    

    2。我会高度建议不要使用第二种方法,因为通常大多数(如果不是所有)与该用户关联的数据都将存储在“/ {userid} /”节点下并使用firebase的机制,如果您需要的话在该路径级别有多个数据,它将要求您获取与该用户节点相关的所有其他数据(任务和包含的任何其他数据)的数据。我不希望我的数据库出现这种情况。尽管如此,这种方法仍然允许您按照用户存储任务或使多个RESTfull请求并在数据后收集所需的数据数据。如果遇到这种情况,建议扇出数据结构。如果在应用程序中不存在用例的情况下完全有效的数据结构,其中需要在路径的第一级的数据中并且仅需要该数据,而是在该路径级别处具有所有数据的数据块。该级别的派生路径(即第2个第3级......)。

    根据您所描述的用例,如果您提供的数据库结构是详尽无遗的数据库结构,我会说这还不足以涵盖您的用例。 建议阅读文档here。关于他们的伟大和详尽的文件。

    作为一个选择,第一种方法是在NoSQL中更好地建模这个数据用例的方法,更准确地说是Firebase的NoSQL数据库。