「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>Azure SQL Database]] * 目次 [#oc8c9fe1] #contents *概要 [#mf782992] RDBMSでのステートフルなデータ処理では難しかった、~ 拡張性+弾力性をアプリケーションに提供する。 -スケールアウト(水平分散)が可能 -アプリケーションをマルチテナント化する。 -インスタンス横断なトランザクション処理(ACID) -その際に、アプリケーションの変更は不要。~ (ただし、[[Elastic Database Client Library>#j3beda01]]で作成し直す必要がある) *機能 [#ve531558] **Elastic Database tools [#a87aab22] -DB シャーディングの構築と管理。 -2種類のツールが存在する。 ***Elastic Database Client Library [#j3beda01] DB シャーディングのクライアント・アプリケーションの開発。 -Shard Map Management --シャードのコレクションを管理する"shard map manager"と呼ばれる特殊なデータベースを管理する。 --"shard map manager"は、スケールアウトされたデータベースを横断して、メタデータを管理する。 -Data Dependent Routing~ 1回の呼び出しでテナントに対応するデータベースと接続する。 -Multi-Shard Queries~ 1回の呼び出しでシャードに跨ったデータを1つの結果セットに集約する。 ***Elastic Database Split-merge tool [#f9784143] -DB シャーディングのスケールアウト(スケールイン) -シャード マップの再構築などを行う。 **Pools, Jobs, query [#a3c75e18] ***Elastic Database Pool [#fd755a7f] -一定量のDTU (Database Throughput Unit)の管理をする。 -大量のElastic Database Poolの性能・コスト管理を容易にする。 -ポータル、PowerShell、.NETライブラリを使用して、~ Elastic Database Poolを管理することができる。 ***Elastic Database Jobs [#n020579e] [[Elastic Database Client Library>#j3beda01]] を使用し、 -[[Elastic Database Pool>#fd755a7f]] と shard setの全データベース横断のTransact-SQL (T-SQL)を実行できる。 -なお、このクエリは、DMLだけではなく、DDL、運用・保守タスクも実行できる。 --スキーマ変更 --資格情報管理 --参照データの更新 --パフォーマンスデータの収集 --テナント(顧客)遠隔操作 ***Elastic Database query [#h5e9b0af] [[Elastic Database Client Library>#j3beda01]] を使用し、 -[[Elastic Database Pool>#fd755a7f]] と shard setの全データベース横断のTransact-SQL (T-SQL)を実行できる。 -Microsoftとサードパーティ製のBIツール(Excel, PowerBI, Tableau, etc.)~ から接続し、データベースを跨いだリモートテーブルへのアクセスが可能。 **スケーリング [#he8047ae] クラウド規模のデータベース アプリケーションでは、~ 容量または全体のパフォーマンスを調整するために、~ 2 つのスケーリング手法を組み合わせて使用する。 ***水平方向のスケーリング [#c1916c76] [[Elastic Database Pool>#fd755a7f]]から、データベースを追加または削除する。 -追加:スケール・アウト -削除:スケール・イン これは、[[Elastic Database Client Library>#j3beda01]]で管理する。 ***垂直方向のスケーリング [#n5dd0a5b] 個々のデータベースのパフォーマンス レベルを増減する。 -増:スケールアップ -減:スケールダウン これには、以下の方法で対応する。 -Azure PowerShell コマンドレットを使用する。 -[[Elastic Database Pool>#fd755a7f]]のデータベースのパフォーマンス レベルを変更する。 *テナント パターン [#w8dacdad] -スケールアウトを目的とする。 -マルチテナント化を目的とする。 ※ SaaSのユーザや企業をテナントと呼ぶ。 **シングルテナント パターン [#cec7aeb2] -各データベース・インスタンスは~ 特定のテナント ID 値 (または顧客キー値) に関連付けられる。 -テナント ID 値 (または顧客キー値) がデータに存在する必要は無い。 -要求をデータベースにルーティングするのはアプリケーションの役目。~ [[Elastic Database Client Library>#j3beda01]]はこの作業を簡素化できる。 **マルチテナント パターン [#r3133a13] -各データベース・インスタンスは~ 複数のテナント ID 値 (または顧客キー値) に関連付けられる。 -テナント ID 値 (または顧客キー値) がデータに存在する必要がある。 -アプリケーションは多数の小さなテナントを管理する必要がある。 -要求をデータベースにルーティングするのはアプリケーションの役目。~ [[Elastic Database Client Library>#j3beda01]]はこの作業を簡素化できる。 -複数のデータベース間でのデータ再分散(シャード マップの再構築)が必要になる。~ Elastic Database Split-merge toolはこの作業を簡素化できる。 **パターン変更のシナリオ [#kb8ba0c0] ***評価期間 [#g127f633] 見込顧客に試用版のソフトウェアを提供する場合、マルチテナント パターンを採用する。 理由:費用対効果を高めることができる。 ***本稼働 [#f09f9e0b] 見込顧客との契約が完了した場合、シングルテナント データベースを採用する。 理由:パフォーマンスが向上する。 また、試用版を使用していた場合は、Elastic Database Split-merge toolを使用して、~ マルチテナント データベースから新しいシングルテナント データベースにデータを移行する。 *追加の調査 [#c2990487] https://github.com/OpenTouryoProject/OpenTouryo/issues/144 **SQLの実行方法 [#gfed0184] ***Data Dependent Routing [#a78b2932] -Connectionオブジェクトの取得方法が変わるだけ。 -SQLの実行自体は、従来のSQLClientを使用する。 ***Multi-Shard Queries [#gd230754] -参照クエリ専用。 --DataReaderのみサポートする。 --Adapter系はサポートしない。 -従って、Transactionもサポートしない。 **TransactionとRetry policy [#w11109bf] ***Transaction (Elastic database transactions) [#v1dbe5c4] -TransactionScopeをサポートする。 -複数Instanceを跨いだクエリを実行する場合、TransactionScopeを使用する。 -[[Data Dependent Routing>#a78b2932]]のシナリオのみで有効。 ***Retry policy (SqlDatabaseUtils.SqlRetryPolicy) [#x1d37f82] Windows Azure AppFabric Customer Advisory チーム (CAT) と~ patterns & practices チームが開発したライブラリ。 -クエリによって成功する可能性の高い処理のリトライを行う。 -[[Data Dependent Routing>#a78b2932]]のシナリオのみで有効。 ***TransactionScopeとRetry policyの関連 [#ua857e99] -双方とも、[[Data Dependent Routing>#a78b2932]]のシナリオのみで有効。 -TransactionScopeとRetry policyの範囲は、TransactionScope < Retry policyとなる。 **Row-Level Security [#k5f8eea4] *参考 [#s6820481] -Elastic Database ツール機能の概要~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-introduction/ --Azure SQL Database エラスティック データベース クエリの概要~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-query-overview/ --Azure SQL Database - クライアント ライブラリ~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-database-client-library/ ---シャード マップ管理~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-shard-map-management/ ---データ依存ルーティング~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-data-dependent-routing/ ---マルチシャード クエリ実行~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-multishard-querying/ --エラスティック データベース分割/マージ ツールを使用したスケーリング~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-overview-split-and-merge/ --Elastic Scale のセキュリティの構成(分割/マージサービスの利用に必要)~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-split-merge-security-configuration/ --その他 ---Elastic Database ジョブの概要~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-jobs-overview/ ---弾力性データベース ツールと行レベルのセキュリティを使用したマルチテナント アプリケーション~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-tools-multi-tenant-row-level-security/ ---Azure SQL Database エラスティック データベース プールの価格およびパフォーマンスに関する考慮事項~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-pool-guidance/ *サンプルを実行する方法 [#qfbdd1bd] https://github.com/OpenTouryoProject/SampleProgram/blob/master/Azure/ElasticDatabase/ElasticDB_Sample/ -参考 --Get started with elastic database tools~ https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-scale-get-started/ --Elastic Database ツールの概要~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-get-started/ 以下の処理を実行する。 #ref(SamplesInstructions.png,left,nowrap,実行する処理) **前提 [#fa9aec0a] ***Azure SQL database [#ke5af3ce] Azure SQL database (V12 servers) ***Visual Studio [#d39007d3] Visual Studio 2012 or higher with C# is required. ***.NET Framework [#b6a304a7] .NET Framework 4.5 or a later version ***library [#n2f03e7d] -Nuget 2.7 or higher. --[[Elastic Database Client Library>#j3beda01]]. **Azure SQL databasesの準備 [#qfcbc932] ***Azure SQL databasesの作成 [#m7b8346b] -Azure portalからSQL databases(naned ElasticDatabase)を作成する。 #ref(CreateElasticDatabase.png,left,nowrap,Elastic databaseの作成) ***接続文字列を設定する。 [#q6ba90f7] -接続文字列は、Configuration.GetCredentialsConnectionString()methodが作成する。~ https://github.com/OpenTouryoProject/SampleProgram/blob/master/Azure/ElasticDatabase/ElasticDB_Sample/ElasticScaleStarterKit/Configuration.cs#L86 -ElasticDatabaseをクリックする。 -ダッシュボードから接続文字列を取得する。 #ref(GetConnectionString.png,left,nowrap,接続文字列を取得) -接続文字列をconfigに設定する。~ https://github.com/OpenTouryoProject/SampleProgram/blob/master/Azure/ElasticDatabase/ElasticDB_Sample/ElasticScaleStarterKit/App.config #ref(SetConnectionString.png,left,nowrap,接続文字列をconfigに設定) -このサンプルでSQLServer+Windows認証を使用する場合、以下の設定が必要(テスト用?)。 <add key="IntegratedSecurity" value="true" /> >注:この設定はサンプル独自の設定 **ShardMapの準備 [#ycff9892] ***ShardMapとShardの作成 [#o32bc7b5] -以下のコードは、ShardMapとShardを作成するためのもの。~ https://github.com/OpenTouryoProject/SampleProgram/blob/master/Azure/ElasticDatabase/ElasticDB_Sample/ElasticScaleStarterKit/Program.cs#L207 #ref(CreateShardMap.png,left,nowrap,ShardMapの作成) -オプション1でコードを実行した時にShardMapとShardが作成される。 #ref(CreatedShardMap.png,left,nowrap,ShardMapの作成結果) -オプション2で追加のShardが作成される。 #ref(AddShardMap.png,left,nowrap,ShardMapの追加) ***ShardMapとShardの確認 [#f2aa4611] 追加されたShardMapとShard([[SQL Server]]のInstance)を確認。 -ポータルからShardMapとShardを確認。 #ref(AddedShardMap.png,left,nowrap,追加されたShardMapとShardの確認) -Visual StudioからShardMapとShardを確認。 #ref(AddedShardMap2.png,left,nowrap,追加されたShardMapとShardの確認2) **DataDependentRoutingでShardに行挿入 [#yac84f07] ***Shardへの行挿入 [#o6359832] -以下のコードは、Data Dependent Routingで行挿入するためのもの。~ https://github.com/OpenTouryoProject/SampleProgram/blob/master/Azure/ElasticDatabase/ElasticDB_Sample/ElasticScaleStarterKit/DataDependentRoutingSample.cs #ref(ExecuteDataDependentRoutingQuery.png,left,nowrap,Dependent Routingで行挿入) -オプション3で上記コードを実行した時にData Dependent Routingで行挿入される (このIDの場合、Shard2に挿入される)。 #ref(InsertedByDataDependentRoutingQuery.png,left,nowrap,Dependent Routingで行挿入) ***Shardへ挿入された行を確認 [#s6b64e98] -ManagementStudioからShard2に挿入された行を確認する。 #ref(AddedRowToShard.png,left,nowrap,Shardに挿入された行を確認) **MultiShardQueryの実行 [#pf40906a] -以下のコードは、MultiShardQueryで行をSELECTするためのもの。~ https://github.com/OpenTouryoProject/SampleProgram/blob/master/Azure/ElasticDatabase/ElasticDB_Sample/ElasticScaleStarterKit/MultiShardQuerySample.cs#L27 #ref(ExecuteMultiShardQuery.png,left,nowrap,MultiShardQueryで行をSELECT) -オプション4で上記コードを実行した時にMultiShardQueryで行がSELECTされる (このIDの場合、Shard2の行がSELECTされる)。 #ref(SelectedByMultiShardQuery.png,left,nowrap,MultiShardQueryで行をSELECT) **ShardMapの削除 [#cdaa1e97] -以下のコードは、ShardMapとShardを削除するためのもの。~ https://github.com/OpenTouryoProject/SampleProgram/blob/master/Azure/ElasticDatabase/ElasticDB_Sample/ElasticScaleStarterKit/Program.cs#L319 #ref(DropShardMap.png,left,nowrap,ShardMapの削除) -オプション5でコードを実行した時にShardMapとShardが削除される。 #ref(DroppedShardMap.png,left,nowrap,ShardMapの削除結果) *Open棟梁の Elastic Database 対応 Dam [#cca83078] **[[DamSqlDbWithMultiShard>https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamSqlDbWithMultiShard]]の取り込み [#f2e3b3d2] 以下の差分のように、コードを修正して[[DamSqlDbWithMultiShard>https://github.com/OpenTouryoProject/OpenTouryo/tree/develop/root/programs/CS/Frameworks/Infrastructure/Public/Db/DamSqlDbWithMultiShard]]を取り込むことができる。 https://github.com/OpenTouryoProject/OpenTouryoTemplates/compare/01-72...azuretmplt-chngs **Elastic Database 対応 Damのサンプル [#ee70bf45] https://github.com/OpenTouryoProject/SampleProgram/tree/master/Azure/ElasticDatabase/ElasticDB_Sample2/ 前述の「[[サンプルを実行する方法>#qfbdd1bd]]」と同じ方法で実行できる。 *参考 [#s6820481] -Elastic Database ツール機能の概要~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-introduction/ --Azure SQL Database エラスティック データベース クエリの概要~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-query-overview/ --Azure SQL Database - クライアント ライブラリ~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-database-client-library/ ---シャード マップ管理~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-shard-map-management/ ---データ依存ルーティング~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-data-dependent-routing/ ---マルチシャード クエリ実行~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-multishard-querying/ --エラスティック データベース分割/マージ ツールを使用したスケーリング~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-overview-split-and-merge/ --Elastic Scale のセキュリティの構成(分割/マージサービスの利用に必要)~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-scale-split-merge-security-configuration/ --その他 ---Elastic Database ジョブの概要~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-jobs-overview/ ---弾力性データベース ツールと行レベルのセキュリティを使用したマルチテナント アプリケーション~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-tools-multi-tenant-row-level-security/ ---Azure SQL Database エラスティック データベース プールの価格およびパフォーマンスに関する考慮事項~ https://azure.microsoft.com/ja-jp/documentation/articles/sql-database-elastic-pool-guidance/ ---- Tags: [[:データアクセス]], [[:ADO.NET]], [[:Azure]]