|

Sharding-Core 详解:EF Core 分库分表框架介绍与使用教程(2026最新版)

随着互联网应用的数据量不断增长,单表数据达到千万级甚至亿级后,数据库性能往往会出现明显瓶颈。此时,分库分表成为提升系统性能和扩展性的常见方案。对于 .NET 开发者来说,Sharding-Core 是目前 EF Core 生态中非常优秀的分库分表解决方案之一。

Sharding-Core 是一款专门为 EF Core 设计的高性能、轻量级分库分表框架,支持读写分离、多数据源、动态分片以及多租户等场景。其最大的特点是零业务侵入,开发者依然可以像使用普通 EF Core 一样进行增删改查,而底层的分片逻辑则由框架自动完成。官方文档将其定位为“零依赖、零学习成本、零业务代码侵入”的解决方案。

什么是 Sharding-Core

Sharding-Core 是基于 EF Core 扩展实现的分库分表组件,支持:

  • 水平分表
  • 水平分库
  • 读写分离
  • 动态路由
  • 多租户
  • 自动迁移
  • 多数据库支持

目前支持 SQL Server、MySQL、PostgreSQL 等多种数据库,并兼容多个 .NET 版本。最新版本持续更新,对 .NET 8、.NET 9 甚至更新框架均保持兼容。

相比传统的手工分表方案,Sharding-Core 的优势主要体现在:

  • 零业务侵入:原有 EF Core 查询代码基本无需修改,开发者仍然使用 LINQ 查询即可。
  • 自动路由:系统自动计算数据所在的表和数据库,无需手工拼接 SQL。
  • 高性能:支持路由优化、分页优化以及并行查询。
  • 易于扩展:支持自定义分片规则和动态扩容。

Sharding-Core 的典型应用场景

电商系统

订单表数据增长极快,可以按照月份进行分表:

  • Order_202601
  • Order_202602
  • Order_202603

日志系统

日志通常按时间维度进行切分:

  • Log_2026_01
  • Log_2026_02

SaaS 多租户系统

不同租户使用不同数据库,实现数据隔离。

社交平台

用户数据按照用户 ID 哈希分表,提高查询效率。

Sharding-Core 安装方法

首先安装 NuGet 包:dotnet add package ShardingCore,或者使用 Package Manager:Install-Package ShardingCore,安装完成后即可开始配置。

Sharding-Core 基础使用教程

下面以订单按月份分表为例进行演示。

第一步:定义实体

public class Order
{
    public string Id { get; set; }

    public DateTime CreateTime { get; set; }

    public decimal Amount { get; set; }
}

第二步:创建分表路由

public class OrderVirtualTableRoute
    : AbstractSimpleShardingMonthKeyDateTimeVirtualTableRoute<Order>
{
    public override DateTime GetBeginTime()
    {
        return new DateTime(2025, 1, 1);
    }

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

    public override string GetTail(DateTime time)
    {
        return time.ToString("yyyyMM");
    }
}

这样系统就会自动生成:

  • Order_202601
  • Order_202602
  • Order_202603

第三步:注册 Sharding-Core

在 Program.cs 中进行配置:

services.AddShardingDbContext<MyDbContext>()
    .UseRouteConfig(op =>
    {
        op.AddShardingTableRoute<OrderVirtualTableRoute>();
    })
    .UseConfig((sp, op) =>
    {
        op.AddDefaultDataSource(
            "ds0",
            "Server=localhost;Database=testdb;..."
        );
    })
    .AddShardingCore();

完成后,应用启动时即可启用分表功能。

第四步:正常使用 EF Core

开发时无需特殊写法:

var list = await dbContext.Orders
    .Where(o => o.CreateTime >= startTime)
    .ToListAsync();

Sharding-Core 会自动路由到对应的数据表执行查询。

插入数据同样如此:

dbContext.Add(new Order
{
    Id = Guid.NewGuid().ToString(),
    CreateTime = DateTime.Now,
    Amount = 100
});

await dbContext.SaveChangesAsync();

框架会自动计算应写入哪张分表。

Sharding-Core 的高级功能

读写分离

支持一主多从数据库架构:

  • 主库负责写入
  • 从库负责查询
  • 自动负载均衡

动态扩容

新增数据库节点后,无需修改业务代码即可扩展。

多租户支持

不同租户可映射到不同数据库,实现真正的数据隔离。相关实践已经被广泛应用于 SaaS 系统。

自动迁移

支持 Code First 自动创建分表结构,大幅降低维护成本。

Sharding-Core 与其他方案对比

特性 Sharding-Core 手工分表 Java ShardingSphere
EF Core 支持 原生支持 需要自行开发 不支持
业务侵入 极低 中等
学习成本
读写分离 支持 自行实现 支持
多租户 支持 自行实现 支持
动态扩容 支持 困难 支持

对于 .NET 开发者来说,Sharding-Core 可以说是当前最成熟的 EF Core 分库分表解决方案之一。其设计目标就是让开发者以使用 EF Core 的方式完成复杂的数据库分片工作。官方文档强调框架仅依赖 EF Core 本身,并保持较低的学习成本。

总结

随着业务规模扩大,分库分表几乎成为大型系统的必经之路。Sharding-Core 凭借零侵入、高性能以及完善的 EF Core 集成能力,已经成为 .NET 生态中极具竞争力的分片框架。

如果你的系统已经出现单表数据过大、查询变慢或者需要多租户隔离,那么引入 Sharding-Core 往往是一个值得考虑的方案。合理设计分片规则,结合读写分离与动态扩容,可以显著提升系统的可扩展性与稳定性。

评论