当前位置: 首页 > article >正文

数据库扩展实战:如何用ShardingCore实现高性能分库分表

数据库扩展实战如何用ShardingCore实现高性能分库分表【免费下载链接】sharding-corehigh performance lightweight solution for efcore sharding table and sharding database support read-write-separation .一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案具有零依赖、零学习成本、零业务代码入侵项目地址: https://gitcode.com/gh_mirrors/sha/sharding-core当业务数据量突破百万级传统单库单表架构就像一个过度拥挤的仓库每次查询都要翻遍所有货架。ShardingCore作为一款轻量级分库分表方案能帮助开发者在不重构现有代码的情况下实现数据库水平扩展。本文将通过场景化实践带你掌握分库分表的核心技术和最佳实践。1. 数据爆炸时代你的数据库需要整理收纳吗想象一个电商平台的订单系统从日均1000单增长到10万单数据库性能会经历怎样的变化查询延迟从毫秒级飙升到秒级索引维护成本指数级增长备份恢复时间变得难以接受。这就是典型的数据膨胀综合征而分库分表正是解决这一问题的有效手段。分库分表数据的文件夹分类法如果把数据库比作一个大仓库分库就像是将仓库分成多个区域如电子产品区、服装区分表则是在每个区域内按货架编号如A01货架、A02货架进一步分类。ShardingCore通过虚拟路由技术让应用程序像操作单个数据库一样操作这些分区仓库实现数据的自动分发和聚合查询。分库分表架构示意图左侧展示分库结构右侧展示分表结果实操小贴士并非所有业务都需要分库分表。当单表数据量超过500万行或查询延迟超过200ms时才建议考虑分表分库通常在单库连接数接近数据库最大连接限制时引入。2. ShardingCore的3大核心价值为什么选择它在众多分库分表方案中ShardingCore凭借独特的设计理念脱颖而出主要体现在三个方面零侵入架构无需重构现有代码ShardingCore采用抽象DbContext设计现有EF Core项目只需继承AbstractShardingDbContext无需修改实体类和业务逻辑。这种即插即用的设计极大降低了集成成本。性能损耗极低单次查询仅0.005ms额外开销通过表达式树缓存和路由预计算技术ShardingCore将分表路由解析时间控制在微秒级。实测数据显示在773万数据量下分表查询性能可达原生EF Core的97%。功能全面满足企业级需求支持分库分表、读写分离、自动建表、动态数据源等企业级特性同时提供完善的事务支持和监控能力。分库分表前后性能对比场景单库单表ShardingCore分表性能提升有索引查询4.91ms5.38ms-9.6%无索引查询11.58ms14.52ms-25.4%数据统计3.00ms3.07ms-2.3%列表查询26.06ms51.14ms-96.2%数据来源ShardingCore官方性能测试基于MySQL 8.0773万测试数据实操小贴士性能测试时建议关闭EF Core跟踪AsNoTracking()并确保分表键上有索引这两个因素对分表性能影响最大。3. 场景化实践如何实现无缝集成下面以电商订单和用户行为日志两个典型场景演示ShardingCore的集成过程。整个过程分为准备阶段、核心配置和验证测试三个阶段。准备阶段环境与依赖配置步骤1创建项目并安装依赖# 创建ASP.NET Core项目 dotnet new webapi -n ShardingDemo cd ShardingDemo # 安装核心包 dotnet add package ShardingCore # 安装SQL Server驱动 dotnet add package Microsoft.EntityFrameworkCore.SqlServer步骤2定义实体类电商订单实体按时间分表/// summary /// 订单实体按创建时间分表 /// /summary public class Order { public string Id { get; set; } public string UserId { get; set; } public decimal Amount { get; set; } public OrderStatus Status { get; set; } public DateTime CreateTime { get; set; } // 分表键按时间分表 } public enum OrderStatus { Pending, Paid, Shipped, Completed, Cancelled }用户行为日志实体按用户ID哈希分表/// summary /// 用户行为日志按用户ID哈希分表 /// /summary public class UserBehaviorLog { public long Id { get; set; } public string UserId { get; set; } // 分表键按用户ID哈希 public string Action { get; set; } public string Resource { get; set; } public DateTime ActionTime { get; set; } }核心配置分表规则与上下文设置步骤3创建分片DbContextpublic class AppDbContext : AbstractShardingDbContext, IShardingTableDbContext { public AppDbContext(DbContextOptionsAppDbContext options) : base(options) { } // 订单表分表 public DbSetOrder Orders { get; set; } // 用户行为日志表分表 public DbSetUserBehaviorLog UserBehaviorLogs { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // 配置订单表 modelBuilder.EntityOrder(entity { entity.HasKey(o o.Id); entity.ToTable(nameof(Order)); // 虚拟表名 }); // 配置用户行为日志表 modelBuilder.EntityUserBehaviorLog(entity { entity.HasKey(l l.Id); entity.ToTable(nameof(UserBehaviorLog)); // 虚拟表名 }); } // 分表路由尾缀 public IRouteTail RouteTail { get; set; } }步骤4实现分表路由规则订单表按月分表路由/// summary /// 订单表按月分表路由 /// /summary public class OrderTableRoute : AbstractSimpleShardingMonthKeyDateTimeVirtualTableRouteOrder { /// summary /// 分表开始时间 /// /summary public override DateTime GetBeginTime() { return new DateTime(2023, 1, 1); } /// summary /// 配置分表属性 /// /summary public override void Configure(EntityMetadataTableBuilderOrder builder) { // 指定分表字段为CreateTime builder.ShardingProperty(o o.CreateTime); // 启用自动创建表 builder.AutoCreateTableByTime(); } }用户行为日志按用户ID哈希分表路由/// summary /// 用户行为日志按用户ID哈希分表8张表 /// /summary public class UserBehaviorLogTableRoute : AbstractShardingModKeyStringVirtualTableRouteUserBehaviorLog { public UserBehaviorLogTableRoute() : base(8) // 分成8张表 { } public override void Configure(EntityMetadataTableBuilderUserBehaviorLog builder) { // 指定分表字段为UserId builder.ShardingProperty(o o.UserId); } /// summary /// 计算哈希值的方法 /// /summary public override int GetShardingKeyToInt(string shardingKey) { // 使用UserId的哈希值取模 return Math.Abs(shardingKey.GetHashCode()) % ShardingCount; } }步骤5配置服务与中间件var builder WebApplication.CreateBuilder(args); // 添加ShardingCore builder.Services.AddShardingDbContextAppDbContext() .UseRouteConfig(op { // 添加分表路由 op.AddShardingTableRouteOrderTableRoute(); op.AddShardingTableRouteUserBehaviorLogTableRoute(); }) .UseConfig(op { // 配置查询连接 op.UseShardingQuery((connStr, builder) { builder.UseSqlServer(connStr); }); // 配置事务连接 op.UseShardingTransaction((connection, builder) { builder.UseSqlServer(connection); }); // 添加默认数据源 op.AddDefaultDataSource(ds0, Data Sourcelocalhost;Initial CatalogShardingDemo;Integrated SecurityTrue;); }) .AddShardingCore(); var app builder.Build(); // 自动创建缺失的分表 app.Services.UseAutoTryCompensateTable(); // 其他中间件配置... app.Run();验证测试分表功能验证步骤6创建API接口测试分表功能[ApiController] [Route(api/[controller])] public class OrdersController : ControllerBase { private readonly AppDbContext _dbContext; public OrdersController(AppDbContext dbContext) { _dbContext dbContext; } [HttpPost] public async TaskIActionResult CreateOrder(Order order) { order.Id Guid.NewGuid().ToString(); order.CreateTime DateTime.Now; _dbContext.Orders.Add(order); await _dbContext.SaveChangesAsync(); return Ok(order); } [HttpGet] public async TaskIActionResult GetOrders(DateTime startTime, DateTime endTime) { var orders await _dbContext.Orders .Where(o o.CreateTime startTime o.CreateTime endTime) .ToListAsync(); return Ok(orders); } }步骤7验证分表效果运行应用程序后通过API创建不同时间的订单然后查看数据库会发现订单表会按月份自动创建如Orders_202301、Orders_202302用户行为日志会按UserId哈希值分散到8张表UserBehaviorLogs_0到UserBehaviorLogs_7实操小贴士首次使用时建议先在测试环境验证分表规则特别是哈希分表的分布均匀性。可以通过查询各分表数据量确保数据分布符合预期。4. 进阶技巧从入门到精通掌握基础分表后这些进阶技巧能帮助你应对更复杂的业务场景动态分库配置应对业务快速扩张当单库性能达到瓶颈时ShardingCore支持动态添加数据源实现无缝水平扩展。通过管理界面可以轻松添加分库键动态分库配置界面可添加新的分库键实现数据库水平扩展添加新分库的代码示例// 注入数据源管理器 private readonly IShardingDataSourceManager _dataSourceManager; // 动态添加分库 [HttpPost(addDataSource)] public async TaskIActionResult AddDataSource(string dataSourceName, string connectionString) { await _dataSourceManager.AddDataSourceAsync(dataSourceName, connectionString); return Ok(); }读写分离提升查询性能配置一主多从架构将读请求分发到从库减轻主库压力// 在服务配置中添加读写分离 .UseConfig(op { // 其他配置... // 配置读写分离 op.AddReadWriteSeparation(o { return new Dictionarystring, ISetstring { { ds0, new HashSetstring { Data Sourceslave1;Initial CatalogShardingDemo;Integrated SecurityTrue;, Data Sourceslave2;Initial CatalogShardingDemo;Integrated SecurityTrue; } } }; }, ReadStrategyEnum.Loop); // 轮询策略 })高性能分页解决大数据量翻页问题针对分表场景下的分页查询ShardingCore提供了优化方案// 高性能分页查询 var pageResult await _dbContext.Orders .OrderBy(o o.CreateTime) .ToShardingPageAsync(pageIndex: 1, pageSize: 20);通过实现IPaginationConfiguration接口进一步优化public class OrderPaginationConfig : IPaginationConfigurationOrder { public void Configure(PaginationBuilderOrder builder) { // 设置分页排序字段 builder.PaginationSequence(o o.Id) .UseRouteCompare(Comparerstring.Default) .UseQueryMatch(PaginationMatchEnum.Owner | PaginationMatchEnum.PrimaryMatch); // 启用反向分页优化 builder.ConfigReverseShardingPage(0.5d, 10000L); } }实操小贴士动态分库分表时建议通过监控系统密切关注各节点的负载情况避免数据分布不均导致的热点库/表问题。5. 资源导航从入门到精通的学习路径快速入门示例分表示例项目分库示例项目自动建表示例开发工具与环境官方模板dotnet new -i ShardingCore.Templates测试工具benchmarks/ShardingCoreBenchmark/社区支持问题反馈项目Issue跟踪系统技术交流Discord社区文档中心项目Wiki通过本文的介绍你已经掌握了ShardingCore的核心功能和使用方法。无论是电商订单、用户行为日志还是其他大数据量场景ShardingCore都能提供简单高效的分库分表解决方案。现在就动手尝试为你的应用打造高性能的数据库架构吧【免费下载链接】sharding-corehigh performance lightweight solution for efcore sharding table and sharding database support read-write-separation .一款ef-core下高性能、轻量级针对分表分库读写分离的解决方案具有零依赖、零学习成本、零业务代码入侵项目地址: https://gitcode.com/gh_mirrors/sha/sharding-core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

数据库扩展实战:如何用ShardingCore实现高性能分库分表

数据库扩展实战:如何用ShardingCore实现高性能分库分表 【免费下载链接】sharding-core high performance lightweight solution for efcore sharding table and sharding database support read-write-separation .一款ef-core下高性能、轻量级针对分表分库读写分离…...

如何让电子书阅读效率提升200%?这款开源神器彻底解决格式兼容与跨设备难题

如何让电子书阅读效率提升200%?这款开源神器彻底解决格式兼容与跨设备难题 【免费下载链接】koreader An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices …...

如何用WeChatMsg实现微信聊天记录的永久保存与深度分析

如何用WeChatMsg实现微信聊天记录的永久保存与深度分析 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …...

【渗透测试】HTB靶场之Lock 全过程wp

息收集 目标ip:10.129.234.64 kali ip:10.10.16.4 ┌──(root㉿kali)-[~/桌面/HTB]└─# nmap -A -T4 10.129.234.64 Starting Nmap 7.95 ( https://nmap.org ) at 2026-02-15 01:34 ESTNmap scan report for 10.129.234.64Host is up (0.30s latency).Not shown: 996 filte…...

Q345A、Q345B、Q345C、Q345D、Q345E钢材的性能差异分析

Q345A、Q345B、Q345C、Q345D、Q345E 钢材的性能差异分析 Q345是一种钢材的材质。它是低合金钢(C<0.2%),广泛应用于建筑,桥梁、车辆、船舶、压力容器等。Q代表的是这种材质的屈服强度,后面的345,就是指这种材质的屈服值,在345MPa左右。并会随着材质的厚度的增加而使其…...

