DsC*_*Cpp 6 transactions firebase firebase-realtime-database
有没有办法在 RTDB 中操作事务 API 以进行“批量”写入?(我们目前无法迁移到 Firestore)
我们的问题如下:
当向服务器写入新的“作业”对象时,我们正在执行三个连续的写道:
不幸的是,如果其中一个写入失败但前一个写入成功,则会导致系统出现重大错误。
我们正在寻找确保完整性的方法,或者在其中一个写入失败时恢复操作。
如果只是写入的问题并且“确保完整性,或者在其中一个写入失败时恢复操作”,则可以通过使用该方法来使用同步更新update()。
正如文档中所详述的,“同时更新......是原子的:要么所有更新成功,要么所有更新失败。”。请参阅文档的这一部分:https ://firebase.google.com/docs/database/web/read-and-write#update_specific_fields
请注意,实时数据库还提供了将数据保存为事务的可能性,请参阅此处和此处的文档项目。但就您的情况而言,使用同步更新可能就足够了。
这是我的代码片段,仅供将来参考。(使用雷诺的回答)
private void pushJob(Person person) {
        DatabaseReference dataBase = FirebaseDatabase.getInstance().getReference();
        GeoHash geoHash = new GeoHash(new GeoLocation(choosenLatLng.latitude,choosenLatLng.longitude));
        Map<String, Object> geofireData = new HashMap<>();
        geofireData.put("g", geoHash.getGeoHashString());
        geofireData.put("l", Arrays.asList(choosenLatLng.latitude,choosenLatLng.longitude));
        Map<String, Object> childUpdates = new HashMap<>();
        childUpdates.put("/Geofire/" + job.getmJobUid(), geofireData);
        childUpdates.put("/Jobs/" + job.getmJobUid(), job);
        childUpdates.put("/Users/" + job.getPersonUid(), person);
        dataBase.updateChildren(childUpdates).addOnCompleteListener(new OnCompleteListener<Void>() {
            @Override
            public void onComplete(@NonNull Task<Void> task) {
                progressDialog.dismiss();
                updateUI();
            }
        });
    }
| 归档时间: | 
 | 
| 查看次数: | 4560 次 | 
| 最近记录: |