SQL API CosmosDB, все еще пытающийся получить список разделов и их размеры - PullRequest
0 голосов
/ 07 июня 2018

Я видел кучу ответов на StackOverflow, в которых говорилось, что Microsoft Cosmosdb просто не поддерживает получение списка ключей разделов.Это беспокоит меня, так как кажется, что для любого хранилища данных требуется какое-то нулевое требование, чтобы получить список имен и размеров логических разделов - любое другое хранилище данных даст вам такие вещи, как размеры таблиц, и я не могу поверитьMicrosoft оставила бы это.

Я не думаю, что они это сделают, поэтому это просто не должно быть задокументировано (или, по крайней мере, задокументировано).В следующем коде:

var client = new DocumentClient(
                    endpoint,
                    authKey

Database db = client.CreateDatabaseQuery().Where(d => d.Id == databaseName).AsEnumerable().FirstOrDefault();

//Sure is a lot of verbose faff.  Have to keep specifying things you've already basically specified when you initialized the client...
var collection = client.CreateDocumentCollectionQuery(databaseSelfLink).Where(c => c.Id == myCollectionName).ToArray().FirstOrDefault();

//This yields "/$pk" in the value - so I guess there's just one path, 
//but I still have a lot of distinct values in that path.  
//I try a DocumentQuery next to drill down.
var partitionKeys = collection.PartitionKey.Paths;  

var querySpec = new SqlQuerySpec("SELECT DISTINCT c.PartitionKey FROM c");
var test = client.CreateDocumentQuery(collection.SelfLink, querySpec);

когда я ставлю точку останова после этой последней строки и смотрю на тестовый объект, я вижу, что у него есть ak подобъекты, каждый из которых имеет целочисленное значение.Я не уверен, что это, но могут ли они быть разделами и размерами?Есть ли лучший способ вытащить их?

1 Ответ

0 голосов
/ 08 июня 2018

У меня есть небольшой ответ, хотя и не полный.Поэтому я не буду помечать ответ на этот вопрос.

Я нашел этот документ: https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.documents.documentcollection.partitionkeyrangestatistics?view=azure-dotnet

Вот некоторый модифицированный код, отодвигающий разделы и размеры.Он гарантирует создание отчетов только для разделов размером> 1 ГБ в соответствии с приведенным выше документом, хотя самый маленький зарегистрированный раздел, который я видел до сих пор, составляет 42 МБ:

var client = new DocumentClient(
                    endpoint,
                    authKey
Database db = client.CreateDatabaseQuery().Where(d => d.Id == databaseName).AsEnumerable().FirstOrDefault();
var collection = client.CreateDocumentCollectionQuery(databaseSelfLink).Where(c => c.Id == myCollectionName).ToArray().FirstOrDefault();
collection = await client.ReadDocumentCollectionAsync(
            collection.SelfLink,
            new RequestOptions { PopulatePartitionKeyRangeStatistics = true });
        Console.WriteLine(collection.PartitionKeyRangeStatistics.ToString());

Так что теперь все, что мне нужно сделать, - это проанализировать строки с помощьюсообщаемые имена и размеры разделов.У меня все еще будут дополнительные вопросы, касающиеся динамического создания новых разделов, чтобы создать систему, которая может правильно масштабироваться при использовании полностью подготовленных RU.

...