Azure SQL Database Elastic Scale の4大改良点 – Federationの失敗を糧にしたサービス

Azure SQL Database Elastic Scale のプレビューが発表されました!
何かと言うと、Azure SQL Database の組み込みのシャーディング(データ分割、分散)サービスです。

同様のサービスとして、Azure SQL Database Federation がありました。
Federation は正直失敗だった。
だから、Azure SQL Database Federation は、新しい提供モデルでは廃止されることが発表されていました。

なのに、今再びのシャーディングサービス。
でも、Federationでの失敗、およびAzure SQL Database の支援を通して培った経験を元に、
今度は期待できるサービスとなっています。

Federationと何が違うの?

結構、いろいろあるのですが個人的に大きい!っと思うものをピックアップ。

1. ライブラリ提供

Federationではライブラリが提供されておらず、各自でFederation用の中間コードを書く必要があり、使い勝手が悪かったのです。そのため、Federationサービスを使用せず、各自でシャーディングロジックを書くケースがありました。
Federationの成功可否は、ライブラリ提供!っと思っていました。

今回は初めから提供されています!
まずは、APIインターフェイスがあるのが大きい。
APIがあるので、クライアントライブラリがる。

Nugetで、Azure SQL Database Elastic Scale Clientが公開されています。
また管理用に、PowerShell(Shard Elastic PowerShellファイル)がサンプルですが提供されています。つまり、Azure Automationサービスとの組み合わせが可能。

2. 参照テーブルのレプリケーション

FederationでもElastic Scaleでも、参照テーブルが提供されます。
マスターテーブルなどシャーディング不要、もしくはシャーディングしたいくないテーブルは、参照用テーブルとして各分散データベースに配置することができました。

Federationでは、splitした後に参照用テーブルを更新するには、全シャーディングデータベースの参照用テーブルに対して更新する必要がありました。

Elastic Scale の参照テーブルでは、レプリケーションされます!素敵!
(レプリケーション頻度や、パフォーマンス、同期レプリケーションにできるのかは要確認)

10/3 11:12 修正:勘違い。そんな機能無かった…。

3. 複数シャードへのクエリ発行

Federationでは、特定シャードへのクエリ発行しかサポートされていませんでした。
複数のシャードにまたがるクエリを発行したい場合は、
アプリケーション側で、それぞれのシャードに個別にクエリを発行し取得した結果をアプリケーション側でマージする必要がありました。
ライブラリも提供されていないので、ユーザーが作りこむ必要がありました。

Elastic Scale では複数シャードへのクエリ発行がサポートされます!
UNION ALLを使用して結果セットを返してくれるので、とても楽になりましたね。

4. シャーディングルールがRangeに加えListも可能

Federationで提供されていたシャーディングルールは、Rangeだけでした。
Rangeパーティションですね。
シャーディングキー何番から何番までっと区切っていく方法ですね。

Elastic Scale では、リストシャードマップを作成できます。
何番と何番は、データベースAみたいに指定できるようになり、柔軟なシャーディングが実現できるようになりましたね。

5. シャーディングのセキュリティ強化

Elastic Scale では、シャーディングの実行(マージやスプリット)をできるユーザー、
シャーディングマップを参照だけできるユーザーというように、セキュリティ制御できるようになりました。