5个核心维度掌握YimMenu:GTA5辅助工具全攻略

5个核心维度掌握YimMenu&#xff1a;GTA5辅助工具全攻略 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …...

SunnyUI中UIAvatar的进阶应用与自定义配置

1. UIAvatar控件基础回顾与核心属性解析 在SunnyUI这个强大的WinForms控件库中&#xff0c;UIAvatar可以说是用户界面设计的"门面担当"。它专门用于展示用户头像、品牌标识或者任何需要圆形/圆角矩形展示的图形元素。虽然基础使用很简单&#xff0c;但很多人可能只停…...

如何免费完成专业定性数据分析:QualCoder终极指南

如何免费完成专业定性数据分析&#xff1a;QualCoder终极指南 【免费下载链接】QualCoder Qualitative data analysis for text, images, audio, video. Cross platform. Python 3.8 or newer and PyQt6. 项目地址: https://gitcode.com/gh_mirrors/qu/QualCoder 你是否…...

使用PyInstaller打包yz-女生-角色扮演-造相Z-Turbo模型为可执行文件

使用PyInstaller打包yz-女生-角色扮演-造相Z-Turbo模型为可执行文件 1. 引言 想象一下&#xff0c;你开发了一个很酷的AI应用&#xff0c;基于yz-女生-角色扮演-造相Z-Turbo模型&#xff0c;可以生成精美的二次元角色图片。现在你想分享给朋友或用户使用&#xff0c;但他们可…...

