2015-07-20 23 views
6

Bu senaryo hakkında konuşacak bir kaç konu daha buldum. varsa Firebase data consistency across multiple nodes Firebase: Tek bir işlemde birden çok nesneyi güncelle

  • How to store users and groups for a chat using Firebase
  • Firebase: How do I update multiple resources atomically

    • Ancak yine de bulmak için mücadele, herhangi Bunun için veri yapısı tasarımını önerilir. Bir çok yazım kitaplığı firebase-multi-write görüyorum, bu da muhtemelen çoğu durumda buna ihtiyacınız olmadığını söylüyor.

      Ama bu ihtiyacım var düşünüyorum benim Senaryo:. 3 kullanıcı

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

      Ve her kullanıcı aynı anda birbirine kontör çalabilecek,

      • A B kredisi top çalma Cı kredi görünümündedir
      • B çalar {2, 21} gibi nokta {3, 9}
      • C A kredisi çalar {11, 2 benziyor 0}

      Artık, her kullanıcı için bu tutarlılığı korumak için kredileri güncellemem gerekiyor, böylece her çalma işlemi doğal olarak atomiktir. Java veri bütünlüğünü korurken

      Ne tür senaryo işlemek için en iyi yolu olacak?

  • +1

    İlk bağlantılı iplik görüşmelerini başka yaklaşımı hakkında (Olay Kaynak - http://martinfowler.com/eaaDev/ EventSourcing.html). Üç çalma olayını yakalayan tek bir olay yazacaksınız ve mevcut kredi dengesini bulmanız gerektiğinde ilk durumu (muhtemelen 0 kredi) yükleyeceksin ve daha sonra son halini alabilene kadar olay geçmişini oynatın. Bonus puanları - tüm "çalma" geçmişiniz var. Bunun kabul edilemez bir nedeni var mı? –

    +0

    Teşekkürler, bahsettiğim senaryo, öngördüğüm iş akışının basitleştirilmiş bir versiyonuydu. Bu, A'nın B formunu çaldığı basit bir oyun uygulamasının bir parçasıdır ve bir sonraki B de, C ve D oyuncularının karışımıyla onu geri çalar. Yani basit bir atomik güncelleme için çok fazla hesaplamalar? – duskandawn

    +0

    Atom işlemlerinin işe yarayıp yaramadığını öğrenmek için senaryo hakkında yeterli bilgim yok - ama tanımladığınız şey bana atomik bir işlem gibi gelmiyor. Eğer A B'den alırsa ve sonra "bir sonraki anda" B onu çalarsa ... bu atomik değildir. Bu, birbirine yakın zamanda meydana gelen iki ayrı operasyon. –

    cevap

    3

    Aralık ayında/2015 firebase geliştiricileri new version'u yayımladı. Bu sürümle birlikte

    , artık her iki yere de tek atom güncelleme yapabilirsiniz:

    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()); 
         } 
        } 
    }); 
    
    İlgili konular