0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Apexの同期と非同期処理2:データの整合性

Last updated at Posted at 2024-08-15

非同期処理がデータの整合性に与える影響は、使用する非同期メカニズムや設計によって異なります。適切に実装すれば、非同期処理でもデータの整合性を保つことができますが、特定のケースでは注意が必要です。

非同期処理によるデータの整合性への影響

## 1. レコードの競合と整合性
- 説明: 非同期処理では、複数の非同期ジョブが同時に同じデータにアクセスしたり、更新を試みたりする場合があります。これにより、競合が発生し、データの整合性が損なわれる可能性があります。
- 対策:
- 楽観的ロック: SalesforceのSystem.LockExceptionを活用し、競合が発生した場合にリトライを行う。
- 外部トランザクション管理: 競合しやすい操作をキューに入れて順番に処理するなどの管理方法を導入する。
- 重複防止の設計: 一意のキーやデータ検証ルールを使用して、意図しない重複データの作成を防ぐ。

  1. 処理の順序

    • 説明: 非同期処理では、処理が完了する順序が予測できないため、依存する処理がある場合、後続の処理が正しく動作しないことがあります。
    • 対策:
      • キューアブルApexのチェーン: キューアブルApexを使うと、非同期処理をチェーンで実行できるため、処理の順序を制御できます。
      • 状態管理: 各処理の状態を追跡し、前提条件が満たされるまで次のステップを遅らせる。
  2. トランザクションの分割

    • 説明: 非同期処理は別のトランザクションとして実行されるため、前のトランザクションが成功しても、非同期処理が失敗する可能性があります。これにより、データが部分的にしか更新されない状況が発生することがあります。
    • 対策:
      • 非同期処理のリトライ: 非同期処理の失敗を検出し、リトライの仕組みを実装する。
      • エラーロギングと通知: 非同期処理でエラーが発生した場合、そのエラーをロギングし、適切な通知を行うことで、データ不整合を検出しやすくする。
  3. データの参照整合性

    • 説明: 非同期処理が異なるsObjectを同時に更新しようとする場合、参照整合性が保たれないことがあります。例えば、親レコードの削除と子レコードの更新が競合するケースです。
    • 対策:
      • トランザクションの順序を管理: 子レコードの処理が完了した後に親レコードを削除するなど、処理の順序を慎重に設計する。
      • 依存関係の整理: データモデルの設計時に依存関係を整理し、非同期処理によって不整合が生じないようにする。

まとめ

非同期処理自体はデータの整合性に影響を与える可能性がありますが、適切に設計と実装を行うことで、その影響を最小限に抑えることが可能です。非同期処理を導入する際には、競合や処理順序、トランザクション管理に注意を払い、データの整合性が保たれるように設計することが重要です。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?