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

Hyperf方案 分库分表实现

?php/** * 案例标题分库分表实现 * 说明基于用户ID取模实现分表路由水平分片存储海量订单数据 * 需要安装的包 * composer require hyperf/db-connection */declare(strict_types1);// app/Sharding/ShardingStrategy.php namespaceApp\Sharding;/** * 分片策略根据用户ID决定用哪个库、哪张表 * 分表规则用户ID % 分片数 表后缀 */classShardingStrategy{privateint$tableShards8;// 分8张表orders_0 ~ orders_7privateint$dbShards2;// 分2个库db0 db1可选单库分表也行/** * 根据用户ID算出用哪张表 * 同一个用户的所有订单都在同一张表里便于按用户查 */publicfunctiongetTableName(int$userId,string$baseTableorders):string{$suffix$userId%$this-tableShards;// 取模0-7return{$baseTable}_{$suffix};// 比如 orders_3}/** * 根据用户ID算出用哪个数据库连接 */publicfunctiongetConnection(int$userId):string{$suffixintdiv($userId%$this-tableShards,$this-tableShards/$this-dbShards);returndb{$suffix};// 比如 db0 或 db1}/** * 获取所有分片的连接表名组合全表扫描时用 */publicfunctiongetAllShards(string$baseTableorders):array{$shards[];for($i0;$i$this-tableShards;$i){$dbIdxintdiv($i,$this-tableShards/$this-dbShards);$shards[][connectiondb{$dbIdx},table{$baseTable}_{$i}];}return$shards;}}// app/Repository/ShardingOrderRepository.php namespaceApp\Repository;useApp\Sharding\ShardingStrategy;useHyperf\DbConnection\Db;/** * 分表订单Repository * 所有对orders表的操作都通过这里屏蔽分表逻辑 */classShardingOrderRepository{publicfunction__construct(privateShardingStrategy$sharding){}/** * 新建订单根据用户ID路由到对应分表 */publicfunctioncreate(array$data):int{$userId$data[user_id];$table$this-sharding-getTableName($userId);// 算出表名$conn$this-sharding-getConnection($userId);// 算出连接名returnDb::connection($conn)// 用指定数据库连接-table($table)// 用指定分表-insertGetId($data[created_atdate(Y-m-d H:i:s)]);}/** * 按用户ID查订单直接定位到那张分表 */publicfunctionfindByUserId(int$userId,int$page1,int$perPage20):array{$table$this-sharding-getTableName($userId);$conn$this-sharding-getConnection($userId);returnDb::connection($conn)-table($table)-where(user_id,$userId)-orderByDesc(id)-forPage($page,$perPage)// 分页-get()-toArray();}/** * 按订单ID查订单订单ID里编码了分表信息 * 订单ID格式用户ID(8位) 时间戳(10位) 随机(4位) */publicfunctionfindById(string$orderId):?object{// 从订单ID解析出用户ID进而找到分表$userId(int)substr($orderId,0,8);// 取前8位是用户ID$table$this-sharding-getTableName($userId);$conn$this-sharding-getConnection($userId);returnDb::connection($conn)-table($table)-find($orderId);}/** * 生成带分片信息的订单号 * 把用户ID编码进订单号方便反查分片 */publicfunctiongenerateOrderNo(int$userId):string{returnsprintf(%08d%010d%04d,$userId,// 8位用户ID前缀0补齐time(),// 10位时间戳rand(1000,9999)// 4位随机数防重复);// 总共22位订单号}/** * 跨分片查询全局查询性能差能避免就避免 * 比如管理后台按状态查所有分片的订单 */publicfunctionfindAcrossShards(string$status,int$limit100):array{$allResults[];$shards$this-sharding-getAllShards(orders);foreach($shardsas$shard){// 每个分片查一部分然后合并$rowsDb::connection($shard[connection])-table($shard[table])-where(status,$status)-limit($limit)-get()-toArray();$allResultsarray_merge($allResults,$rows);if(count($allResults)$limit)break;// 够了就停}// 合并后按时间排序各分片的数据混在一起了usort($allResults,fn($a,$b)strcmp($b-created_at,$a-created_at));returnarray_slice($allResults,0,$limit);// 最终只返回limit条}}// config/autoload/database.php 多库配置 return[default[hostenv(DB_HOST,127.0.0.1),/* ... */],db0[hostenv(DB0_HOST,10.0.1.10),/* 分库0 */],db1[hostenv(DB1_HOST,10.0.1.11),/* 分库1 */],];

