关于Kusto Query V2(.NET SDK)的技术细节与性能问询
ADX查询API V2相关疑问(文档缺失补充)
1. ProgressiveDataSet工作机制
- SDK如何通过HTTP将数据拉取到ProgressiveDataSet中?
- 所谓的“frames”是什么?其大小上限是多少?相比传统方式有何优势?
- 该方式的开销有多大?
2. HTTP通信差异
- V2查询的HTTP流量形态是怎样的?是否包含多个小型请求?与v1的差异是什么?HTTP通信具体如何进行?
3. 性能问题
我针对V2进行了负载测试,每次请求获取100000行数据,通过Application Insights收集响应时间后发现V2性能可能更慢。测试图表展示了20个虚拟用户请求两个不同API端点的负载情况,V2平均比默认查询慢500ms。以下是记录指标的代码:
[HttpGet()] public async IAsyncEnumerable<CompleteModel> Get() { StartTracker(); // 启动计时器 using var queryTask = client.RunStreamingQuery("set query_results_cache_max_age = timespan(0s);Table| take 100000", [], CancellationToken.None); await foreach (var frame in StreamResultsAsync(queryTask)) { if(frame!=null) { yield return frame; } } } private async IAsyncEnumerable<CompleteModel> StreamResultsAsync(Task<ProgressiveDataSet> queryTask) { using (var dataSet = await queryTask) { TrackFirstResponse("S-Performance-Fixed-20VUs"); // 停止计时器 using (var frames = dataSet.GetFrames()) { while (frames.MoveNext()) { var frame = frames.Current; if (frame.FrameType == FrameType.TableFragment) { var frameex = frame as ProgressiveDataSetDataTableFragmentFrame; var record = new object[frameex.FieldCount]; while (frameex.GetNextRecord(record)) { yield return new Model { ... }; } } } } } }
4. V2版本适用场景
我的场景是从ADX到后端再到前端流式传输数据,以持续数据流降低用户体验延迟。流式传输方式是否受数据大小影响?(若有影响,数据大小范围是多少?)何时应使用v1,何时应使用v2?
5. 其他问题
- 如何在数据传入时进行日志记录,并确保数据不是以单个批次传入?
- 是否因为v2的开销和多个HTTP请求导致其性能更慢?
内容的提问来源于stack exchange,提问作者scxry
相关产品推荐
相关产品推荐

