Ron*_*on7 8 android firebase firebase-realtime-database
我正在跟踪用户通过Android应用在Firebase数据库上更新的计数.现在它工作正确的方式是,在交互用户的应用程序中查找当前计数的数据库(使用addListenerForSingleValueEvent()
和onDataChange()
内部的新定义的方法ValueEventListener
)并加1,然后使用将计到这个新的价值mRef.setValue()
,其中mRef
为参考到数据库.
我担心的问题是如果大量用户同时与数据库进行交互会发生什么; Firebase是否负责确保正确读取和递增值,或者是否存在大量重叠以及由此导致的数据丢失.
And*_*ool 12
使用可能因并发修改而损坏的复杂数据(例如增量计数器)时,Firebase会提供事务操作.
您为此操作提供了两个参数:更新函数和可选的完成回调.update函数将数据的当前状态作为参数,并返回您想要写入的新的所需状态.
例如,如果我们想增加特定博客帖子上的upvotes数量,我们会编写如下的事务(遗留代码):
Firebase upvotesRef = new Firebase("https://docs-examples.firebaseio.com/android/saving-data/fireblog/posts/-JRHTHaIs-jNPLXOQivY/upvotes");
upvotesRef.runTransaction(new Transaction.Handler() {
@Override
public Transaction.Result doTransaction(MutableData currentData) {
if(currentData.getValue() == null) {
currentData.setValue(1);
} else {
currentData.setValue((Long) currentData.getValue() + 1);
}
return Transaction.success(currentData); //we can also abort by calling Transaction.abort()
}
@Override
public void onComplete(FirebaseError firebaseError, boolean committed, DataSnapshot currentData) {
//This method will be called once with the results of the transaction.
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5532 次 |
最近记录: |