舞台灯光DIY必备:手把手教你用开源DMX/RDM库驱动摇头灯(STM32平台)

舞台灯光DIY实战&#xff1a;基于STM32的DMX/RDM摇头灯开发指南 灯光艺术与嵌入式技术的碰撞总能激发创客们的无限灵感。想象一下&#xff0c;在自己的工作室里亲手打造一台可编程的摇头灯&#xff0c;通过代码精确控制光束的每一个舞动轨迹——这不仅是舞台灯光爱好者的终极乐…...

RAG实战解析:如何通过检索增强生成提升知识密集型NLP任务性能

1. RAG技术为什么能改变知识密集型NLP任务格局 第一次听说RAG&#xff08;Retrieval-Augmented Generation&#xff09;这个概念时&#xff0c;我正被一个开放域问答项目折磨得焦头烂额。当时我们用纯BART模型生成的答案总是出现事实性错误&#xff0c;比如把"特斯拉创始人…...

探索Lumerical建模计算可调谐光学手性

Lumerical建模计算可调谐光学手性在光学领域&#xff0c;可调谐光学手性是一个极具吸引力的研究方向。而Lumerical作为一款强大的光学仿真软件&#xff0c;为我们深入探究这一领域提供了有力工具。 什么是可调谐光学手性 光学手性简单来说&#xff0c;描述的是光与物质相互作用…...

