Сравнить структуры данных для блогового приложения Firebase - PullRequest
0 голосов
/ 17 апреля 2019
function writeNewPost(uid, username, picture, title, body) {
  // A post entry.
  var postData = {
    author: username,
    uid: uid,
    body: body,
    title: title,
    starCount: 0,
    authorPic: picture
  };

  // Get a key for a new Post.
  var newPostKey = firebase.database().ref().child('posts').push().key;

  // Write the new post's data simultaneously in the posts list and the user's post list.
  var updates = {};
  updates['/posts/' + newPostKey] = postData;
  updates['/user-posts/' + uid + '/' + newPostKey] = postData;

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

Код выше взят из официального документа Firebase.У меня вопрос, могу ли я использовать этот подход для реализации функции, подобной списку избранных?Если я использую этот подход, я получу следующую структуру данных:

 posts:{
      cYlevsDysdfsd:{
          author: 'John Doe',
          uid: sfIsdfNsAOQ,
          body: 'Hello world!',
          title: 'My first post',
          starCount: 0,
          authorPic: picture
      }
}


user-posts:{
    sfIsdfNsAOQ:{
          cYlevsDysdfsd:{
              author: 'John Doe',
              uid: sfIsdfNsAOQ,
              body: 'Hello world!',
              title: 'My first post',
              starCount: 0,
              authorPic: picture
          }
    }
}

user-favs:{
        Ysfdwefwezc:{
              cYlevsDysdfsd:{
              author: 'John Doe',
              uid: sfIsdfNsAOQ,
              body: 'Hello world!',
              title: 'My first post',
              starCount: 0,
              authorPic: picture
        }
    }
}

Мы можем видеть, что postData сообщения с идентификатором cYlevsDysdfsd повторяется снова и снова.Если у меня есть больше атрибутов в postData, этот подход займет больше места в базе данных.Поэтому мне интересно, будет ли лучше следующая структура данных:

user-posts:{
    sfIsdfNsAOQ:{
          cYlevsDysdfsd,
          second_Post_Id,
          third_Post_Id
    }
}

user-favs:{
    Ysfdwefwezc:{
          cYlevsDysdfsd,
          second_Fav_Post_Id,
          third_Fav_Post_Id
    }
}

Во втором подходе я сохраняю только postId в списке избранного и в списке сообщений пользователя.Когда мне нужны данные поста, я просто выбираю данные по пути /posts на основе postId, используя цикл for.Но этот подход требует больше http запросов.Какой способ лучше?

...