「[[マイクロソフト系技術情報 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で作成し直す必要がある)

*機能 [#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 シャーディングのスケールアウト(スケールイン)
-シャード マップの再構築などを行う。

**Elastic Database Pools [#fd755a7f]
-一定量のDTU (Database Throughput Unit)の管理をする。
-大量のElastic Database Poolsの性能・コスト管理を容易にする。
-ポータル、PowerShell、.NETライブラリを使用して、~
Elastic Database Poolsを管理することができる。

**Elastic Database Jobs [#n020579e]
Elastic database client library を使用し、
-Elastic Database Pool と shard setの全データベース横断のTransact-SQL (T-SQL)を実行できる。
-なお、このクエリは、DMLだけではなく、DDL、運用・保守タスクも実行できる。
--スキーマ変更
--資格情報管理
--参照データの更新
--パフォーマンスデータの収集
--テナント(顧客)遠隔操作

**Elastic Database query [#h5e9b0af]
Elastic database client library を使用し、
-Elastic Database Pool と shard setの全データベース横断のTransact-SQL (T-SQL)を実行できる。
-Microsoftとサードパーティ製のBIツール(Excel, PowerBI, Tableau, etc.)に接続から接続し、データベースを跨いだリモートテーブルへのアクセスが可能。

*水平および垂直方向のスケーリング [#he8047ae]
クラウド規模のデータベース アプリケーションでは、~
容量または全体のパフォーマンスを調整するために、~
2 つのスケーリング手法を組み合わせて使用する。

**水平方向のスケーリング [#c1916c76]
Elastic Database Poolsから、データベースを追加または削除する。
-追加:スケール・アウト
-削除:スケール・イン

これは、Elastic database client libraryで管理する。

**垂直方向のスケーリング [#n5dd0a5b]
個々のデータベースのパフォーマンス レベルを増減する。
-増:スケールアップ
-減:スケールダウン

これには、以下の方法で対応する。
-Azure PowerShell コマンドレットを使用する。
-Elastic Database Poolsのデータベースのパフォーマンス レベルを変更する。

*シングルテナント パターンとマルチテナント パターン [#w8dacdad]
-スケールアウトを目的とする。
-マルチテナント化を目的とする。

※ SaaSのユーザや企業をテナントと呼ぶ。

**シングルテナント パターン [#cec7aeb2]
-各データベース・インスタンスは~
特定のテナント ID 値 (または顧客キー値) に関連付けられる。

-テナント ID 値 (または顧客キー値) がデータに存在する必要は無い。

-要求をデータベースにルーティングするのはアプリケーションの役目。~
Elastic database client libraryはこの作業を簡素化できる。

**マルチテナント パターン [#r3133a13]
-各データベース・インスタンスは~
複数のテナント ID 値 (または顧客キー値) に関連付けられる。

-テナント ID 値 (または顧客キー値) がデータに存在する必要がある。

-アプリケーションは多数の小さなテナントを管理する必要がある。

-要求をデータベースにルーティングするのはアプリケーションの役目。~
Elastic database client libraryはこの作業を簡素化できる。

-複数のデータベース間でのデータ再分散(シャード マップの再構築)が必要になる。~
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のシナリオのみで有効。

***Retry policy (SqlDatabaseUtils.SqlRetryPolicy) [#x1d37f82]
Windows Azure AppFabric Customer Advisory チーム (CAT) と patterns & practices チームが開発したライブラリ。

-クエリによって成功する可能性の高い処理のリトライを行う。
-Data Dependent Routingのシナリオのみで有効。

***TransactionScopeとRetry policyの関連 [#ua857e99]
-双方とも、Data Dependent Routingのシナリオのみで有効。
-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.

**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]]」と同じ方法で実行できる。

----
Tags: [[:データアクセス]], [[:ADO.NET]], [[:Azure]]

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS