トランザクション
複数のドキュメントに対して、アトミックな方法で多数のミューテーションを実行し、スケール時のパフォーマンスを向上させます。
トランザクションは、一連のミューテーションが単一のアトミックな作業単位として実行されることを保証する必要があるシナリオで有用です。たとえば、すべてのドキュメント間でデータの一貫性を保つために、一つのトランザクションの一部として複数のドキュメントを更新したい場合があります。
Squid でトランザクションを実行するには、squid
オブジェクトが提供する runInTransaction
メソッドを使用できます。このメソッドは、トランザクションのコンテキスト内で実行される callback
関数をパラメーターとして受け取ります。
Client code
await squid.runInTransaction(async (transactionId: string) => {
const user1 = squid.collection<User>('users').doc('user_1_id');
const user2 = squid.collection<User>('users').doc('user_2_id');
await user1.update({ name: 'Alice' }, transactionId);
await user2.update({ name: 'Bob' }, transactionId);
});
トランザクション内で変更を適用する場合、これらの変更はすぐには反映されませんが、callback
関数が完了すると楽観的に反映されます。
これは、トランザクションを使用せずにミューテーションを適用する場合と対照的で、その場合は変更が即座に楽観的に適用されます。トランザクションの一部として適用されたミューテーションは即座に解決されます。サーバー上で変更が適用されることを確実にするため、runInTransaction
から返されるプロミスが解決するのを待ってください。
Note
複数のコネクタに対してトランザクションを適用する場合、各コネクタはアトミックに更新されます。ただし、一方のコネクタが更新に成功し、もう一方のコネクタが失敗する可能性があります。コネクタ間でのアトミックな更新はサポートされていません。