修改readme并且提供默认路由

This commit is contained in:
xuejmnet 2021-01-27 13:40:25 +08:00
parent d6c8522178
commit 08bb2549b0
5 changed files with 10 additions and 222 deletions

View File

@ -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)`

View File

@ -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);
}
}

View File

@ -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);
}
}
}
}

View File

@ -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);
}
}
}
}

View File

@ -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();
}
}
}