相关文章:

Hyperf方案 分库分表实现

<?php /*** 案例标题&#xff1a;分库分表实现* 说明&#xff1a;基于用户ID取模实现分表路由&#xff0c;水平分片存储海量订单数据* 需要安装的包&#xff1a;* composer require hyperf/db-connection*/declare(strict_types1);// app/Sharding/ShardingStrategy.php…...

008.S3C2440中断分析|千篇笔记实现嵌入式全栈/裸机篇

1. 流程 S3C2440中断流程如下&#xff0c; 发生中断时&#xff0c;[SUB]SRCPND源挂起寄存器对应的bit位会置位&#xff0c; 然后[SUB]MASK屏蔽寄存器对应的bit位会卡一下&#xff0c;决定中断流要不要继续&#xff0c; 也就是说不管中断有没有被屏蔽&#xff0c;源挂起寄存…...

2026届最火的十大AI科研工具实测分析

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 在学术写作范畴&#xff0c;以及内容创作的领域当中&#xff0c;把文本被人工智能检测工具标…...

FireRedASR-AED-L效果实测:微信语音转文字→长语音断句与上下文连贯性

FireRedASR-AED-L效果实测&#xff1a;微信语音转文字→长语音断句与上下文连贯性 你是不是也遇到过这种情况&#xff1f;微信里收到一段长达5分钟的语音消息&#xff0c;点开听吧&#xff0c;太费时间&#xff1b;不听吧&#xff0c;又怕错过重要信息。更让人头疼的是&#x…...

【RAG】【vector_stores008】AwaDB向量存储示例

案例目标本案例演示如何使用AwaDB作为向量存储后端构建RAG系统。AwaDB是一个高性能的向量数据库&#xff0c;专门用于存储和检索高维向量数据&#xff0c;适用于语义搜索、推荐系统和AI应用等场景。通过本示例&#xff0c;用户可以学习如何集成AwaDB与LlamaIndex&#xff0c;实…...

告别复杂配置!GLM-4.7-Flash镜像开箱即用,支持OpenAI兼容API

告别复杂配置&#xff01;GLM-4.7-Flash镜像开箱即用&#xff0c;支持OpenAI兼容API 1. GLM-4.7-Flash模型简介 1.1 新一代开源大语言模型 GLM-4.7-Flash是智谱AI推出的最新一代开源大语言模型&#xff0c;采用创新的MoE&#xff08;混合专家&#xff09;架构&#xff0c;总…...

Audio Pixel Studio保姆级教程:Windows/Mac/Linux三平台本地部署详解

Audio Pixel Studio保姆级教程&#xff1a;Windows/Mac/Linux三平台本地部署详解 1. 引言&#xff1a;极简像素音频工作站 Audio Pixel Studio是一款基于Streamlit开发的轻量级音频处理Web应用&#xff0c;它将专业级音频处理能力封装在清新简约的界面中。无论你是内容创作者…...

Pixel Aurora Engine入门实战:用‘8-BIT RPG tavern interior’生成完整场景

Pixel Aurora Engine入门实战&#xff1a;用8-BIT RPG tavern interior生成完整场景 1. 认识Pixel Aurora引擎 Pixel Aurora是一款专为像素艺术创作设计的AI绘图工作站。它采用复古游戏机风格的界面设计&#xff0c;让用户仿佛在操作一台来自80年代的魔法游戏机。核心功能是将…...

【 MySQL 使用教程】

一、数据操作 数据库 -- 登录 mysql -u root -p -- 查看所有数据库 show databases; -- 创建数据库 create database if not exists 数据库名; -- 删除数据库 drop database if exists 数据库名; -- 进入数据库 use 数据库名;表table -- 查看数据表 show tables;-- 创建表 crea…...

学生项目福音:AI超清画质增强快速入门,WebUI界面开箱即用

学生项目福音&#xff1a;AI超清画质增强快速入门&#xff0c;WebUI界面开箱即用 1. 为什么你需要AI画质增强技术 1.1 低清图像的普遍困扰 作为学生开发者&#xff0c;你可能经常遇到这样的场景&#xff1a;课程项目需要展示清晰的图片素材&#xff0c;但手头只有模糊的截图…...

复古游戏机式AI绘图:像素极光引擎LoRA模块化扩展实战教程

