3

2 つのキーに格納する必要があるアイテムを更新するトランザクションを実行しています。これを達成するために、次のようにネストされたトランザクションをセットアップしましたが、期待どおりに実行されているようです。

firebaseOOO.child('relationships/main').child(accountID).child(friendAccountID).transaction(function(data) {
    data.prop = 'newval';
    firebaseOOO.child('relationships/main').child(friendAccountID).child(accountID).transaction(function(data) {
        return r;
    });
    return r;
});

これには、落とし穴や予想外の影響はありますか? 私が最も心配しているのは、負荷がかかっている状態である種のトランザクション ループに陥ってしまうことです。そこでは、各トランザクションが他のトランザクションをキャンセルして、両方のトランザクションを強制的に再起動させたり、同様の処理を行ったりします。

これを行うより良い方法はありますか?

NodeJS クライアントを使用しています。

4

1 に答える 1

3

おそらく、最初のトランザクションへのコールバック内から別のトランザクションを開始したくないでしょう。最初のトランザクションの関数が何回実行されるかについての保証はありません。特に、更新しようとしている場所で多くの競合がある場合はそうです。

他の質問で思いついたより良い解決策は、最初のトランザクションがコミットされたことを確認した後、完了コールバックから 2 番目のトランザクションを開始することです。

于 2013-04-21T21:21:09.683 に答える