Бессерверное решение делает веб-приложения и мобильные приложения такими быстрыми.
С serverless нет необходимости настраивать сервер (вероятно, глючный и небезопасный) для вашего логического центра и центра принятия решений вашего приложения.
Но, как вы знаете, этого недостаточно, потому что вам нужно хранить свои данные в базе данных.
Google основал Firebase в 2012 году, и я помню, что до этого был такой же сервис Parse. В любом случае, позвольте мне объяснить случай в Firestore (на JS).
В RDMS вы можете объединять таблицы и получать фантастический результат, но в Firestore нет никакой концепции объединения в Firestore (и других базах данных с документацией)!
Если вы знакомы с ReactJS (или React Native), вы можете использовать ES6 и прекрасные новые функции, такие как find, map, forEach и reduce.
Но есть одна тонкая вещь, которую вы никогда не должны забывать: новые функции итерации, не ожидающие результата, если вы использовали асинхронное ожидание в своем коде, вы должны вернуться слишком много лет назад :(
Например:
Представьте, что у вас есть коллекция пользователей и транзакций. Вы хотели бы зациклить массив пользователей и получить связанные данные для каждого пользователя в коллекции транзакций, как показано ниже:
firebase.firestore().collection("users").get().then((usersSnapshot)=>{
if(usersSnapshot.size>0){
let usersArr=usersSnapshot.docs.map((x)=>{return {...x.data(),id:x.id}});
usersArr.map((user)=>{
firebase.firestore().collection("transactions").where("userId","==",user.id).get().then((transactionsSnapshot)=>{
if(transactionsSnapshot.size>0){
user.transactions = [...transactionsSnapshot.docs.map((x)=>{return {...x.data(),id:x.id}})];
//will call on every user! so dirty and expensive
this.setState({
users:usersArr
})
}
})
})
}
})
НО это не лучший способ установить свое состояние для каждого пользователя, это значит отображать страницу для каждого пользователя!
Итак, позвольте мне внести небольшие изменения в приведенный выше блок кода.
firebase.firestore().collection("users").get().then(async (usersSnapshot)=>{
if(usersSnapshot.size>0){
let usersArr=usersSnapshot.docs.map((x)=>{return {...x.data(),id:x.id}});
let userInx = 0;
for(const user of usersArr){
await firebase.firestore().collection("transactions").where("userId","==",user.id).get().then(async (transactionsSnapshot)=>{
if(transactionsSnapshot.size>0){
usersArr[userInx].transactions = [...transactionsSnapshot.docs.map((x)=>{return {...x.data(),id:x.id}})];
}
userInx++;
});
}
this.setState({
users:usersArr
})
}
})
ДА!!!
результат:

Как правило, я использую React-Redux в базовых веб-/мобильных приложениях ReactJS, но я не предпочитаю использовать Redux в приложениях, созданных Firebase, потому что я чувствую, что мое хранилище обновлений всегда остается в Firestore и нет необходимости хранить данные в мой местный магазин редуксов.
Удачного взлома!