复古游戏机式AI绘图&#xff1a;像素极光引擎LoRA模块化扩展实战教程 1. 像素极光引擎简介 Pixel Aurora&#xff08;像素极光&#xff09;是一款将复古游戏机美学与现代AI绘图技术完美融合的创新工具。它采用经典的8-bit像素风格界面&#xff0c;却搭载了最先进的扩散模型技…...

图像滤波实战:理想、巴特沃斯与高斯滤波器的低通/高通实现与性能对比

1. 图像滤波基础与核心概念 第一次接触图像滤波时&#xff0c;我完全被各种专业术语搞晕了。直到自己动手写代码调试&#xff0c;才发现原来这些滤波器就像不同类型的"美颜滤镜"——有的擅长磨皮&#xff08;低通滤波&#xff09;&#xff0c;有的擅长锐化&#xff0…...

LM339比较器:从基础参数到典型应用场景解析

1. LM339比较器基础解析 第一次接触LM339时&#xff0c;我完全被它"四合一"的设计惊艳到了——这个比指甲盖还小的芯片里&#xff0c;竟然藏着四个独立工作的电压比较器。简单来说&#xff0c;它就像四个并排摆放的天平&#xff0c;能同时比较八路电压信号的高低。实…...

扩展你的 RAG:基于 Rust 的 LanceDB 和 Candle 索引管道

原文&#xff1a;towardsdatascience.com/scale-up-your-rag-a-rust-powered-indexing-pipeline-with-lancedb-and-candle-cc681c6162e8?sourcecollection_archive---------2-----------------------#2024-07-11 构建大规模文档处理的高性能嵌入和索引系统 https://medium.co…...

IDEA Services窗口:一站式掌控多服务启动与端口监控

1. 为什么你需要Services窗口 作为一个常年和微服务打交道的开发者&#xff0c;我最头疼的就是同时管理五六个服务模块。每次启动项目都要开一堆终端窗口&#xff0c;查看日志得像玩连连看一样在不同窗口间切换。更崩溃的是&#xff0c;当某个服务启动失败时&#xff0c;往往要…...

解决Blender和UE5坐标轴差异:服装Mesh导入导出常见问题排查指南

Blender与UE5坐标轴差异全解析&#xff1a;从理论到实践的资产迁移指南 在数字内容创作流程中&#xff0c;Blender与Unreal Engine 5(UE5)的协同工作已成为行业标准。但许多开发者第一次将服装模型从Blender导入UE5时&#xff0c;都会遇到一个令人困惑的现象——明明在Blender中…...

深入解析Pydantic中的Field与Annotated:从基础到实战应用

1. Pydantic基础与Field入门 Pydantic是Python生态中数据验证和序列化的黄金标准&#xff0c;我在实际项目中用它处理过各种复杂的数据结构。它的核心优势在于利用Python类型提示来定义数据模型&#xff0c;而Field则是模型定义中最灵活的工具。 Field的基本用法很简单&#xf…...

免费会员源码网大盘点:从入门搭建到深度运营的全攻略

一、全球会员系统开源生态&#xff1a;技术架构与商业场景双驱动1. Bagisto Membership&#xff08;Laravel生态&#xff09;作为基于Laravel框架的会员管理解决方案&#xff0c;其核心优势在于&#xff1a;多商户支持&#xff1a;原生支持D2C、B2B2C等复杂商业模式&#xff0c…...

程序员必看!高质量免费源码网推荐

在数字化浪潮席卷全球的今天&#xff0c;代码已成为驱动创新的核心动力。无论是初创企业快速搭建商业平台&#xff0c;还是开发者优化项目架构&#xff0c;高质量的源码资源都能显著缩短研发周期、降低开发成本。然而&#xff0c;面对网络上鱼龙混杂的源码平台&#xff0c;如何…...

亲测有效!5个无广告免费源码网 —— 会员源码网深度解析

在当今数字化时代&#xff0c;源码资源对于开发者、创业者和企业来说至关重要。一个优质的源码网站不仅能提供丰富的代码资源&#xff0c;还能促进技术交流和创新。今天&#xff0c;我要向大家推荐一个亲测有效的无广告免费源码网——会员源码网。会员源码网简介会员源码网是一…...

会员源码网:站长必备的一站式源码解决方案

作为站长或开发者&#xff0c;你是否经常为寻找合适的源码而烦恼&#xff1f;要么资源老旧难以适配新环境&#xff0c;要么免费源码暗藏后门和广告&#xff0c;要么付费源码价格高昂却效果不佳。在众多源码平台中&#xff0c;会员源码网​ 凭借其独特的会员制模式和优质资源&am…...

