javascript - 在 firebase 中将数据存储到多个引用的最有效方法是什么?

标签 javascript firebase firebase-realtime-database

让我们看看接下来的情况:

如果我们创建一个用户,我们必须为该用户创建一个新客户端、一个新用户以及一个新的初始项目。

db = {
  users: {},
  clients: {},
  projects: {}
};

const usersRef = firebase.database().ref("/users");
const clientsRef = firebase.database().ref("/clients");
const projectsRef = firebase.database().ref("/projects");

为了保持代码干净、独立,我们可以创建三个函数:

const newUserToDb = name => {
  const newUser = usersRef.push();
  newUser.set({name});
};

const newClientToDb = name => {
  const newClient = clientsRef.push();
  newClient.set({name});
};

const newProjectToDb = name => {
  const newProject = projectsRef.push();
  newProject.set({name});
};

const createUserToDb = (userName, clientName, projectName) => {
  newUserToDb(userName);
  newClientToDb(clientName);
  newProjectToDb(projectName);
};

要将所有更改集中在一处,但要减少代码的分隔:

const createUserToDb = (userName, clientName, projectName) => {
  const userId = usersRef.push().key;
  const clientId = clientsRef.push().key;
  const projectId = projectsRef.push().key;

  const updates = {};

  updates[`/users/${userId}`] = userName;
  updates[`/clients/${clientId}`] = clientName;
  updates[`/projects/${projectId}`] = projectName;

  firebase.database().ref().update(updates);
};

上述两种解决方案之间有什么重要区别吗?哪个效率更高?

最佳答案

与上述方法的重要区别在于原子性。在第一种情况下,单个集合或文档更新将成功或失败,而不影响其他更新。在第二种情况下,所有更新都会成功,否则不会成功。

我认为效率不是用于比较上述场景的正确术语,它更多的是业务/用例,它将定义您需要使用哪一个

关于javascript - 在 firebase 中将数据存储到多个引用的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55087773/

相关文章:

javascript - 如何使用 firebase 和 angularfire 计算数组中对象的总值?

firebase - Firebase 上的通配符查询?

javascript - Jquery计算旋转矩形的边界框

javascript - 处理 Javascript 日期的时区

ios - 在 iOS 中检索到推送通知,但在 Firebase 中检索不到

ios - Firebase 突然崩溃并显示 "RepoExists"消息

java - 如果 firebase 数据库没有子值,则开始下一个 Activity

javascript - 使用 Promise 传递参数 VUE

javascript - 将 Chrome 开发人员工具配置文件堆字符串分配给 JavaScript 变量

javascript - 如何在 Google Chrome 开发者工具中关闭 fancybox 元素?