Share via

Some issues with Purview's under-the-hood implementation.

Mofei Zhuang 140 Reputation points Microsoft Employee
2026-06-17T03:55:13.85+00:00
  1. What is the current write limit and the maximum concurrent write limit for a single Purview Account? Under what specific circumstances will an HTTP 408 error be triggered?
  2. I would like to know about the underlying architecture of Purview. Is the Index layer currently implemented using Azure AI Search (formerly Azure Search)? And is Azure Cosmos DB used for the data storage layer?
  3. Based on my testing, if an Entity contains a large number of relationships, querying it is still significantly slower than querying an entity without relationships, even when ignoreRelationship=true is specified. What is the technical reason behind this behavior?
Microsoft Security | Microsoft Purview

1 answer

Sort by: Most helpful
  1. Mofei Zhuang 140 Reputation points Microsoft Employee
    2026-06-18T23:31:21.3766667+00:00
    • For Submit Scenario

    Here is the sample data structure, we are using custom entity, please see response_1781823816744.txt

    and for QualifiedName field we use in this formart : pds://bench-rel-20260618050106/sub/0008ba92-f566-482b-8ea6-95b06465a802/appinsights/res-appinsights-0008ba92-0014

    From the test result I found that :

    we put 200 entities for a batch to submit , because when we add more than this it will occur an error like the URL is too long or some like that error info.

    If the request can success, the avg cost time will be around 4000 ms. (without any relationship, just the independent entities)

    So, my question is there any other way I can submit more for one time. Or is there any optimization I can do to accelerate the submit process.

    We're using DataMapClient.GetEntityClient().BatchCreateOrUpdateAsync to batch Submit

    • For Catalog search

    Here is the way we use catalog to search our target entities, I found that even I remove all the relationship the query perf is not so satisficed.

    Can you help me to check if is the right way to use the catalog search ?

                `var prodSubResults = await _catalogService.SearchEntityByServiceIdAndAttributesAsync(`
    

    new Dictionary<string, string>

    {

    { "ServiceId", serviceId },

    { "Environment", "Prod" }

    },

    CustomEntityConstants.SUBSCRIPTION_CUSTOM_ENTITY_NAME,

    FilterOperator.Eq);

    public async Task<IEnumerable<SearchResultValue>> SearchEntityByServiceIdAndAttributesAsync(IReadOnlyDictionary<string, string> attrDic, string typeName, FilterOperator Oper)

    {

    var filters = new List<object>

    {

    new { typeName = typeName }

    };

    foreach (var kvp in attrDic)

    {

    filters.Add(new

    {

    attributeName = kvp.Key,

    @operator = Oper.GetEnumMemberValue(),

    attributeValue = kvp.Value

    });

    }

    var resList = new List<SearchResultValue>();

    string? continuationToken = null;

    var config = new QueryConfig

    {

    Limit = 1000,

    Filter = BinaryData.FromObjectAsJson(new

    {

    and = filters

    }),

    };

    do

    {

    var response = await purviewClient.DataMapClient.GetDiscoveryClient().QueryAsync(config);

    resList.AddRange(response.Value.Value ?? Enumerable.Empty<SearchResultValue>());

    continuationToken = response.Value.ContinuationToken;

    config.ContinuationToken = continuationToken;

    } while (!string.IsNullOrEmpty(continuationToken));

    return resList;

    }

    Was this answer helpful?


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.