Hunyuan-MT 7B效果实测:韩语、俄语、藏语等小语种翻译到底有多准?

Hunyuan-MT 7B效果实测&#xff1a;韩语、俄语、藏语等小语种翻译到底有多准&#xff1f; 1. 小语种翻译的痛点与解决方案 在全球化交流日益频繁的今天&#xff0c;小语种翻译需求快速增长&#xff0c;但传统解决方案往往存在三大痛点&#xff1a; 准确率低&#xff1a;韩语…...

SUPER COLORIZER 理解操作系统调度:多任务并发处理图片上色请求的实践

SUPER COLORIZER 理解操作系统调度&#xff1a;多任务并发处理图片上色请求的实践 你有没有想过&#xff0c;当你把一张黑白照片上传给SUPER COLORIZER&#xff0c;点击“上色”按钮后&#xff0c;你的电脑或者服务器里到底发生了什么&#xff1f;如果这时候有100个人同时上传…...

百度PaddleOCR-VL-WEB效果实测:识别精度超高,多语言支持

百度PaddleOCR-VL-WEB效果实测&#xff1a;识别精度超高&#xff0c;多语言支持 1. 效果初探&#xff1a;它到底有多强&#xff1f; 如果你还在为识别扫描的PDF文档、复杂的表格或者多语言混合的合同而头疼&#xff0c;那么百度开源的PaddleOCR-VL-WEB镜像&#xff0c;很可能…...

ANIMATEDIFF PRO应用案例:如何制作具有电影感的日落海滩动态壁纸

ANIMATEDIFF PRO应用案例&#xff1a;如何制作具有电影感的日落海滩动态壁纸 1. 为什么选择ANIMATEDIFF PRO制作动态壁纸 1.1 普通视频生成工具的局限 大多数视频生成工具在制作动态壁纸时面临三个主要问题&#xff1a; 动作不连贯&#xff1a;海浪拍打、云层移动等自然现象…...

SDMatte商业级抠图案例展示:电商平台海量商品图处理实录

SDMatte商业级抠图案例展示&#xff1a;电商平台海量商品图处理实录 1. 开篇&#xff1a;当AI抠图遇上电商实战 电商平台每天要处理成千上万的商品图片&#xff0c;从服装模特到珠宝首饰&#xff0c;每张图都需要完美的展示效果。传统人工抠图不仅成本高&#xff0c;面对促销…...

别再手动部署了!用Jenkins Pipeline + K8s + Harbor 实现Spring Boot项目自动化发布(保姆级教程)

从混乱到优雅&#xff1a;基于Jenkins Pipeline的云原生CI/CD实战指南 为什么你的自动化部署流程依然低效&#xff1f; 在技术团队中&#xff0c;我们经常遇到这样的场景&#xff1a;明明已经配置了GitLab代码仓库、搭建了Jenkins构建服务器、部署了Harbor镜像仓库和Kubernetes…...

AcousticSense AI优化升级:如何提升识别准确率和响应速度

AcousticSense AI优化升级&#xff1a;如何提升识别准确率和响应速度 1. 从听到看&#xff1a;音频识别的新范式 传统音频识别技术往往受限于特征提取的局限性&#xff0c;而AcousticSense AI开创性地将声音转化为视觉信号进行处理。这套系统通过三个关键步骤实现音频理解&am…...

告别PX4!用APM+Gazebo+SITL在Ubuntu 20.04上从零搭建无人机仿真环境(保姆级排坑实录)

告别PX4&#xff01;用APMGazeboSITL在Ubuntu 20.04上从零搭建无人机仿真环境&#xff08;保姆级排坑实录&#xff09; 当大多数无人机开发者还在PX4生态中挣扎于环境配置时&#xff0c;APM固件正以更轻量级的架构和灵活的扩展性悄然崛起。本文将带你跳出PX4的思维定式&#xf…...

HunyuanVideo-Foley在智能家居场景的落地:让智能设备拥有更自然的语音反馈

HunyuanVideo-Foley在智能家居场景的落地&#xff1a;让智能设备拥有更自然的语音反馈 1. 智能家居音效的现状与痛点 清晨6点半&#xff0c;刺耳的"滴滴滴"闹铃声把你从睡梦中惊醒&#xff1b;晚上关灯时&#xff0c;突然的"咔哒"断电声让人心头一紧——…...