3步掌握Qwen Code的中文编程体验:母语环境下的智能开发革命

3步掌握Qwen Code的中文编程体验&#xff1a;母语环境下的智能开发革命 【免费下载链接】qwen-code Qwen Code is a coding agent that lives in the digital world. 项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code Qwen Code是阿里云通义千问推出的智能编…...

ENSP实战:从零构建企业级WLAN网络

1. 企业级WLAN网络规划与ENSP环境搭建 第一次接触企业级WLAN部署时&#xff0c;我被各种专业术语搞得晕头转向。直到用华为ENSP模拟器实操了几次&#xff0c;才发现原来搭建无线网络就像搭积木一样有趣。ENSP作为华为官方推出的网络仿真平台&#xff0c;完美复现了真实设备的操…...

React Native vs Flutter:一次深入到底的性能对比分析(含原理 + 实战)

目录 一、先说结论&#xff08;避免踩坑&#xff09; 二、架构对比&#xff1a;性能差异的根源 1. React Native 架构 关键点&#xff1a; 2. Flutter 架构 关键点&#xff1a; 3. 核心差异总结 三、性能对比核心维度 四、启动性能&#xff08;App Launch Time&#x…...

通达信数据接口Python化:量化投资数据获取的革命性方案

通达信数据接口Python化&#xff1a;量化投资数据获取的革命性方案 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 还在为股票数据的获取而烦恼吗&#xff1f;传统的数据接口往往复杂难用&#xf…...

纷析云开源财务软件:企业级财务管理完整解决方案指南

纷析云开源财务软件&#xff1a;企业级财务管理完整解决方案指南 【免费下载链接】纷析云财务软件 纷析云SAAS云财务软件开源版&#xff0c;包含账套、凭证字、科目、期初、币别、账簿、报表、凭证、结账等功能。 纷析云开源财务系统&#xff0c;餐饮行业财务软件、微服务架构财…...

PingFangSC字体系统:跨平台中文字体解决方案的技术实践

PingFangSC字体系统&#xff1a;跨平台中文字体解决方案的技术实践 【免费下载链接】PingFangSC PingFangSC字体包文件、苹果平方字体文件&#xff0c;包含ttf和woff2格式 项目地址: https://gitcode.com/gh_mirrors/pi/PingFangSC 在数字化产品开发中&#xff0c;字体选…...

Apollo配置中心:从基础概念到实战应用全解析

1. Apollo配置中心初探&#xff1a;为什么我们需要它&#xff1f; 想象一下你正在开发一个电商系统&#xff0c;数据库连接地址、支付接口密钥、商品库存阈值等配置信息散落在20个不同的properties文件里。每次修改配置都需要重新打包部署&#xff0c;半夜三点被叫起来改生产环…...

OpenClaw技能扩展实战:基于Qwen3-32B-Chat实现公众号自动发布

OpenClaw技能扩展实战&#xff1a;基于Qwen3-32B-Chat实现公众号自动发布 1. 为什么需要自动化公众号发布 作为一个技术博主&#xff0c;我每周都要在公众号发布2-3篇技术文章。最让我头疼的不是写作本身&#xff0c;而是发布前的繁琐流程&#xff1a;手动调整Markdown格式、…...

python汽车4s店的汽车租赁服务管理系统vue

目录功能模块分析租赁服务核心功能技术实现要点扩展功能建议项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作功能模块分析 用户管理模块 用户注册与登录&#xff1a;支持手机号、邮箱注册&#xff0c;集成短信验证码功能。权限…...

