添加了一些简单的备注

This commit is contained in:
xuejiaming 2021-12-08 23:12:49 +08:00
parent d917259ac7
commit 7bcadfc100
10 changed files with 35 additions and 34 deletions

View File

@ -7,8 +7,8 @@
<RepositoryUrl>https://github.com/xuejmnet/sharding-core</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<Company>xuejm</Company>
<LangVersion>8.0</LangVersion>
<Description>easy sharding for efcore 2.x 3.x 5.x lib.</Description>
<LangVersion>9.0</LangVersion>
<Description>high performance lightweight solution for efcore sharding table and sharding database support read-write-separation </Description>
</PropertyGroup>
</Project>

View File

@ -31,6 +31,7 @@ namespace ShardingCore.Core.VirtualRoutes.DataSourceRoutes.Abstractions
/// 是否启用路由解析编译缓存
/// </summary>
public virtual bool EnableRouteParseCompileCache => false;
/// <summary>
/// 对表达式进行缓存编译默认永久缓存单个参数表达式且不包含orElse只包含单个AndAlso或者没有AndAlso的,
/// 比如:<![CDATA[o.id==x]]>或者<![CDATA[o.id>x]]>,不会缓存<![CDATA[o=>id>x && o.id<y ]]>等一共大于、等于、小于、大于等于、小于等于(不等于编译成<![CDATA[t=>true]]>)缓存会存在的数量个数上限为

View File

@ -57,7 +57,7 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.Abstractions
/// 系统默认永久单表达式缓存
/// </summary>
/// <param name="parseWhere"></param>
/// <returns>返回null会走<see cref="CustomerCachingCompile"/>这个方法如果还是null就会调用<see cref="Compile"/>方法</returns>
/// <returns>返回null会走<see cref="CustomerCachingCompile"/>这个方法如果还是null就会调用<see cref="LambdaExpression.Compile()"/>方法</returns>
protected virtual Func<string, bool> DoCachingCompile(Expression<Func<string, bool>> parseWhere)
{
var shouldCache = ShouldCache(parseWhere);

View File

@ -22,7 +22,7 @@ namespace ShardingCore.Core.VirtualRoutes.TableRoutes.Abstractions
{
private readonly DoOnlyOnce _doOnlyOnce = new DoOnlyOnce();
public void Initialize(EntityMetadata entityMetadata)
public virtual void Initialize(EntityMetadata entityMetadata)
{
if (!_doOnlyOnce.IsUnDo())
throw new ShardingCoreInvalidOperationException("already init");

View File

@ -96,6 +96,8 @@ namespace ShardingCore.DIExtensions
public bool? IgnoreCreateTableError { get; set; } = true;
public int MaxQueryConnectionsLimit { get; set; } = Environment.ProcessorCount;
public ConnectionModeEnum ConnectionMode { get; set; } = ConnectionModeEnum.SYSTEM_AUTO;
public bool? EnableTableRouteCompileCache { get; set; }
public bool? EnableDataSourceRouteCompileCache { get; set; }
private readonly ISet<Type> _createTableEntities = new HashSet<Type>();

View File

@ -78,6 +78,14 @@ namespace ShardingCore
/// 连接数限制
/// </summary>
public ConnectionModeEnum ConnectionMode { get; set; }
///// <summary>
///// 是否启用表路由编译缓存
///// </summary>
//public bool? EnableTableRouteCompileCache { get; set; }
///// <summary>
///// 是否启用分库路由编译缓存
///// </summary>
//public bool? EnableDataSourceRouteCompileCache { get; set; }
}
public interface IShardingConfigOption<TShardingDbContext>: IShardingConfigOption where TShardingDbContext : DbContext, IShardingDbContext

View File

@ -70,7 +70,7 @@ namespace ShardingCore.Sharding.MergeEngines.EnumeratorStreamMergeEngines.Enumer
IStreamMergeAsyncEnumerator<TEntity>[] streamsAsyncEnumerators)
{
if (StreamMergeContext.IsPaginationQuery())
return new PaginationStreamMergeAsyncEnumerator<TEntity>(StreamMergeContext, streamsAsyncEnumerators,0, StreamMergeContext.GetPaginationReWriteTake());
return new PaginationStreamMergeAsyncEnumerator<TEntity>(StreamMergeContext, streamsAsyncEnumerators,0, StreamMergeContext.GetPaginationReWriteTake());//内存聚合分页不可以直接获取skip必须获取skip+take的数目
return base.CombineInMemoryStreamMergeAsyncEnumerator(streamsAsyncEnumerators);
}
}

View File

@ -82,6 +82,11 @@ namespace ShardingCore.Sharding.StreamMergeEngines.EnumeratorStreamMergeEngines.
private IStreamMergeAsyncEnumerator<TEntity> DoGetStreamMergeAsyncEnumerator(IStreamMergeAsyncEnumerator<TEntity>[] streamsAsyncEnumerators)
{
if (StreamMergeContext.IsPaginationQuery() && StreamMergeContext.HasGroupQuery())
{
var multiAggregateOrderStreamMergeAsyncEnumerator = new MultiAggregateOrderStreamMergeAsyncEnumerator<TEntity>(StreamMergeContext, streamsAsyncEnumerators);
return new PaginationStreamMergeAsyncEnumerator<TEntity>(StreamMergeContext, new[] { multiAggregateOrderStreamMergeAsyncEnumerator });
}
if (StreamMergeContext.IsPaginationQuery())
return new PaginationStreamMergeAsyncEnumerator<TEntity>(StreamMergeContext, streamsAsyncEnumerators);
if (StreamMergeContext.HasGroupQuery())
@ -91,6 +96,11 @@ namespace ShardingCore.Sharding.StreamMergeEngines.EnumeratorStreamMergeEngines.
public override IStreamMergeAsyncEnumerator<TEntity> CombineInMemoryStreamMergeAsyncEnumerator(
IStreamMergeAsyncEnumerator<TEntity>[] streamsAsyncEnumerators)
{
if (StreamMergeContext.IsPaginationQuery() && StreamMergeContext.HasGroupQuery())
{
var multiAggregateOrderStreamMergeAsyncEnumerator = new MultiAggregateOrderStreamMergeAsyncEnumerator<TEntity>(StreamMergeContext, streamsAsyncEnumerators);
return new PaginationStreamMergeAsyncEnumerator<TEntity>(StreamMergeContext, new[] { multiAggregateOrderStreamMergeAsyncEnumerator }, 0, StreamMergeContext.GetPaginationReWriteTake());
}
if (StreamMergeContext.IsPaginationQuery())
return new PaginationStreamMergeAsyncEnumerator<TEntity>(StreamMergeContext, streamsAsyncEnumerators, 0, StreamMergeContext.GetPaginationReWriteTake());
return base.CombineInMemoryStreamMergeAsyncEnumerator(streamsAsyncEnumerators);

View File

@ -13,29 +13,21 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations.Connectors.Abstractions
{
protected List<string> ConnectionStrings { get;}
protected int Length { get; private set; }
private readonly string _tempConnectionString;
private readonly OneByOneChecker _oneByOneChecker = new OneByOneChecker();
//private readonly string _tempConnectionString;
//private readonly OneByOneChecker _oneByOneChecker = new OneByOneChecker();
public AbstractionReadWriteConnector(string dataSourceName,IEnumerable<string> connectionStrings)
{
DataSourceName = dataSourceName;
ConnectionStrings = connectionStrings.ToList();
Length = ConnectionStrings.Count;
_tempConnectionString = ConnectionStrings[0];
//_tempConnectionString = ConnectionStrings[0];
}
public string DataSourceName { get; }
public string GetConnectionString()
{
//没有必要用太过于复杂的锁简单的操作简单的锁最简单的了
if (_oneByOneChecker.IsRunning())
{
return _tempConnectionString;
}
else
{
return DoGetConnectionString();
}
return DoGetConnectionString();
}
public abstract string DoGetConnectionString();
@ -47,23 +39,9 @@ namespace ShardingCore.Sharding.ReadWriteConfigurations.Connectors.Abstractions
/// <returns></returns>
public bool AddConnectionString(string connectionString)
{
if (_oneByOneChecker.Start())
{
try
{
//是其他线程充分返回Connection并且感知到当前已在进行写入操作
Thread.SpinWait(1);
ConnectionStrings.Add(connectionString);
Length = ConnectionStrings.Count;
return true;
}
finally
{
_oneByOneChecker.Stop();
}
}
return false;
ConnectionStrings.Add(connectionString);
Length = ConnectionStrings.Count;
return true;
}
}
}

View File

@ -234,5 +234,7 @@ namespace ShardingCore
public string DefaultConnectionString { get; set; }
public int MaxQueryConnectionsLimit { get; set; } = Environment.ProcessorCount;
public ConnectionModeEnum ConnectionMode { get; set; } = ConnectionModeEnum.SYSTEM_AUTO;
//public bool? EnableTableRouteCompileCache { get; set; }
//public bool? EnableDataSourceRouteCompileCache { get; set; }
}
}