2017-10-27 8 views
1

私はFirebaseに次のデータベースがあるとします。ユーザーが別のユーザーに新しいメッセージを送信するときは、新しいメッセージを"ChatThreads/hash(User1,User2)"にプッシュし、"UserChats/User1/User2""UserChats/User2/User1"の両方を更新する必要があります。Firebaseデータベースでは、プッシュ操作と更新操作の両方が必要な場合にデータの整合性を保つ方法は?

"ChatThreads" : { 
    "hash(User1,User2)" : { 
    "1" : { 
     "message" : "Hello", 
     "sender" : "User2", 
     "time" : 9835592 
    }, 
    "2" : { 
     "message" : "hi", 
     "sender" : "User1", 
     "time" : 10000000 
    }, 
    "3" : { 
     "message" : "I am boss", 
     "sender" : "User2", 
     "time" : 14835592 
    } 
    } 
    } 
},  
"UserChats" : { 
    "User1" : { 
    "User2" : { 
     "lastTime" : 14835592, 
     "latestMessage" : "I am boss" 
    } 
    }, 
    "User2" : { 
    "User1" : { 
     "lastTime" : 14835592, 
     "latestMessage" : "I am boss" 
    } 
    } 
} 

ケースでデータの一貫性を維持するにはどうすればよいですか? Firebaseのドキュメントでは、複数の更新の共通の親への参照を作成し、すべての更新をマップに格納する方法が導入されました。しかし、この場合、更新だけでなく、プッシュも必要です。

答えて

0

引数なしでpush()を呼び出すと、常にクライアントで生成される一意のキーが取得されます。 (プッシュIDは常にローカルで生成されます)。そのキーを使用して、データを追加する場所へのパスを、その更新に関する他のすべてのデータと一緒に構築できます。

+0

これは非常に難しいです。手順が失敗した場合にロールバックを実行する方法 –

関連する問題