次の方法で共有


Elastic Database ツールを使用してシャードを追加する

適用対象:Azure SQL データベース

新しい範囲やキーに対してシャードを追加する

多くの場合、アプリケーションは、既に存在しているシャード マップに対し、新しいキーまたはキー範囲から予想されるデータを処理するために新しいシャードを追加する必要があります。 たとえば、 TenantID によってシャード化されたアプリケーションでは、新しいテナントの新しいシャードを作成する必要がある場合や、毎月シャード化されたデータで、新しい月の開始前に新しいシャードをプロビジョニングする必要がある場合があります。

キー値の新しい範囲が既存のマッピングにまだ含まれていない場合、新しいシャードを追加し、そのシャードに新しいキーまたは範囲を関連付けることができます。

例: シャードとその範囲を既存のシャード マップに追加する

このサンプルでは、 TryGetShard (Java.NET) CreateShard (Java.NET)、 CreateRangeMapping (Java.NET メソッド) を使用し、 ShardLocation (Java.NET) クラスのインスタンスを作成します。 次の例では、範囲 [300, 400] を保持するために、 sample_shard_2 という名前のデータベースとその中のすべての必要なスキーマ オブジェクトが作成されています。

// sm is a RangeShardMap object.
// Add a new shard to hold the range being added.
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer, "sample_shard_2"));  
}

// Create the mapping and associate it with the new shard
sm.CreateRangeMapping(new RangeMappingCreationInfo<long>
                            (new Range<long>(300, 400), shard2, MappingStatus.Online));

既存の範囲の空きパーツ用のシャードを追加する

状況によっては、既に範囲をシャードにマップし、部分的にデータを入力している可能性がありますが、今後のデータを別のシャードに転送する必要があります。 たとえば、日単位で範囲のシャーディングを実行し、既に 50 日がシャードに割り当てられているが、24 日目に今後のデータを別のシャードに保存できます。 エラスティック データベースの Split-Merge ツールでこの操作を実行できますが、データ移動が不要な場合 (たとえば [25、50) 日の範囲のデータはまだ存在していません。これは 25 日の分を含み 50 日の分を除くデータです) は、シャード マップ管理 API を直接使用することで操作全体を実行できます。

例: 範囲の分割と新しく追加したシャードへの空き部分の割り当て

sample_shard_2という名前のデータベースと、その中に必要なすべてのスキーマ オブジェクトが作成されています。

// sm is a RangeShardMap object.
// Add a new shard to hold the range we will move
Shard shard2 = null;

if (!sm.TryGetShard(new ShardLocation(shardServer, "sample_shard_2"),out shard2))
{
    shard2 = sm.CreateShard(new ShardLocation(shardServer,"sample_shard_2"));  
}

// Split the Range holding Key 25
sm.SplitMapping(sm.GetMappingForKey(25), 25);

// Map new range holding [25-50) to different shard:
// first take existing mapping offline
sm.MarkMappingOffline(sm.GetMappingForKey(25));

// now map while offline to a different shard and take online
RangeMappingUpdate upd = new RangeMappingUpdate();
upd.Shard = shard2;
sm.MarkMappingOnline(sm.UpdateMapping(sm.GetMappingForKey(25), upd));

重要

この手法は、更新されるマッピング用の範囲が空であることが確実である場合のみ使用します。 上記の方法では、移動される範囲のデータはチェックされないので、コードにチェックを含めることをお勧めします。 移動される範囲内に行が存在する場合、実際のデータ分布は更新されたシャード マップと一致しなくなります。 このような場合は、 分割/マージ ツール を代わりに使用して操作を行ってください。

まだ弾力性データベース ツールを使用していない場合は、 ファースト ステップ ガイドを参照してください。 ご質問がある場合は、SQL Database に関する Microsoft Q&A 質問ページを参照してください。機能に関するご要望は、SQL Database に関するフィードバック フォーラムで新しいアイデアを追加したり、既存のアイデアに投票したりしてください。