修改readme并且提供默认路由
This commit is contained in:
parent
d6c8522178
commit
08bb2549b0
20
README.md
20
README.md
|
@ -210,16 +210,16 @@ route
|
|||
|
||||
抽象abstract | 路由规则 | tail | 索引
|
||||
--- |--- |--- |---
|
||||
AbstractSimpleShardingModKeyIntVirtualRoute |默认int类型取模路由 |0,1,2... | `=`
|
||||
AbstractSimpleShardingModKeyStringVirtualRoute |默认string类型取模路由 |0,1,2... | `=`
|
||||
AbstractSimpleShardingDayKeyDateTimeVirtualRoute |默认DateTime类型取模路由 |yyyyMMdd | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingDayKeyLongVirtualRoute |默认long类型取模路由 |yyyyMMdd | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingWeekKeyDateTimeVirtualRoute |默认DateTime类型取模路由 |yyyyMMdd_dd | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingWeekKeyLongVirtualRoute |默认long类型取模路由 |yyyyMMdd_dd | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingMonthKeyDateTimeVirtualRoute |默认DateTime类型取模路由 |yyyyMM | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingMonthKeyLongVirtualRoute |默认long类型取模路由 |yyyyMM | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingYearKeyDateTimeVirtualRoute |默认DateTime类型取模路由 |yyyy | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingYearKeyLongVirtualRoute |默认long类型取模路由 |yyyy | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingModKeyIntVirtualRoute |取模 |0,1,2... | `=`
|
||||
AbstractSimpleShardingModKeyStringVirtualRoute |取模 |0,1,2... | `=`
|
||||
AbstractSimpleShardingDayKeyDateTimeVirtualRoute |按时间 |yyyyMMdd | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingDayKeyLongVirtualRoute |按时间戳 |yyyyMMdd | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingWeekKeyDateTimeVirtualRoute |按时间 |yyyyMMdd_dd | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingWeekKeyLongVirtualRoute |按时间戳 |yyyyMMdd_dd | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingMonthKeyDateTimeVirtualRoute |按时间 |yyyyMM | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingMonthKeyLongVirtualRoute |按时间戳 |yyyyMM | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingYearKeyDateTimeVirtualRoute |按时间 |yyyy | `>,>=,<,<=,=,contains`
|
||||
AbstractSimpleShardingYearKeyLongVirtualRoute |按时间戳 |yyyy | `>,>=,<,<=,=,contains`
|
||||
|
||||
注:`contains`表示为`o=>ids.contains(o.shardingkey)`
|
||||
|
||||
|
|
|
@ -1,42 +0,0 @@
|
|||
using System;
|
||||
using System.Linq.Expressions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace ShardingCore.Core.VirtualRoutes.Abstractions
|
||||
{
|
||||
/*
|
||||
* @Author: xjm
|
||||
* @Description:
|
||||
* @Date: Saturday, 19 December 2020 16:00:15
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
public abstract class AbstractShardingKeyObjectEqualVirtualRoute<T,TKey>: AbstractShardingOperatorVirtualRoute<T,TKey> where T : class, IShardingEntity
|
||||
{
|
||||
private readonly ILogger<AbstractShardingKeyObjectEqualVirtualRoute<T, TKey>> _logger;
|
||||
|
||||
protected AbstractShardingKeyObjectEqualVirtualRoute(ILogger<AbstractShardingKeyObjectEqualVirtualRoute<T,TKey>> _logger)
|
||||
{
|
||||
this._logger = _logger;
|
||||
}
|
||||
/// <summary>
|
||||
/// 如何路由到具体表 shardingKeyValue:分表的值,operate where的操作值 返回结果:如果返回true表示返回该表 第一个参数 tail 第二参数是否返回该物理表
|
||||
/// </summary>
|
||||
/// <param name="shardingKey">分表的值</param>
|
||||
/// <param name="shardingOperator">分表的类型</param>
|
||||
/// <returns>如果返回true表示返回该表 第一个参数 tail 第二参数是否返回该物理表</returns>
|
||||
protected override Expression<Func<string, bool>> GetRouteToFilter(TKey shardingKey, ShardingOperatorEnum shardingOperator)
|
||||
{
|
||||
if (shardingOperator == ShardingOperatorEnum.Equal)
|
||||
return GetRouteEqualToFilter(shardingKey);
|
||||
_logger.LogWarning($"没有找到对应的匹配需要进行多表扫描:ShardingOperator:[{shardingOperator}] ");
|
||||
return s => true;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 如何路由到具体表 shardingKeyValue:分表的值, 返回结果:如果返回true表示返回该表 第一个参数 tail 第二参数是否返回该物理表
|
||||
/// </summary>
|
||||
/// <param name="shardingKey">分表的值</param>
|
||||
/// <returns>如果返回true表示返回该表 第一个参数 tail 第二参数是否返回该物理表</returns>
|
||||
protected abstract Expression<Func<string, bool>> GetRouteEqualToFilter(TKey shardingKey);
|
||||
}
|
||||
}
|
|
@ -1,64 +0,0 @@
|
|||
using System;
|
||||
using System.Linq.Expressions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ShardingCore.Extensions;
|
||||
|
||||
namespace ShardingCore.Core.VirtualRoutes.Abstractions
|
||||
{
|
||||
/*
|
||||
* @Author: xjm
|
||||
* @Description:
|
||||
* @Date: Saturday, 19 December 2020 13:47:54
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
public abstract class SimpleShardingDateByDayVirtualRoute<T>:AbstractShardingOperatorVirtualRoute<T,long> where T:class,IShardingEntity
|
||||
{
|
||||
private readonly ILogger<SimpleShardingDateByDayVirtualRoute<T>> _logger;
|
||||
|
||||
protected SimpleShardingDateByDayVirtualRoute(ILogger<SimpleShardingDateByDayVirtualRoute<T>> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
protected override long ConvertToShardingKey(object shardingKey)
|
||||
{
|
||||
return (long) shardingKey;
|
||||
}
|
||||
|
||||
public override string ShardingKeyToTail(object shardingKey)
|
||||
{
|
||||
return ConvertToShardingKey(shardingKey).ConvertLongToTime().ToString("yyyyMMdd");
|
||||
}
|
||||
|
||||
|
||||
protected override Expression<Func<string, bool>> GetRouteToFilter(long shardingKey, ShardingOperatorEnum shardingOperator)
|
||||
{
|
||||
switch (shardingOperator)
|
||||
{
|
||||
case ShardingOperatorEnum.UnKnown:
|
||||
_logger.LogWarning($"没有找到对应的匹配需要进行多表扫描:ShardingOperator:[{shardingOperator}]");
|
||||
return tail => true;
|
||||
//throw new NotSupportedException(xxxx);
|
||||
case ShardingOperatorEnum.GreaterThan:
|
||||
return tail =>int.Parse(tail) > int.Parse(shardingKey.ConvertLongToTime().ToString("yyyyMMdd"));
|
||||
case ShardingOperatorEnum.GreaterThanOrEqual:
|
||||
//yyyyMMdd
|
||||
return tail =>int.Parse(tail) >= int.Parse(shardingKey.ConvertLongToTime().ToString("yyyyMMdd"));
|
||||
case ShardingOperatorEnum.LessThan:
|
||||
return tail =>int.Parse(tail) < int.Parse(shardingKey.ConvertLongToTime().ToString("yyyyMMdd"));
|
||||
case ShardingOperatorEnum.LessThanOrEqual:
|
||||
//yyyyMMdd
|
||||
return tail =>int.Parse(tail) <= int.Parse(shardingKey.ConvertLongToTime().ToString("yyyyMMdd"));
|
||||
case ShardingOperatorEnum.Equal:
|
||||
//yyyyMMdd
|
||||
return tail =>int.Parse(tail) == int.Parse(shardingKey.ConvertLongToTime().ToString("yyyyMMdd"));
|
||||
case ShardingOperatorEnum.NotEqual:
|
||||
//yyyyMMdd
|
||||
return tail =>int.Parse(tail) != int.Parse(shardingKey.ConvertLongToTime().ToString("yyyyMMdd"));
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(shardingOperator), shardingOperator, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
|
@ -1,66 +0,0 @@
|
|||
using System;
|
||||
using System.Linq.Expressions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using ShardingCore.Extensions;
|
||||
|
||||
namespace ShardingCore.Core.VirtualRoutes.Abstractions
|
||||
{
|
||||
/*
|
||||
* @Author: xjm
|
||||
* @Description:
|
||||
* @Date: Sunday, 20 December 2020 20:46:36
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
public abstract class SimpleShardingDateByWeekVirtualRoute<T>:AbstractShardingOperatorVirtualRoute<T,long> where T:class,IShardingEntity
|
||||
{
|
||||
private readonly ILogger<SimpleShardingDateByWeekVirtualRoute<T>> _logger;
|
||||
|
||||
public SimpleShardingDateByWeekVirtualRoute(ILogger<SimpleShardingDateByWeekVirtualRoute<T>> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
protected override long ConvertToShardingKey(object shardingKey)
|
||||
{
|
||||
return (long) shardingKey;
|
||||
}
|
||||
|
||||
public override string ShardingKeyToTail(object shardingKey)
|
||||
{
|
||||
return GetWeekTableTail(ConvertToShardingKey(shardingKey));
|
||||
}
|
||||
private string GetWeekTableTail(long dateTimeL)
|
||||
{
|
||||
var dateTime = dateTimeL.ConvertLongToTime();
|
||||
var monday = dateTime.GetMonday();
|
||||
var sunday = monday.AddDays(6);
|
||||
return $"{monday:yyyyMM}{monday:dd}_{sunday:dd}";
|
||||
}
|
||||
|
||||
protected override Expression<Func<string, bool>> GetRouteToFilter(long shardingKey, ShardingOperatorEnum shardingOperator)
|
||||
{
|
||||
switch (shardingOperator)
|
||||
{
|
||||
case ShardingOperatorEnum.UnKnown:
|
||||
_logger.LogWarning($"没有找到对应的匹配需要进行多表扫描:ShardingOperator:[{shardingOperator}]");
|
||||
return tail => true;
|
||||
//throw new NotSupportedException(xxxx);
|
||||
case ShardingOperatorEnum.GreaterThan:
|
||||
case ShardingOperatorEnum.GreaterThanOrEqual:
|
||||
//yyyyMMdd
|
||||
return tail =>String.Compare(tail, GetWeekTableTail(shardingKey), StringComparison.Ordinal) >= 0;
|
||||
case ShardingOperatorEnum.LessThan:
|
||||
case ShardingOperatorEnum.LessThanOrEqual:
|
||||
//yyyyMMdd
|
||||
return tail =>String.Compare(tail, GetWeekTableTail(shardingKey), StringComparison.Ordinal) <= 0;
|
||||
case ShardingOperatorEnum.Equal:
|
||||
//yyyyMMdd
|
||||
return tail =>tail == GetWeekTableTail(shardingKey);
|
||||
case ShardingOperatorEnum.NotEqual:
|
||||
//yyyyMMdd
|
||||
return tail =>tail != GetWeekTableTail(shardingKey);
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException(nameof(shardingOperator), shardingOperator, null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
using System;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace ShardingCore.Core.VirtualRoutes.Abstractions
|
||||
{
|
||||
/*
|
||||
* @Author: xjm
|
||||
* @Description:
|
||||
* @Date: Saturday, 19 December 2020 13:52:32
|
||||
* @Email: 326308290@qq.com
|
||||
*/
|
||||
public abstract class SimpleShardingKeyStringModVirtualRoute<T>:AbstractShardingKeyObjectEqualVirtualRoute<T,string> where T:class,IShardingEntity
|
||||
{
|
||||
|
||||
private readonly int _mod;
|
||||
protected SimpleShardingKeyStringModVirtualRoute(int mod,ILogger<AbstractShardingKeyObjectEqualVirtualRoute<T, string>> _logger) : base(_logger)
|
||||
{
|
||||
_mod = mod;
|
||||
}
|
||||
protected override Expression<Func<string, bool>> GetRouteEqualToFilter(string shardingKey)
|
||||
{
|
||||
var modKey = ShardingKeyToTail(shardingKey);
|
||||
return s => s == modKey;
|
||||
}
|
||||
|
||||
protected override string ConvertToShardingKey(object shardingKey)
|
||||
{
|
||||
return shardingKey.ToString();
|
||||
}
|
||||
|
||||
public override string ShardingKeyToTail(object shardingKey)
|
||||
{
|
||||
var shardingKeyStr = ConvertToShardingKey(shardingKey);
|
||||
var bytes = Encoding.Default.GetBytes(shardingKeyStr);
|
||||
return Math.Abs(BitConverter.ToInt32(bytes,0) % _mod).ToString();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue