优化group和reverse等查询聚合
This commit is contained in:
parent
b1da6ee5b5
commit
b0f110829d
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue