mysql分库分表方案 大牛_ORM框架对分表分库的实现

本文介绍了AntData ORM框架如何基于Linq2db改造实现分库分表功能,包括取模和范围两种分片模式,并通过代码示例展示了分库分表的插入、查询、更新和删除操作。
摘要由CSDN通过智能技术生成

AntData ORM框架是我维护的一个开源ORM框架

该框架是在Linq2db这个优秀的linq转sql引擎基础上进行改造而来的。

分离了linq2sql引擎和db执行逻辑。

画一个图的话 应该是这样的:

https%3A%2F%2Fimages4.c-ctrip.com%2Ftarget%2Fzb0r1f000001g4h4rEC81.png

分表分库功能设计

框架内置目前使用比较多的两种分片模式:

取模 (mod)

范围 (range)

为了让框架更容易扩展

开放分片策略的接口 当有自定义分片规则可以继承实现

下面我用内置的 取模 分片模式来说明 ,运行环境: netcore平台

1. DB Sharding

db配置:

Provider 指定为 mysql

Name 是逻辑名称 可以随意指定

ShardingStrategy 指定分片的逻辑处理

ConnectionItemList 指定一个或多个db链接配置

https%3A%2F%2Fimages4.c-ctrip.com%2Ftarget%2Fzb0k1f000001ga8luA3D6.png

注意:

class=AntData.DbEngine.Sharding.ModShardingStrategy;column=ID;mod=2;shardByDB=true

的意思是:

采用内置的取模分片法,走分片的字段叫ID mod为2 也就是1分为2个 分别是 (0 和 1),所以下面的ConnectionItemList指定的 Sharding分别是0和1的数据库连接

按照上面的配置的话,当满足

表还有字段ID

db搜索的条件含有id字段,或者 db更新的条件含有id字段 或者db删除的条件含有id字段

都应该走取模算法来走对应的db。

下面来测试它

DB Sharding 使用场景举例说明

///

/// 测试mod分库插入到testorm2数据库

///

[TestMethod]

public void TestMethod6_01()

{

//id查询 1 mod 2 = 1 所以会走到 testorm2数据库

var id = 1;

var odIsExist = DB.Tables.Orders.Any(r => r.ID.Equals(1));

if (odIsExist)

{

return;

}

var order = new Order

{

ID = 1,

Name = "上海大学"

};

var result = DB.Insert(order);

Assert.AreEqual(result, 1);

}

///

/// 测试mod分库插入到testorm1数据库

///

[TestMethod]

public void TestMethod6_02()

{

var id = 2;

var odIsExist = DB.Tables.Orders.Any(r => r.ID.Equals(2));

if (odIsExist)

{

return;

}

var order = new Order

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值