Firebase:在单个事务中更新多个对象 - java

我在下面找到了一些讨论这种情况的话题。

  • Firebase: How do I update multiple resources atomically
  • Firebase data consistency across multiple nodes
  • How to store users and groups for a chat using Firebase
  • 但是,仍然很难找到是否有为此建议的数据结构设计。
    我看到一个多写库firebase-multi-write,其中说您在大多数情况下可能不需要此库。

    但我认为我确实需要这样做,我的情况是:3个用户

    /users/A : {credit:20}
    
    /users/B : {credit:3}
    
    /users/C :  {credit:10}
    

    并且每个用户可以同时从彼此之间互相窃取

  • A从B点数中窃取的内容类似于{21,2}
  • B从C点数中窃取的内容类似于{3,9}
  • C从A积分中窃取的内容类似于{11,20}
  • 现在,我需要为每个用户更新信用额度,以保持这种一致性,以便每个窃取操作本质上都是原子的。

    Java 中保持数据完整性的同时,处理这种情况的最佳方法是什么?

    参考方案

    在2015年9月,firebase开发人员发布了new version。

    在此版本中,您现在可以一次原子更新到两个位置:

    Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
    // Generate a new push ID for the new post
    
    Firebase newPostRef = ref.child("posts").push();
    String newPostKey = newPostRef.getKey();
    
    // Create the data we want to update
    Map newPost = new HashMap();
    newPost.put("title", "New Post");
    newPost.put("content", "Here is my new post!");
    
    Map updatedUserData = new HashMap();
    updatedUserData.put("users/posts/" + newPostKey, true);
    updatedUserData.put("posts/" + newPostKey, newPost);
    
    // Do a deep-path update
    ref.updateChildren(updatedUserData, new Firebase.CompletionListener() {
       @Override
       public void onComplete(FirebaseError firebaseError, Firebase firebase) {
           if (firebaseError != null) {
               System.out.println("Error updating data: " + firebaseError.getMessage());
           }
       }
    });
    

    Firebase Firestore集合的最大值 - java

    collection * Random_Id1 *amount:100 *name:John Random_Id2 *amount:150 *name:Matt Random_Id3 *amount:65 *name:Alice 我有一个Firestore集合,其中包含不同的文档。这些文件中包含数据(名称,年龄,金额等)。有没有办法我可以返回集合中的最高金额…

    Android Firebase:将数据保存到数据库 - java

    我正在尝试从Firebase保存和检索数据,但是在获取正确的语法时遇到了一些麻烦。用户通过电子邮件和密码的身份验证方法进行注册,并使用相同的详细信息登录。我有两个编辑文本字段,要求输入名称和语句。在两个编辑文本框下面有一个按钮,用于将数据保存到数据库。private void saveQuote(){ String name = author.getText…

    Java-搜索字符串数组中的字符串 - java

    在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

    Java Scanner读取文件的奇怪行为 - java

    因此,在使用Scanner类从文件读取内容时,我遇到了一个有趣的问题。基本上,我试图从目录中读取解析应用程序生成的多个输出文件,以计算一些准确性指标。基本上,我的代码只是遍历目录中的每个文件,并使用扫描仪将其打开以处理内容。无论出于何种原因,扫描程序都不会读取其中的一些文件(所有UTF-8编码)。即使文件不是空的,scanner.hasNextLine()在…

    Java:线程池如何将线程映射到可运行对象 - java

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …