Firebase - 多个用户使用旧值同时更新同一对象

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)

遗产来源

新的firebase版本源