ストレージのパーティションを活用してエンティティ データにアクセスする際のパフォーマンスを向上させる
オプションのパーティション キーを指定して、Azure heterogenous storage の NoSql テーブルに格納された非リレーショナル カスタム エンティティ データの論理的パーティションを作成できます (Azure Cosmos DB).。 パーティション キーがあることで、データ項目をテーブル内の論理的なセットにグループ化できるため、大規模なデータセット (数百万レコード) のアプリケーション パフォーマンスが向上します。 たとえば、製品を含むテーブルを製品カテゴリーに論理的にグループ化することで、製品カテゴリー内のすべてのアイテムを検索しやすくすることができます。 パーティション キーの値は、文字列または数値タイプにできます。 一度指定すると、パーティション キーの値は変更できません。
パーティション キーが指定されていない場合、テーブルが論理的な境界となり、大規模なデータセットから単一のアイテムまたは論理的に関連する項目のセットを取得しても、パーティション キーを使用した場合ほどのパフォーマンスは発揮できません。
パーティションの作成とアクセス
新しい論理パーティションを作成するには、一意の新しいパーティション キー値を使用する必要があります。 同じ論理パーティションに追加の項目を作成したり、その論理パーティションに属する項目を取得、更新、削除する際には、同じ値を使用する必要があります。
public void Run(CrmServiceClient client)
{
// Create
Entity entity = new Entity("new_msdyn_customer");
entity["new_firstname"] = "Monica";
entity["new_lastname"] = "Thompson";
// First use of the partition ID value during an entity Create operation
// also creates the partition where that entity record is stored.
entity["partitionid"] = "CustomerPartition";
Guid id = client.Create(entity);
// Update
UpdateRequest updateRequest = new UpdateRequest();
entity = new Entity("new_msdyn_customer", id);
entity["new_firstname"] = "Cora";
//entity["new_lastname"] = "Thomas";
entity["partitionid"] = "CustomerPartition";
updateRequest.Target = entity;
var updateResponse = (UpdateResponse)client.Execute(updateRequest);
// Retrieve
RetrieveRequest request = new RetrieveRequest();
request.ColumnSet = new ColumnSet("new_firstname");
request.Target = new EntityReference("new_msdyn_customer", id);
request["partitionId"] = "CustomerPartition";
var response = (RetrieveResponse)client.Execute(request);
// RetrieveMultiple
RetrieveMultipleRequest retreiveMultipleRequest = new RetrieveMultipleRequest();
retreiveMultipleRequest.Query = new QueryExpression()
{
EntityName = "new_msdyn_customer",
ColumnSet = new ColumnSet("new_firstname")
};
retreiveMultipleRequest["partitionId"] = "CustomerPartition";
var retrieveResponse = (RetrieveMultipleResponse)client.Execute(retreiveMultipleRequest);
// Update and insert
UpsertRequest upsertRequest = new UpsertRequest();
entity = new Entity("new_msdyn_customer", id);
entity["new_firstname"] = "Andre";
entity["new_lastname"] = "Lawson";
entity["partitionid"] = "CustomerPartition";
upsertRequest.Target = entity;
var upsertResponse = (UpsertResponse)client.Execute(upsertRequest);
// Delete
DeleteRequest deleteRequest = new DeleteRequest();
deleteRequest.Target = new EntityReference("new_msdyn_customer", id);
deleteRequest["partitionId"] = "CustomerPartition";
var deleteResponse = (DeleteResponse)client.Execute(deleteRequest);
}
追加情報
パーティション キーとパーティション管理の詳細を次に示します。
- キー値は、環境内で一意である必要があります。
- パーティションのデータ容量は 20GB に制限されており、パーティションの現在のサイズを確認する方法はありません。
- ひとつの環境で割り当てられるパーティションの数に定義された制限はありません。
- パーティションの割り当ては自動的に行われます。 作成の操作中に一意のパーティション キーを指定すると、パーティションが作成されます。 パーティションからすべてのデータが削除されると、パーティションは自動的に削除されます。
- キーの名前を変更する方法はありません。
- 現時点では、エンティティの作成、更新、取得、削除操作のみがストレージのパーティション分割に対応しています。
関連項目
要求のオプション パラメーターを渡す
組織サービスを使用したエンティティの作成
組織サービスを使用してエンティティを取得する
組織サービスを使用したエンティティの更新と削除
Azure Cosmos DB におけるパーティション分割と水平スケーリング