一款针对EF Core轻量级分表分库、读写分离的开源项目

news2024/9/23 9:30:06

更多开源项目请查看:一个专注推荐.Net开源项目的榜单

在项目开发中,如果数据量比较大,比如日志记录,我们往往会采用分表分库的方案;为了提升性能,把数据库查询与更新操作分开,这时候就要采用读写分离的方案。

分表分库通常包含垂直分库、垂直分表、水平分库和水平分表方案,包括分表分库方案,实现每一个方案都需要花费一定的时间;所以,今天给大家推荐一个基于EF Code实现的分表分库、读写分离开源库,可以让我们零成本的接入。

项目简介

这是一个针对EF Code高性能、轻量级分表分库、读写分离开源项目,可以让我们方便快速接入、或者改造原有项目,几乎零成本接入。

项目特性

1、分表:时间分表、自定义分表、多表查询更新删除。

2、分库:支持自定义分库、分库查询更新删除。

3、分表分库:支持部分表格分表、部分表格分库。

4、读写分离:支持一主多从的读写分离的方案。

5、其他:支持动态分表、分库,支持高性能查询,支持事务等。

技术架构

1、跨平台:基于.NetCore开发,支持Windows、Mono、Liunx、Windows Azure。

2、支持 Standard 2.0、.NetCore 2.0+。

3、数据库:支持MySql、Oracle、SqlServer。

项目结构

图片

该项目包含不同数据库的例子,src为不同版本的源码。

快速上手

**1、表的定义
**

public class SysUserMod:IAge
{
/// <summary>
/// 用户Id用于分表
/// </summary>
public string Id { get; set; }
/// <summary>
/// 用户名称
/// </summary>
public string Name { get; set; }
/// <summary>
/// 用户姓名
/// </summary>
public int Age { get; set; }
}

2、分表规则

public class SysUserModVirtualTableRoute : AbstractSimpleShardingModKeyStringVirtualTableRoute<SysUserMod>
{
    //根据ID取模3,分为2张表
public SysUserModVirtualTableRoute() : base(2,3)
    {
    }

public override void Configure(EntityMetadataTableBuilder<SysUserMod> builder)
    {
        builder.ShardingProperty(o => o.Id);
    }

}

3、Startup配置

public void ConfigureServices(IServiceCollection services)
{
    ......
    services.AddShardingDbContext<DefaultShardingDbContext>()
        .UseRouteConfig(o =>
        {
//定义分表路由
            o.AddShardingDataSourceRoute<SysUserModVirtualDataSourceRoute>();
        }).UseConfig((sp,o) =>
        {
            ......
//指定主从数据库
            o.AddDefaultDataSource("ds0",
"server=127.0.0.1;port=3306;database=db1;userid=root;password=root;");
            o.AddExtraDataSource(sp => new Dictionary<string, string>()
            {
                { "ds1", "server=127.0.0.1;port=3306;database=db2;userid=root;password=root;" },
                { "ds2", "server=127.0.0.1;port=3306;database=db3;userid=root;password=root;" }
            });
            o.UseShardingMigrationConfigure(b =>
            {
                b.ReplaceService<IMigrationsSqlGenerator, ShardingMySqlMigrationsSqlGenerator>();
            });
        }).ReplaceService<IModelCacheLockerProvider,DicModelCacheLockerProvider>()
        .AddShardingCore();
}

项目地址

Github:

https://github.com/dotnetcore/sharding-core

Gitee:

https://gitee.com/xuejm/sharding-core

- End -

欢迎加入 学习小圈子 ,获取海量的编程学习资源、学习路线,和大家一起打卡、分享编程知识、共同进步。

推荐阅读

一个简单、功能完整的WMS仓库管理系统

阅读开源项目源代码的方法与心得

一个基于C#开发的Socket扩展库

基于.Net Core开发的支付SDK,简化支付功能开发

年度盘点10个最受欢迎的.Net开源项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

谈谈SpringBoot(三)

1. SpringBoot依赖管理 1.1 父依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.8</version><relativePath/></parent> 点击进去&#xf…

Redis中的hash结构和扩容机制

1.rehash原理 hash包含两个数据结构为字典数组ht[0]和ht[1]。其中ht[0]用来存放数据&#xff0c;ht[1]在rehash时使用。 扩容时&#xff0c;ht[1]的大小为第一个大于等于ht[0].used*2的2的幂次方的数&#xff1b; 收缩时&#xff0c;ht[1]的大小为第一个大于等于ht[0].used的…

大数据时代的小数据神器 - asqlcell

自从Google发布了经典的MapReduce论文&#xff0c;以及Yahoo开源了Hadoop的实现&#xff0c;大数据这个词就成为了一个行业的热门。在不断提高的机器性能和各种层出不穷的工具框架加持下&#xff0c;数据分析开始从过去的采样抽查变成全量整体&#xff0c;原先被抽样丢弃的隐藏…

【Java开发笔记】线程池

【Java开发笔记】线程池 线程池 ThreadPoolExecutor 的七大核心参数&#xff1a; 核心线程数 corePoolSize最大线程数 maxinumPoolSize超过核心线程数的闲余线程存活时间 keepAliveTime存活时间单位 unit:keepAliveTime任务队列&#xff08;阻塞队列&#xff09; workQueue生…

内网渗透(二十)之Windows协议认证和密码抓取-域认证(Kerberos协议)

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

【LeetCode】1138. 字母板上的路径

