我希望实现一个'喜欢'系统,我知道因为我受到每秒一次更新的限制,我应该使用分布式计数器来实现这一点。 https://firebase.google.com/docs/firestore/solutions/counters
这个概念相对简单,基本上你只有一堆段(碎片),你可以把它们全部搞定。 然而,我没有得到的是当你去增加一个柜台时:
function incrementCounter(db, ref, num_shards) {
// Select a shard of the counter at random
const shard_id = Math.floor(Math.random() * num_shards).toString();
const shard_ref = ref.collection('shards').doc(shard_id);
// Update count in a transaction
return db.runTransaction(t => {
return t.get(shard_ref).then(doc => {
const new_count = doc.data().count + 1;
t.update(shard_ref, { count: new_count });
});
});
}
这似乎抓住了一个随机增加的分片。我想这个想法即使你不小心抓住相同的两个分片也没有问题,因为它在一个事务中递增,但那时只有一个字段?我猜它是这样你可以有更快的更新,你玩一点概率游戏。它只是感觉有点hacky。