

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

# SQL Server データベースを AWS 上の MongoDB Atlas に移行する際のクエリパフォーマンスを評価する
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws"></a>

*Battulga Purevragchaa、Amazon Web Services*

*PeerIslands US Inc、Krishnakumar Sathyanarayana*

*MongoDB、Babu Srinivasan*

## 概要
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-summary"></a>

このパターンは、MongoDB にほぼ現実世界のデータを読み込み、可能な限り本番シナリオに近い状態で MongoDB クエリのパフォーマンスを評価するための指針となります。評価では、リレーショナルデータベースから MongoDB への移行を計画する際に役立つ情報を得ることができます。このパターンでは、「[PeerIslandsテストデータジェネレーターとパフォーマンスアナライザー](https://tools.peerislands.io/)」を使用してクエリのパフォーマンスをテストします。

このパターンは、Microsoft SQL Server を MongoDB に移行する場合に特に役立ちます。スキーマ変換を実行したり、現在の SQL Server インスタンスから MongoDB にデータをロードしたりするのは非常に複雑になる可能性があるためです。代わりに、実際の移行を開始する前に、ほぼ現実世界のデータを MongoDB にロードし、MongoDB のパフォーマンスを理解し、スキーマ設計を微調整することができます。

## 前提条件と制限
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-prereqs"></a>

**前提条件**
+ アクティブなAWS アカウント
+ 「[MongoDB](https://www.mongodb.com/docs/atlas/getting-started/)」アトラスに精通していること
+ MongoDB スキーマ
+ 一般的なクエリパターン

**制限事項**
+ データのロード時間とパフォーマンスは、MongoDB クラスターインスタンスのサイズによって制限されます。実際のパフォーマンスを理解するために、本番環境での使用が推奨されるインスタンスを選択することをお勧めします。
+ PeerIslandsのテストデータジェネレーターとパフォーマンスアナライザーは現在、オンラインのデータロードとクエリのみをサポートしています。オフラインのバッチ処理 (Spark コネクタを使用して MongoDB にデータをロードするなど) はまだサポートされていません。
+ PeerIslandsのテストデータジェネレーターとパフォーマンスアナライザーは、コレクション内のフィールドリレーションをサポートしています。コレクション間の関係はサポートしていません。

製品エディション
+ このパターンは 「[MongoDB アトラス](https://www.mongodb.com/atlas)」と「[MongoDB エンタープライズアドバンスド](https://www.mongodb.com/products/mongodb-enterprise-advanced)」の両方をサポートします。

## アーキテクチャ
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-architecture"></a>

**ターゲットテクノロジースタック**
+ MongoDB アトラスまたは MongoDB エンタープライズアドバンス

アーキテクチャ

![\[SQL Server データベースを AWS の MongoDB Atlas に移行するためのクエリパフォーマンスを評価するアーキテクチャ\]](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/25f0ab73-d587-4bd0-9fc0-ac675d5aa349/images/717caae4-d52e-4c78-bb7d-2ecb5acccd42.png)


PeerIslandsのテストデータジェネレーターとパフォーマンスアナライザーは、JavaとAngularを使用して構築され、生成されたデータをAmazon Elastic Block Store (Amazon EBS) に保存します。このツールは、テストデータ生成とパフォーマンステストの 2 つのワークフローで構成されています。
+ テストデータ生成では、生成する必要のあるデータモデルを JSON で表現したテンプレートを作成します。テンプレートを作成したら、負荷生成設定の定義に従ってターゲットコレクションにデータを生成できます。
+ パフォーマンステストでは、プロファイルを作成します。プロファイルは、作成、読み取り、更新、削除 (CRUD) 操作、集約パイプライン、各操作の加重、各段階の所要時間を設定できる多段階のテストシナリオです。プロファイルを作成したら、構成に基づいてターゲットデータベースでパフォーマンステストを実行できます。

PeerIslandsのテストデータジェネレーターとパフォーマンスアナライザーは、データをAmazon EBSに保存するため、ピアリング、許可リスト、プライベートエンドポイントなど、MongoDBがサポートする接続メカニズムを使用してAmazon EBSをMongoDBに接続できます。デフォルトでは、このツールには運用コンポーネントは含まれていません。ただし、必要に応じて Amazon マネージドサービス for Prometheus、Amazon Managed Grafana、Amazon CloudWatch、および AWS Secrets Manager を使用して設定できます。

## ツール
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-tools"></a>
+ 「[PeerIslands テストデータジェネレーターとパフォーマンスアナライザー](https://tools.peerislands.io/)」には 2 つのコンポーネントが含まれています。Test Data Generator コンポーネントを使用すると、MongoDB スキーマに基づいて、顧客固有の現実世界のデータを生成できます。このツールは完全にUI主導型で、豊富なデータライブラリを備えているため、MongoDBで数十億のレコードを迅速に生成できます。このツールには、MongoDB スキーマのフィールド間の関係を実装する機能もあります。Performance Analyzer コンポーネントを使用すると、顧客固有のクエリや集計を生成し、MongoDB で現実的なパフォーマンステストを実行できます。Performance Analyzer を使用すると、特定のユースケースに合わせた豊富な負荷プロファイルとパラメーター化されたクエリを使用して MongoDB のパフォーマンスをテストできます。

## ベストプラクティス
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-best-practices"></a>

以下のリソースを参照してください。
+ 「[MongoDB スキーマ設計のベストプラクティス](https://www.mongodb.com/developer/products/mongodb/mongodb-schema-design-best-practices/)」 (MongoDB 開発者ウェブサイト)
+ 「[AWS に MongoDB アトラスをデプロイする際のベストプラクティス](https://www.mongodb.com/presentation/best-practices-of-deploying-mongodb-atlas-on-aws)」 (MongoDB ウェブサイト)
+ 「[AWS PrivateLink を使用して MongoDB Atlas データプレーンにアプリケーションを安全に接続する](https://aws.amazon.com/blogs/apn/connecting-applications-securely-to-a-mongodb-atlas-data-plane-with-aws-privatelink/)」 (AWS ブログ記事)
+ 「[MongoDB パフォーマンスのベストプラクティスガイド](https://www.mongodb.com/basics/best-practices)」 (MongoDB ウェブサイト)

## エピック
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-epics"></a>

### ソースデータを理解する
<a name="understand-your-source-data"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 現在の SQL Server ソースのデータベースフットプリントを理解します。 | 現在の SQL Server フットプリントを把握します。これは、データベースの `INFORMATION` スキーマに対してクエリを実行することで実現できます。テーブルの数と各テーブルのサイズを決定します。各テーブルに関連付けられているインデックスを分析します。SQL 分析の詳細については、PeerIslands ウェブサイトの「[SQL2Mongo: データ移行の道のり](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)」というブログ記事を参照してください。 | DBA | 
| ソーススキーマを理解します。 | テーブルスキーマとデータのビジネス表現 (郵便番号、名前、通貨など) を決定します。既存のエンティティ関係 (ER) 図を使用するか、既存のデータベースから ER 図を生成します。詳細については、PeerIslandsウェブサイトのブログ記事「[SQL2Mongo: データ移行の道のり](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)」を参照してください。 | DBA | 
| クエリパターンを理解します。 | 使用する SQL クエリのトップ 10 を文書化します。データベースにある **performance\$1schema.events\$1statements\$1summary\$1by\$1digest** テーブルを使用すると、上位のクエリを理解できます。詳細については、PeerIslandsウェブサイトのブログ記事「[SQL2Mongo: データ移行の道のり](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)」を参照してください。 | DBA | 
| SLA のコミットメントを理解します。 | データベース運用のターゲットサービスレベルアグリーメント (SLA) を文書化します。一般的な測定値には、クエリの待ち時間や 1 秒あたりのクエリ数などがあります。測定値とその目標は通常、非機能要件 (NFR) 文書に記載されています。 | DBA | 

### MongoDB スキーマを定義する
<a name="define-the-mongodb-schema"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| ターゲットスキーマを定義します。 | ターゲット MongoDB スキーマのさまざまなオプションを定義します。詳細については、MongoDB のドキュメントの「[Schemas](https://www.mongodb.com/docs/atlas/app-services/schemas/)」を参照してください。テーブルリレーションに基づいたベストプラクティスとデザインパターンを検討します。 | MongoDB エンジニア | 
| ターゲットクエリパターンを定義します。 | MongoDB クエリとアグリゲーションパイプラインを定義します。これらのクエリは、SQL Server ワークロードについてキャプチャした上位クエリと同等です。MongoDB アグリゲーションパイプラインを構築する方法を理解するには、「[MongoDB のドキュメント](https://www.mongodb.com/docs/manual/core/aggregation-pipeline/)」を参照してください。 | MongoDB エンジニア | 
| MongoDB インスタンスタイプを定義します。 | テストに使用するインスタンスのサイズを決定します。詳細については、「[MongoDB のドキュメント](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)」を参照してください。 | MongoDB エンジニア | 

### ターゲットデータベースの準備
<a name="prepare-the-target-database"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| MongoDB アトラスクラスターをセットアップします。 | AWS で MongoDB クラスターをセットアップするには、「[MongoDB ドキュメント](https://www.mongodb.com/docs/atlas/tutorial/create-new-cluster/)」の指示に従ってください。 | MongoDB エンジニア | 
| ターゲットデータベースにユーザーを作成します。 | 「[MongoDB ドキュメント](https://www.mongodb.com/docs/atlas/connect-to-database-deployment/)」の指示に従って、MongoDB Atlas クラスターにアクセスとネットワークセキュリティを設定します。 | MongoDB エンジニア | 
| AWS で適切なロールを作成し、Atlasのロールベースのアクセス制御を設定します。 | 必要に応じて、「[MongoDB](https://www.mongodb.com/docs/atlas/security/set-up-unified-aws-access/)」ドキュメントの指示に従って追加のユーザーを設定します。AWS のロールを使って[認証と認可](https://www.mongodb.com/docs/atlas/security/config-db-auth/)を設定します。 | MongoDB エンジニア | 
| MongoDB アトラスアクセス用のコンパスを設定します。 | ナビゲーションとアクセスを容易にするため、「[MongoDB Compass GUI ユーティリティ](https://www.mongodb.com/products/compass)」を設定します。 | MongoDB エンジニア | 

### テストデータジェネレーターを使用してベースロードを設定します。
<a name="set-up-the-base-load-by-using-test-data-generator"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| テストデータジェネレーターをインストールします。 | 「[PeerIsland テストデータジェネレーター](https://github.com/PeerIslands/loadgen_binary)」をご使用の環境にインストールします。 | MongoDB エンジニア | 
| 適切なデータを生成するようにテストデータジェネレーターを設定します。 | データライブラリを使用してテンプレートを作成し、MongoDB スキーマの各フィールドに固有のデータを生成します。詳細については、「[MongoDB データジェネレーターとパフォーマンス」 を参照してください。「アナライザー](https://vimeo.com/570068857)」ビデオ。 | MongoDB エンジニア | 
| テストデータジェネレーターを水平方向にスケールする必要な負荷を生成します。 | 作成したテンプレートを使用して、必要な並列処理を設定して、ターゲットコレクションに対する負荷生成を開始します。必要なデータを生成するための時間枠とスケールを決定します。 | MongoDB エンジニア | 
| MongoDB アトラスでロードを検証します。 | MongoDB アトラスに読み込まれたデータを確認します。 | MongoDB エンジニア | 
| MongoDB で必要なインデックスを生成します。 | クエリパターンに基づいて、必要に応じてインデックスを定義します。詳細については、「[MongoDB のドキュメント](https://www.mongodb.com/docs/manual/applications/indexes/)」を参照してください。 | MongoDB エンジニア | 

### パフォーマンステストを実施します。
<a name="conduct-performance-testing"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| パフォーマンス・アナライザーでロード・プロファイルを設定します。 | Performance Analyzer でパフォーマンステストプロファイルを作成するには、特定のクエリとそれに対応する加重、テスト実行時間、ステージを設定します。詳細については、「[MongoDB データジェネレーターとパフォーマンス」を参照してください。「アナライザー](https://vimeo.com/570068857)」ビデオ。 | MongoDB エンジニア | 
| パフォーマンステストを実行します。 | 作成したパフォーマンステストプロファイルを使用して、必要な並列処理を設定して、ターゲットコレクションに対するテストを開始します。パフォーマンステストツールを水平方向にスケールして、MongoDB Atlas に対してクエリを実行します。 | MongoDB エンジニア | 
| テスト結果を記録します。 | クエリの P95、P99 のレイテンシーを記録します。 | MongoDB エンジニア | 
| スキーマとクエリパターンを調整します。 | インデックスとクエリパターンを変更して、パフォーマンスの問題に対処します。 | MongoDB エンジニア | 

### プロジェクトを閉じる
<a name="close-the-project"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| 一時的な AWS リソースをシャットダウンします。 | テストデータジェネレーターとパフォーマンスアナライザーに使用した一時リソースをすべて削除します。 | AWS 管理者 | 
| パフォーマンステストの結果を更新します。 | MongoDB クエリのパフォーマンスを理解し、それを SLA と比較します。必要に応じて、MongoDB スキーマを微調整し、プロセスを再実行します。 | MongoDB エンジニア | 
| プロジェクトを完了します。 | プロジェクトを終了し、フィードバックを提供します。 | MongoDB エンジニア | 

## 関連リソース
<a name="assess-query-performance-for-migrating-sql-server-databases-to-mongodb-atlas-on-aws-resources"></a>
+ GitHub リポジトリ:「[S3 からアトラス](https://github.com/mongodb-partners/S3toAtlas)」
+ スキーマ:「[MongoDB](https://www.mongodb.com/developer/products/mongodb/mongodb-schema-design-best-practices/)」スキーマのデザイン
+ アグリゲーションパイプライン:「[MongoDB](https://www.mongodb.com/docs/manual/core/aggregation-pipeline/)」アグリゲーションパイプライン
+ MongoDB アトラスのサイジング:「[サイジング層の選択](https://www.mongodb.com/docs/atlas/sizing-tier-selection/)」
+ ビデオ:「[MongoDB データジェネレーター](https://vimeo.com/570068857)」とパフォーマンス analyzer
+ リファレンス:「[MongoDB ドキュメンテーション](https://www.mongodb.com/docs/)」
+ チュートリアル:****「[MongoDB developer guide](https://www.mongodb.com/docs/develop-applications/)」、「[MongoDB Jumpstart](https://www.youtube.com/playlist?list=PL4RCxklHWZ9v2lcat4oEVGQhZg6r4IQGV)」
+ AWS Marketplace: ****「[MongoDB Atlas on AWS Marketplace](https://aws.amazon.com/marketplace/seller-profile?id=c9032c7b-70dd-459f-834f-c1e23cf3d092)」
+ AWS パートナーソリューション:「****[MongoDB Atlas on AWS Reference Deployment](https://aws.amazon.com/quickstart/architecture/mongodb-atlas/)」

その他のリソース:
+ 「[SQL 分析](https://engineering.peerislands.io/sql2mongo-data-migration-journey-fec91a421d60)」
+ 「[MongoDB デベロッパーコミュニティフォーラム](https://www.mongodb.com/community/forums/)」
+ 「[MongoDB パフォーマンスチューニングに関する質問](https://www.mongodb.com/developer/products/mongodb/performance-tuning-tips/)」
+ 「[アトラスとRedshift によるオペレーショナル分析](https://github.com/mongodb-partners/Atlas_to_Redshift)」
+ 「[MongoDB アトラスと AWS Elastic Beanstalk によるアプリケーションのモダナイゼーション](https://github.com/mongodb-partners/MEANStack_with_Atlas_on_AWS_EB)」