

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

# よくある質問
<a name="faq"></a>

このセクションでは、マイクロサービスにおけるデータ永続化の実現について、一般的に提起される質問に対する回答を提供します。

## モダナイゼーションの一環として、モノリシックデータベースをいつモダナイズできますか？
<a name="q1"></a>

モノリシックアプリケーションをマイクロサービスに分解し始めたら、モノリシックデータベースのモダナイゼーションに集中すべきです。データベースをアプリケーションに合わせた複数の小さなデータベースに分割する戦略を必ず作成します。

## レガシーなモノリシック・データベースを複数のマイクロサービス用に維持できますか？
<a name="q2"></a>

複数のマイクロサービスでモノリシックデータベースを共有すると密結合が生じます。つまり、マイクロサービスに変更を個別にデプロイすることはできず、スキーマの変更はすべてマイクロサービス間で調整する必要があります。リレーショナルデータストアをモノリシックデータベースとして使用することもできますが、一部のマイクロサービスには NoSQL データベースの方が適している場合があります。

## マイクロサービスアーキテクチャ用のデータベースを設計する際、何を考慮すべきですか？
<a name="q3"></a>

アプリケーションの機能に合ったドメインに基づいてアプリケーションを設計する必要があります。アプリケーションの機能を評価し、リレーショナルデータベーススキーマが必要かどうかを必ず判断します。要件に合う場合は、NoSQL データベースの使用も検討すべきです。

## 異なるマイクロサービス間でデータ整合性を維持するための一般的なパターンは何ですか?
<a name="q4"></a>

最も一般的なパターンは、[イベント駆動型アーキテクチャ](https://aws.amazon.com//event-driven-architecture/) を使うことです。

## トランザクションの自動化を維持するにはどうすれば良いですか?
<a name="q5"></a>

マイクロサービスアーキテクチャでは、トランザクションは、異なるマイクロサービスによって処理される複数のローカルトランザクションから構成されます。ローカルトランザクションが失敗した場合、以前に完了した正常なトランザクションをロールバックする必要があります。これを避けるために [Saga パターン](saga-pattern.md) を使うことができます。

## マイクロサービスごとに別々のデータベースを使用する必要がありますか?
<a name="q6"></a>

マイクロサービスアーキテクチャの主な利点は疎結合です。各マイクロサービスの永続データは非公開にしておき、マイクロサービスの API を通じてのみアクセスできるようにする必要があります。マイクロサービスが同じデータベースを共有している場合は、データスキーマの変更を慎重に評価する必要があります。

## マイクロサービスが単一のデータベースを共有する場合、マイクロサービスの永続的なデータを非公開にするにはどうすればいいでしょうか？
<a name="q7"></a>

マイクロサービスがリレーショナルデータベースを共有する場合は、マイクロサービスごとにプライベートテーブルを用意します。また、個々のマイクロサービス専用のスキーマを個別に作成することもできます。