我是firebase的新手,想尝试一个简单的混合客户端应用程序 - android,js。我有一个users
表和一个tasks
表。我想到的第一个问题是,如何存储它们(以及如何存储它们)?例如,基于tasks
表,我应该使用:
/tasks/{userid}/task1
,/tasks/{userid}/task2
,... 或者
/{userid}/tasks/task1
,/{userid}/tasks/task2
,... 下一个问题,基于第一个问题的答案 - 为什么要使用任何版本?
在我看来,第一个版本很好,因为域名是分开的。 第二种方法很好,因为数据存储在 per-user 中,这可能会使一些操作更容易。
有任何想法/建议吗?
更新:对于目前的情况,请说有以下功能:
简单操作。
答案 0 :(得分:1)
这个答案可能会迟到,但这是我对Firebase一年经验后对这个问题的看法。
你的第一个数据结构提议,即“/ 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数据库。