Open棟梁Project - マイクロソフト系技術情報 Wiki
目次 †
概要 †
RDBMSでのステートフルなデータ処理では難しかった、
拡張性+弾力性をアプリケーションに提供する。
- スケールアウト(水平分散)が可能
- アプリケーションをマルチテナント化する。
- インスタンス横断なトランザクション処理(ACID)
- その際に、アプリケーションの変更は不要。
(ただし、Elastic database client libraryで作成し直す必要がある)
機能 †
Elastic Database tools †
- DB シャーディングの構築と管理。
- 2種類のツールが存在する。
Elastic Database Client Library †
DB シャーディングのクライアント・アプリケーションの開発。
- Shard Map Management
- シャードのコレクションを管理する"shard map manager"と呼ばれる特殊なデータベースを管理する。
- "shard map manager"は、スケールアウトされたデータベースを横断して、メタデータを管理する。
- Data Dependent Routing
1回の呼び出しでテナントに対応するデータベースと接続する。
- Multi-Shard Queries
1回の呼び出しでシャードに跨ったデータを1つの結果セットに集約する。
Elastic Database Split-merge tool †
- DB シャーディングのスケールアウト(スケールイン)
- シャード マップの再構築などを行う。
Elastic Database Pools †
- 一定量のDTU (Database Throughput Unit)の管理をする。
- 大量のElastic Database Poolsの性能・コスト管理を容易にする。
- ポータル、PowerShell、.NETライブラリを使用して、
Elastic Database Poolsを管理することができる。
Elastic Database Jobs †
Elastic database client library を使用し、
- Elastic Database Pool と shard setの全データベース横断のTransact-SQL (T-SQL)を実行できる。
- なお、このクエリは、DMLだけではなく、DDL、運用・保守タスクも実行できる。
- スキーマ変更
- 資格情報管理
- 参照データの更新
- パフォーマンスデータの収集
- テナント(顧客)遠隔操作
Elastic Database query †
Elastic database client library を使用し、
- Elastic Database Pool と shard setの全データベース横断のTransact-SQL (T-SQL)を実行できる。
- Microsoftとサードパーティ製のBIツール(Excel, PowerBI, Tableau, etc.)に接続から接続し、データベースを跨いだリモートテーブルへのアクセスが可能。
水平および垂直方向のスケーリング †
クラウド規模のデータベース アプリケーションでは、
容量または全体のパフォーマンスを調整するために、
2 つのスケーリング手法を組み合わせて使用する。
水平方向のスケーリング †
Elastic Database Poolsから、データベースを追加または削除する。
これは、Elastic database client libraryで管理する。
垂直方向のスケーリング †
個々のデータベースのパフォーマンス レベルを増減する。
これには、以下の方法で対応する。
- Azure PowerShell コマンドレットを使用する。
- Elastic Database Poolsのデータベースのパフォーマンス レベルを変更する。
シングルテナント パターンとマルチテナント パターン †
- スケールアウトを目的とする。
- マルチテナント化を目的とする。
※ SaaSのユーザや企業をテナントと呼ぶ。
シングルテナント パターン †
- 各データベース・インスタンスは
特定のテナント ID 値 (または顧客キー値) に関連付けられる。
- テナント ID 値 (または顧客キー値) がデータに存在する必要は無い。
- 要求をデータベースにルーティングするのはアプリケーションの役目。
Elastic database client libraryはこの作業を簡素化できる。
マルチテナント パターン †
- 各データベース・インスタンスは
複数のテナント ID 値 (または顧客キー値) に関連付けられる。
- テナント ID 値 (または顧客キー値) がデータに存在する必要がある。
- アプリケーションは多数の小さなテナントを管理する必要がある。
- 要求をデータベースにルーティングするのはアプリケーションの役目。
Elastic database client libraryはこの作業を簡素化できる。
- 複数のデータベース間でのデータ再分散(シャード マップの再構築)が必要になる。
Elastic Database Split-merge toolはこの作業を簡素化できる。
パターン変更のシナリオ †
評価期間 †
見込顧客に試用版のソフトウェアを提供する場合、マルチテナント パターンを採用する。
理由:費用対効果を高めることができる。
本稼働 †
見込顧客との契約が完了した場合、シングルテナント データベースを採用する。
理由:パフォーマンスが向上する。
また、試用版を使用していた場合は、Elastic Database Split-merge toolを使用して、
マルチテナント データベースから新しいシングルテナント データベースにデータを移行する。
追加の調査 †
https://github.com/OpenTouryoProject/OpenTouryo/issues/144
SQLの実行方法 †
Data Dependent Routing †
- Connectionオブジェクトの取得方法が変わるだけ。
- SQLの実行自体は、従来のSQLClientを使用する。
Multi-Shard Queries †
- 参照クエリ専用。
- DataReader?のみサポートする。
- Adapter系はサポートしない。
TransactionとRetry policy †
Transaction (Elastic database transactions) †
Retry policy (SqlDatabaseUtils?.SqlRetryPolicy?) †
Windows Azure AppFabric? Customer Advisory チーム (CAT) と patterns & practices チームが開発したライブラリ。
- クエリによって成功する可能性の高い処理のリトライを行う。
- Data Dependent Routingのシナリオのみで有効。
Row-Level Security †
参考 †
サンプルを実行する方法 †
https://github.com/OpenTouryoProject/SampleProgram/blob/master/Azure/ElasticDatabase/ElasticDB_Sample/
以下の処理を実行する。
前提 †
Azure SQL database †
Azure SQL database (V12 servers)
Visual Studio †
Visual Studio 2012 or higher with C# is required.
.NET Framework †
.NET Framework 4.5 or a later version
library †
- Nuget 2.7 or higher.
- Elastic database client library.
Azure SQL databasesの準備 †
Azure SQL databasesの作成 †
- Azure portalからSQL databases(naned ElasticDatabase?)を作成する。
接続文字列を設定する。 †
- ElasticDatabase?をクリックする。
- ダッシュボードから接続文字列を取得する。
ShardMap?の準備 †
ShardMap?とShardの作成 †
- オプション1でコードを実行した時にShardMap?とShardが作成される。
ShardMap?とShardの確認 †
追加されたShardMap?とShard(SQL ServerのInstance)を確認。
- ポータルからShardMap?とShardを確認。
- Visual StudioからShardMap?とShardを確認。
DataDependentRouting?でShardに行挿入 †
Shardへの行挿入 †
- オプション3で上記コードを実行した時にData Dependent Routingで行挿入される
(このIDの場合、Shard2に挿入される)。
Shardへ挿入された行を確認 †
- ManagementStudio?からShard2に挿入された行を確認する。
MultiShardQuery?の実行 †
- オプション4で上記コードを実行した時にMultiShardQuery?で行がSELECTされる
(このIDの場合、Shard2の行がSELECTされる)。
ShardMap?の削除 †
- オプション5でコードを実行した時にShardMap?とShardが削除される。
Open棟梁の Elastic Database 対応 Dam †
[[DamSqlDbWithMultiShard>]]の取り込み †
以下の差分のように、コードを修正して[[DamSqlDbWithMultiShard>]]を取り込むことができる。
https://github.com/OpenTouryoProject/OpenTouryoTemplates/compare/01-72...azuretmplt-chngs
Elastic Database 対応 Damのサンプル †
https://github.com/OpenTouryoProject/SampleProgram/tree/master/Azure/ElasticDatabase/ElasticDB_Sample2/
前述の「サンプルを実行する方法」と同じ方法で実行できる。
Tags: :データアクセス, :ADO.NET, :Azure