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

时间:2019-03-10 12:40:16

标签: 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);
};

上述两种解决方案之间是否有重要区别?哪个更有效率?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

第一种方法似乎更加分离和明确,这可能会使其他开发人员更容易理解。