优化group和reverse等查询聚合

This commit is contained in:
xuejiaming 2022-08-09 13:41:59 +08:00
parent b1da6ee5b5
commit b0f110829d
4 changed files with 23 additions and 27 deletions

View File

@ -14,14 +14,26 @@ namespace ShardingCore.Sharding.MergeEngines.Executors.ShardingMergers
streamMergeContext, async)
{
}
public override IStreamMergeAsyncEnumerator<TEntity> StreamMerge(
List<IStreamMergeAsyncEnumerator<TEntity>> parallelResults)
{
if (GetStreamMergeContext().HasGroupQuery())
{
return new MultiAggregateOrderStreamMergeAsyncEnumerator<TEntity>(GetStreamMergeContext(),
parallelResults);
}
return new MultiOrderStreamMergeAsyncEnumerator<TEntity>(GetStreamMergeContext(), parallelResults);
}
protected override IStreamMergeAsyncEnumerator<TEntity> StreamInMemoryMerge(List<IStreamMergeAsyncEnumerator<TEntity>> parallelResults)
{
//如果是group in memory merger需要在内存中聚合好所有的 并且最后通过内存聚合在发挥
if (GetStreamMergeContext().GroupQueryMemoryMerge())
{
return new MultiAggregateOrderStreamMergeAsyncEnumerator<TEntity>(GetStreamMergeContext(), parallelResults);
}
return StreamMerge(parallelResults);
}
}
}

View File

@ -10,13 +10,5 @@ namespace ShardingCore.Sharding.MergeEngines.Executors.ShardingMergers
streamMergeContext, async)
{
}
protected override IStreamMergeAsyncEnumerator<TEntity> StreamInMemoryMerge(List<IStreamMergeAsyncEnumerator<TEntity>> parallelResults)
{
if (GetStreamMergeContext().IsPaginationQuery())
return new PaginationStreamMergeAsyncEnumerator<TEntity>(GetStreamMergeContext(), parallelResults, 0, GetStreamMergeContext().GetPaginationReWriteTake());//内存聚合分页不可以直接获取skip必须获取skip+take的数目
return base.StreamInMemoryMerge(parallelResults);
}
}
}

View File

@ -11,23 +11,10 @@ namespace ShardingCore.Sharding.MergeEngines.Executors.ShardingMergers
{
}
// protected override IStreamMergeAsyncEnumerator<TEntity> StreamInMemoryMerge(
// List<IStreamMergeAsyncEnumerator<TEntity>> parallelResults)
// {
// // if (GetStreamMergeContext().IsPaginationQuery() && GetStreamMergeContext().HasGroupQuery())
// // {
// // var multiAggregateOrderStreamMergeAsyncEnumerator =
// // new MultiAggregateOrderStreamMergeAsyncEnumerator<TEntity>(GetStreamMergeContext(),
// // parallelResults);
// // return new PaginationStreamMergeAsyncEnumerator<TEntity>(GetStreamMergeContext(),
// // new[] { multiAggregateOrderStreamMergeAsyncEnumerator }, 0,
// // GetStreamMergeContext().GetPaginationReWriteTake());
// // }
//
// if (GetStreamMergeContext().IsPaginationQuery())
// return new PaginationStreamMergeAsyncEnumerator<TEntity>(GetStreamMergeContext(), parallelResults, 0,
// GetStreamMergeContext().GetPaginationReWriteTake());
// return base.StreamInMemoryMerge(parallelResults);
// }
public override IStreamMergeAsyncEnumerator<TEntity> StreamMerge(List<IStreamMergeAsyncEnumerator<TEntity>> parallelResults)
{
var streamMergeAsyncEnumerator = base.StreamMerge(parallelResults);
return new InMemoryReverseStreamMergeAsyncEnumerator<TEntity>(streamMergeAsyncEnumerator);
}
}
}

View File

@ -25,6 +25,11 @@ namespace ShardingCore.Sharding.MergeEngines.Executors.ShardingMergers
protected override IStreamMergeAsyncEnumerator<TEntity> StreamInMemoryMerge(List<IStreamMergeAsyncEnumerator<TEntity>> parallelResults)
{
//如果是group in memory merger需要在内存中聚合好所有的 并且最后通过内存聚合在发挥
if (GetStreamMergeContext().GroupQueryMemoryMerge())
{
return new MultiAggregateOrderStreamMergeAsyncEnumerator<TEntity>(GetStreamMergeContext(), parallelResults);
}
return StreamMerge(parallelResults);
}
}