マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。

目次

概要

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もサポートしない。

TransactionとRetry policy

Transaction (Elastic database transactions)

  • TransactionScopeをサポートする。
  • 複数Instanceを跨いだクエリを実行する場合、TransactionScopeを使用する。
  • Data Dependent Routingのシナリオのみで有効。

Retry policy (SqlDatabaseUtils?.SqlRetryPolicy?)

Windows Azure AppFabric? Customer Advisory チーム (CAT) と patterns & practices チームが開発したライブラリ。

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

TransactionScopeとRetry policyの関連

  • 双方とも、Data Dependent Routingのシナリオのみで有効。
  • TransactionScopeとRetry policyの範囲は、TransactionScope < Retry policyとなる。

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?)を作成する。
    Elastic databaseの作成

接続文字列を設定する。

  • ElasticDatabase?をクリックする。
  • ダッシュボードから接続文字列を取得する。
    接続文字列を取得
  • このサンプルでSQLServer+Windows認証を使用する場合、以下の設定が必要(テスト用?)。
    <add key="IntegratedSecurity" value="true" />

    注:この設定はサンプル独自の設定

ShardMap?の準備

ShardMap?とShardの作成

  • オプション1でコードを実行した時にShardMap?とShardが作成される。
    ShardMapの作成結果
  • オプション2で追加のShardが作成される。
    ShardMapの追加

ShardMap?とShardの確認

追加されたShardMap?とShard(SQL ServerのInstance)を確認。

  • ポータルからShardMap?とShardを確認。
    追加されたShardMapとShardの確認
  • Visual StudioからShardMap?とShardを確認。
    追加されたShardMapとShardの確認2

DataDependentRouting?でShardに行挿入

Shardへの行挿入

  • オプション3で上記コードを実行した時にData Dependent Routingで行挿入される (このIDの場合、Shard2に挿入される)。
    Dependent Routingで行挿入

Shardへ挿入された行を確認

  • ManagementStudio?からShard2に挿入された行を確認する。
    Shardに挿入された行を確認

MultiShardQuery?の実行

  • オプション4で上記コードを実行した時にMultiShardQuery?で行がSELECTされる (このIDの場合、Shard2の行がSELECTされる)。
    MultiShardQueryで行をSELECT

ShardMap?の削除

  • オプション5でコードを実行した時にShardMap?とShardが削除される。
    ShardMapの削除結果

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


添付ファイル: fileDroppedShardMap.png 136件 [詳細] fileDropShardMap.png 143件 [詳細] fileSelectedByMultiShardQuery.png 139件 [詳細] fileExecuteMultiShardQuery.png 147件 [詳細] fileAddedRowToShard.png 130件 [詳細] fileInsertedByDataDependentRoutingQuery.png 142件 [詳細] fileExecuteDataDependentRoutingQuery.png 131件 [詳細] fileAddedShardMap2.png 118件 [詳細] fileAddedShardMap.png 136件 [詳細] fileGetConnectionString.png 126件 [詳細] fileCreateElasticDatabase.png 138件 [詳細] fileAddShardMap.png 130件 [詳細] fileCreatedShardMap.png 139件 [詳細] fileSamplesInstructions.png 134件 [詳細] fileCreateShardMap.png 111件 [詳細] fileSetConnectionString.png 131件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-07-30 (月) 16:18:48 (52d)