1138. 字母板上的路径 题目描述 我们从一块字母板上的位置 (0, 0) 出发&#xff0c;该坐标对应的字符为 board[0][0]。 在本题里&#xff0c;字母板为board [“abcde”, “fghij”, “klmno”, “pqrst”, “uvwxy”, “z”]&#xff0c;如下所示。 我们可以按下面的指令规…

Spring Security in Action 第一、二章 第一个Spring Security项目的建立以及基本

本专栏将从基础开始&#xff0c;循序渐进&#xff0c;以实战为线索&#xff0c;逐步深入SpringSecurity相关知识相关知识&#xff0c;打造完整的SpringSecurity学习步骤&#xff0c;提升工程化编码能力和思维能力&#xff0c;写出高质量代码。希望大家都能够从中有所收获&#…

Docker 搭建本地私有仓库

一、搭建本地私有仓库有时候使用Docker Hub这样的公共仓库可能不方便&#xff0c;这种情况下用户可以使用registry创建一个本地仓库供私人使用&#xff0c;这点跟Maven的管理类似。使用私有仓库有许多优点&#xff1a;1&#xff09;节省网络带宽&#xff0c;针对于每个镜像不用…

小灰的算法之旅---createBinaryTree 的一点点疑问

前言 深知自己算法薄弱&#xff0c;所以最近在补充自己算法方面的知识&#xff0c;《小灰的算法之旅》这本书作为入门书籍不错&#xff0c;当时在看到《树-深度优先遍历》的代码时&#xff0c;我碰到了一点疑问&#xff0c;经过我多次代码验证&#xff0c;确实是代码不太严谨。…

C语言基础(有基础)

linux下的 是一种通用的、面向过程式的计算机编程语言 #include <stdio.h> //#include 预处理命令&#xff0c;用来引用头文件&#xff0c; stdio.h 头文件 int main() //开始 {/* 一个注释 */printf("Hello, World! \n");return 0; …

docker安装mysql

在安装Mysql之前&#xff0c;我们可以先查看一下我们的镜像&#xff0c;输入命令&#xff1a; docker images 能发现&#xff0c;镜像里面只有一个Nginx&#xff0c;并没有Mysql 然后我们可以像上一篇安装Nginx一样&#xff0c;安装Mysql镜像。 输入以下命令&#xff0c;安装…

B站Python与OpenCV人脸识别项目超详细记录(对图片、视频、摄像头人脸的检测)

课程来源&#xff1a;一天搞定人脸识别项目&#xff01;学不会up直接下跪&#xff01;&#xff08;pythonopencv&#xff09;_哔哩哔哩_bilibili 图片来源&#xff1a;感谢王鹤棣先生友情出镜~ 环境配置详见&#xff1a; 在conda虚拟环境中安装OpenCv并在pycharm中使用_cond…

已解决io.UnsupportedOperation: not readable

已解决Python读取文件报错&#xff1a;io.UnsupportedOperation: not readable亲测有效 文章目录报错问题报错翻译报错原因解决方法联系博主免费帮忙解决报错报错问题 一个小伙伴遇到问题跑来私信我&#xff0c;想用Python读取文件&#xff0c;但是发生了报错&#xff08;当时他…

跟同事杠上了,Apache Beanutils为什么被禁止使用?

收录于热门专栏Java基础教程系列&#xff08;进阶篇&#xff09; 在实际的项目开发中&#xff0c;对象间赋值普遍存在&#xff0c;随着双十一、秒杀等电商过程愈加复杂&#xff0c;数据量也在不断攀升&#xff0c;效率问题&#xff0c;浮出水面。 问&#xff1a;如果是你来写…

Redis过期删除策略

目录引出Redis过期删除策略Redis的两种过期策略&#xff1a;定期删除 惰性删除定期删除惰性删除Redis两种过期删除策略存在的问题Redis缓存淘汰策略Redis中的LRU和LFU算法1、LRU&#xff08;Least Recently Userd最近最少使用&#xff09;LFU 算法的引入2、LFU&#xff08;lea…

Netty 组件学习

Netty 组件学习Netty 各个组件通俗理解EventLoopEventLoopGroup关闭ChannelFuture & PromiseHandler & PipelineByteBuf创建直接内存和堆内存池化和非池化组成方法扩容机制读取retain和release方法Netty 各个组件通俗理解 Channel即数据通道 Msg是数据&#xff0c;传…

对KMP简单的理解

声明&#xff1a;下边的例子均表示下标从1开始的数组 ne数组的定义&#xff1a; next[i] 就是使子串 s[1…i] 有最长相等前后缀的前缀的最后一位的下标。ne[i]也可以表示相等子串的长度 准备执行jne[j]时&#xff0c; 表示当前s[i]!p[j1] , 如果ne[j]1 &#xff0c;那么下…

Dubbo和Zookeeper集成分布式系统快速入门

文件结构 代码部分 1、新建provider-server导入pom依赖 <dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>2.7.3</version></dependency><dependency>&l…

golang的web框架Gin(一)---Gin的安装与初体验

简介 1.1 介绍 Go世界里最流行的Web框架&#xff0c;Github上有32Kstar。 基于httprouter开发的Web框架。 中文文档齐全&#xff0c;简单易用的轻量级框架。 Gin是一个golang的微框架&#xff0c;封装比较优雅&#xff0c;API友好&#xff0c;源码注释比较明确&#xff0c;具有…

C++模板初阶

C模板初阶泛型编程函数模板概念函数模板格式函数模板原理函数模板的实例化模板参数的匹配原则类模板类模板的定义格式类模板的实例化泛型编程 我们前面学习了C的函数重载功能&#xff0c;那么我们如何实现一个通用的交换函数呢&#xff0c;比如:我传入int就是交换int&#xff…