QMK Toolbox终极指南:轻松掌握机械键盘固件部署与定制

QMK Toolbox终极指南&#xff1a;轻松掌握机械键盘固件部署与定制 【免费下载链接】qmk_toolbox A Toolbox companion for QMK Firmware 项目地址: https://gitcode.com/gh_mirrors/qm/qmk_toolbox QMK Toolbox是一款功能强大的开源键盘固件部署工具&#xff0c;专为QMK…...

IDM破解后总失效?试试这个永久激活方法+NASA数据下载避坑指南

IDM稳定激活与NASA数据高效下载全攻略 引言 在科研数据获取过程中&#xff0c;高效稳定的下载工具往往能事半功倍。许多研究者都遇到过这样的困扰&#xff1a;好不容易找到需要的数据源&#xff0c;却因为下载工具不稳定或操作不当&#xff0c;导致数据获取效率低下甚至失败。…...

知识蒸馏(Knowledge Distillation, KD)详细介绍

知识蒸馏&#xff08;Knowledge Distillation, KD&#xff09;详细介绍 目录 概述基本概念知识蒸馏的核心思想蒸馏过程知识类型损失函数架构设计应用场景优化策略挑战与局限最新进展总结 概述 知识蒸馏&#xff08;Knowledge Distillation, KD&#xff09;是一种模型压缩和…...

Swin Transformer生产部署与性能调优:从环境适配到架构优化的全周期解决方案

Swin Transformer生产部署与性能调优&#xff1a;从环境适配到架构优化的全周期解决方案 【免费下载链接】Swin-Transformer This is an official implementation for "Swin Transformer: Hierarchical Vision Transformer using Shifted Windows". 项目地址: http…...

OpenClaw跨平台脚本:Qwen3-32B生成的Python代码自动测试

OpenClaw跨平台脚本&#xff1a;Qwen3-32B生成的Python代码自动测试 1. 为什么需要AI全流程编程辅助 作为经常需要写脚本处理数据的开发者&#xff0c;我发现自己陷入了一个典型困境&#xff1a;每天要花大量时间编写重复性代码&#xff0c;而真正需要创造性思考的部分反而被…...

轻量部署开源网络性能测试工具:从环境搭建到性能调优全指南

轻量部署开源网络性能测试工具&#xff1a;从环境搭建到性能调优全指南 【免费下载链接】speedtest 项目地址: https://gitcode.com/gh_mirrors/spe/speedtest 在网络运维与开发过程中&#xff0c;准确掌握网络带宽性能是保障服务质量的关键。本文将介绍如何使用开源速…...

延时补偿预测器

Active flux基于扰动观测器补偿仿真模型&#xff1a; &#xff08;1&#xff09;1.5周期延时补偿 &#xff08;2&#xff09;相电压补偿 &#xff08;2&#xff09;扰动观测器补偿最近在调试电机控制项目的时候&#xff0c;总遇到Active Flux观测器输出波形抖动的问题。工程师们…...

LiuJuan20260223Zimage与Typora协作:智能化Markdown文档创作

LiuJuan20260223Zimage与Typora协作&#xff1a;智能化Markdown文档创作 每次打开Typora&#xff0c;看着那个简洁到极致的界面&#xff0c;我都会有种创作的冲动。但冲动归冲动&#xff0c;真到了要写一篇技术博客、整理一份项目文档&#xff0c;或者梳理一堆零散笔记的时候&…...

实战配置指南:5步完成Mermaid图表工具高效部署与调优

实战配置指南&#xff1a;5步完成Mermaid图表工具高效部署与调优 【免费下载链接】mermaid mermaid-js/mermaid: 是一个用于生成图表和流程图的 Markdown 渲染器&#xff0c;支持多种图表类型和丰富的样式。适合对 Markdown、图表和流程图以及想要使用 Markdown 绘制图表和流程…...