

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ビジネスロジックのアプリケーションレイヤーへの移行に関するFAQs
<a name="faq-business-logic"></a>

データベースからアプリケーションレイヤーにビジネスロジックを移行することは、データベースのモダナイゼーションにおける重要で複雑な側面です。このビジネスロジックの移行については、このガイドの [データベースからアプリケーションレイヤーへのビジネスロジックの移行](logic.md)セクションで説明します。このよくある質問セクションでは、移行の初期候補の選択から複雑なストアドプロシージャやトリガーの処理まで、この移行を効果的に管理するための一般的な質問について説明します。

**Topics**
+ [最初に移行するストアドプロシージャを特定するにはどうすればよいですか?](#how-do-i-identify-which-stored-procedures-to-migrate-first)
+ [ロジックをアプリケーションレイヤーに移動するリスクは何ですか?](#what-are-the-risks-of-moving-logic-to-the-application-layer)
+ [ロジックをデータベースから遠ざけるときにパフォーマンスを維持するにはどうすればよいですか?](#how-do-i-maintain-performance-when-moving-logic-away-from-the-database)
+ [複数のテーブルを含む複雑なストアドプロシージャではどうすればよいですか?](#what-should-i-do-with-complex-stored-procedures-that-involve-multiple-tables)
+ [移行中にデータベーストリガーを処理するにはどうすればよいですか?](#how-do-i-handle-database-triggers-during-migration)
+ [移行されたビジネスロジックをテストする最善の方法は何ですか?](#whats-the-best-way-to-test-the-migrated-business-logic)
+ [データベースロジックとアプリケーションロジックの両方が存在する場合、移行期間を管理するにはどうすればよいですか?](#how-do-i-manage-the-transition-period-when-both-database-and-application-logic-exist)
+ [データベースによって以前に管理されていたアプリケーションレイヤーのエラーシナリオを処理するにはどうすればよいですか?](#how-do-i-handle-error-scenarios-in-the-application-layer-that-were-previously-managed-by-the-database)

## 最初に移行するストアドプロシージャを特定するにはどうすればよいですか?
<a name="how-do-i-identify-which-stored-procedures-to-migrate-first"></a>

まず、低リスクと高学習値の最適な組み合わせを提供するストアドプロシージャを特定します。最小限の依存関係、明確な機能、重要なビジネスへの影響がない手順に焦点を当てます。これらは、チームが信頼を構築し、パターンを確立するのに役立つため、初期移行の理想的な候補になります。たとえば、複雑なトランザクションや重要なビジネスロジックを管理する手順よりも、シンプルなデータオペレーションを処理する手順を選択します。

データベースモニタリングツールを使用して、使用パターンを分析し、アクセス頻度の低い手順を早期候補として特定します。このアプローチは、ビジネスリスクを最小限に抑えながら、後でより複雑な移行に取り組むための貴重な経験を提供します。各手順の複雑さ、ビジネス重要度、依存関係レベルを評価して、優先順位付けされた移行シーケンスを作成します。

## ロジックをアプリケーションレイヤーに移動するリスクは何ですか?
<a name="what-are-the-risks-of-moving-logic-to-the-application-layer"></a>

データベースロジックをアプリケーションレイヤーに移動すると、いくつかの重要な課題が生じます。ネットワーク呼び出しの増加、特にデータベース内で以前に処理されたデータ集約型オペレーションでは、システムパフォーマンスが低下する可能性があります。トランザクション管理はより複雑になり、分散オペレーション全体でデータの整合性を維持するために慎重な調整が必要です。データ整合性の確保は、特に以前にデータベースレベルの制約に依存していたオペレーションでは困難になります。

移行中の潜在的なビジネス中断とデベロッパーの学習曲線も大きな懸念事項です。徹底的な計画、ステージングされた環境での広範なテスト、重要度の低いコンポーネントから始まる段階的な移行を通じて、これらのリスクを軽減します。堅牢なモニタリングとロールバック手順を実装して、本番環境の問題をすばやく特定して対処します。

## ロジックをデータベースから遠ざけるときにパフォーマンスを維持するにはどうすればよいですか?
<a name="how-do-i-maintain-performance-when-moving-logic-away-from-the-database"></a>

頻繁にアクセスされるデータに適したキャッシュメカニズムを実装し、データアクセスパターンを最適化してネットワーク呼び出しを最小限に抑え、一括オペレーションにバッチ処理を使用します。non-time-criticalオペレーションでは、システムの応答性を向上させるために非同期処理を検討してください。

アプリケーションのパフォーマンスメトリクスを注意深くモニタリングし、必要に応じて調整します。たとえば、複数の単一行オペレーションを一括処理に置き換えたり、頻繁に変更されない参照データをキャッシュしたり、クエリパターンを最適化してデータ転送を減らすことができます。定期的なパフォーマンステストとチューニングは、システムが許容可能な応答時間を維持し、保守性とスケーラビリティを向上させるのに役立ちます。

## 複数のテーブルを含む複雑なストアドプロシージャではどうすればよいですか?
<a name="what-should-i-do-with-complex-stored-procedures-that-involve-multiple-tables"></a>

体系的な分解を通じて、複雑でマルチテーブルのストアドプロシージャにアプローチします。まず、より小さく論理的に一貫性のあるコンポーネントに分割し、明確なトランザクションの境界とデータの依存関係を特定します。論理コンポーネントごとにサービスインターフェイスを作成します。これにより、既存の機能を中断することなく、徐々に移行できます。

最小結合コンポーネントから始めて、step-by-stepの移行を実装します。非常に複雑な手順については、よりシンプルなパートを移行しながら、それらをデータベースに一時的に保持することを検討してください。このハイブリッドアプローチは、アーキテクチャ目標に向かって進行しながら、システムの安定性を維持します。移行中はパフォーマンスと機能を継続的にモニタリングし、結果に基づいて戦略を調整する準備をします。

## 移行中にデータベーストリガーを処理するにはどうすればよいですか?
<a name="how-do-i-handle-database-triggers-during-migration"></a>

システム機能を維持しながら、データベーストリガーをアプリケーションレベルのイベントハンドラーに変換します。同期トリガーを、非同期オペレーションのメッセージキューを作成するイベント駆動型パターンに置き換えます。メッセージキューに [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) または [Amazon Simple Queue Service (Amazon SQS)](https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/welcome.html) を使用することを検討してください。監査要件については、アプリケーションレベルのログ記録を実装するか、データベース変更データキャプチャ (CDC) 機能を使用します。

各トリガーの目的と重要度を分析します。一部のトリガーはアプリケーションロジックによって提供され、データ整合性を維持するためにイベントソーシングパターンが必要になる場合があります。監査ログなどの単純なトリガーから始めて、ビジネスルールやデータの整合性を管理する複雑なトリガーに対処します。移行中は慎重にモニタリングし、機能やデータ整合性が失われていないことを確認します。

## 移行されたビジネスロジックをテストする最善の方法は何ですか?
<a name="whats-the-best-way-to-test-the-migrated-business-logic"></a>

移行されたビジネスロジックをデプロイする前に、多層テストアプローチを実装します。新しいアプリケーションコードのユニットテストから始め、end-to-endのビジネスフローをカバーする統合テストを追加します。古い実装と新しい実装を並行して実行し、結果を比較して機能同等性を検証します。さまざまな負荷条件でパフォーマンステストを実行して、システム動作が以前の機能と一致するか、それを超えていることを確認します。

機能フラグを使用してデプロイを制御し、問題が発生した場合にすぐにロールバックできるようにします。特に重要なワークフローについては、検証にビジネスユーザーを関与させます。初期デプロイ中に主要なメトリクスをモニタリングし、新しい実装へのトラフィックを徐々に増やします。全体で、必要に応じて元のデータベースロジックに戻す機能を維持します。

## データベースロジックとアプリケーションロジックの両方が存在する場合、移行期間を管理するにはどうすればよいですか?
<a name="how-do-i-manage-the-transition-period-when-both-database-and-application-logic-exist"></a>

データベースロジックとアプリケーションロジックの両方が使用されている場合は、トラフィックフローを制御する機能フラグを実装し、古い実装と新しい実装をすばやく切り替えることができます。厳格なバージョン管理を維持し、実装とそれぞれの責任の両方を明確に文書化します。両方のシステムの包括的なモニタリングを設定して、不一致やパフォーマンスの問題をすばやく特定します。

必要に応じて元のロジックに戻すことができるように、移行されたコンポーネントごとに明確なロールバック手順を確立します。移行ステータス、潜在的な影響、エスカレーション手順について、すべてのステークホルダーと定期的にコミュニケーションを取ります。このアプローチは、システムの安定性とステークホルダーの信頼を維持しながら、徐々に移行するのに役立ちます。

## データベースによって以前に管理されていたアプリケーションレイヤーのエラーシナリオを処理するにはどうすればよいですか?
<a name="how-do-i-handle-error-scenarios-in-the-application-layer-that-were-previously-managed-by-the-database"></a>

データベースレベルのエラー処理を堅牢なアプリケーションレイヤーメカニズムに置き換えます。サーキットブレーカーを実装し、一時的な障害に対してロジックを再試行します。補償トランザクションを使用して、分散オペレーション全体でデータの一貫性を維持します。たとえば、支払いの更新が失敗した場合、アプリケーションは定義された制限内で自動的に再試行し、必要に応じて補償アクションを開始する必要があります。

包括的なモニタリングとアラートを設定して問題をすばやく特定し、トラブルシューティングのための詳細な監査ログを維持します。エラー処理を可能な限り自動化するように設計し、人間の介入が必要なシナリオの明確なエスカレーションパスを定義します。この多層アプローチは、データの整合性とビジネスプロセスの継続性を維持しながら、システムの耐障害性を提供します。