を使用する必要があるとき、私はFirebase取引がその古い値と新しい値あなたがFirebase取引
与え、いくつかの値のアトミック更新を可能にする。しかしFirebaseがリアルタイムデータベースであることを考えると、私は仮定し、1はトランザクションだけを使用しなければならないことを理解し控えめにしていない「リアルタイム機能」
にここに例を示します
私はあなたが(追加すると、「好き」または同等の)値にいくつかの数学的な操作を実行している場合、それは使用するために理にかなっていることを理解トランザクション
以下のユースケースでトランザクションを使用することが理にかなっているかどうかはわかりません。テキストフィールドは任意の数のユーザーによって更新でき、リアルタイムで発生するすべての更新に関心があるとします。 firebaseはこの場合に取引を使用することを推奨していますか?または、Firebaseサーバの時計のタイムスタンプ単位ごとに1つの「永続的な操作」に限定された、値で発生する最後の「永続操作」ですか?
最終的な値が維持された順序でイベントが配信されることが保証されていますか?
はいトランザクションを使用するつもりはありません。ここに例があります。 「コメント」システムを想定します。一意のプッシュキー+いくつかの属性を持つ「コメント」ルートノードにすべてのコメントを保存できます。このルートは大きくなり、ソートされたリストを取得したいのであれば、ソートパラメータ(タイムスタンプ上)を使ってクエリを送信します。最新のコメントの一意のプッシュキーを格納する別のノード:CommentLatestがある場合。したがって、各クライアントは2つの書き込みを実行します。一意のプッシュキーを持つ「コメント」ツリーへの書き込みと、それまでに使用した最新の一意のプッシュキーを持つコメントのツリーへの更新。この規模ですか? – wrecktangle
(続き)、複数のクライアントがcommentLatestノードを更新すると、CommentLatestノードで破損する可能性がありますか? – wrecktangle
'latestCommentId'値の更新の懸念が気になる方は、時期尚早に最適化しているかもしれません。古い日付での上書きは、 'latestCommentId'の値としてタイムスタンプを含めることで防ぐことができます。そして、タイムスタンプを却下することは、現在のタイムスタンプより古いです。しかし、私たちは信じられないほど広範な質問からここで非常に詳細なユースケースに行きました。最初にFirebaseトランザクションの作業に時間を費やしてから、コードとセキュリティルールを使ってより具体的な質問をすることをお勧めします。 –