据我了解,备份 Firestore 数据库会导致读取每个文档。这看起来非常昂贵。
例如,假设我有一个有 1000 个用户的笔记应用程序,每个用户每天创建 100 个文档并阅读 100 个文档。每月的费用为:
reads = 1000 * 100 * 30 * 0.036/100000 = $1.08 per month
writes = 1000 * 100 * 30 * 0.108/100000 = $3.24 per month
Run Code Online (Sandbox Code Playgroud)
这看起来非常合理,甚至很便宜。
但假设我想创建每日备份,以确保客户在发生某种故障时不会丢失笔记。
使用 1 年后,每月每日备份的费用将为:
reads = 1000 * 100 * 365 * 30 * 0.036/100000 = $394.20 per month
Run Code Online (Sandbox Code Playgroud)
而且随着时间的推移,它只会变得越来越贵!
有人对如何处理这个问题有什么建议吗?我知道实时数据库的备份只需要存储成本,但我认为对于这种类型的应用程序,除了备份成本之外,Firestore 在所有方面都更好。
有没有办法将createAsyncThunk与 Firebase 侦听器一起使用,例如firestore.collection.onSnapshot?
它可能不起作用,因为 onSnapshot 的工作方式(它是一个侦听器,每次 firestore 更新时都会接收数据并触发回调,并返回一个取消订阅侦听器的函数)。我尝试实现 createAsyncThunk 但无法弄清楚。
这是我当前的 thunk 实现,它确实有效:
const listenerUnsubscribeList = [];
export function fetchProjects() {
return dispatch => {
dispatch(fetchProjectsPending());
const unsubscribe = firestore
.collection('projects')
.onSnapshot(
snapshot => { dispatch(fetchProjectsFulfilled(snapshot.docs.map(doc => ({ id: doc.id, ...doc.data() })))) },
error => { dispatch(fetchProjectsError(error)) },
);
listenerUnsubscribeList.push(unsubscribe);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我对 createAsyncThunk 的尝试,但不起作用。我得到了database/fetchProjects/pending,database/fetchProjects/fulfilled但有效负载是undefined
const listenerUnsubscribeList = [];
export const fetchProjects = createAsyncThunk(
'database/fetchProjects',
async (_, thunkAPI) => {
const …Run Code Online (Sandbox Code Playgroud)