更新阐明
时隔将近一个月工夫,imi 再次发版,上面我将简略介绍这段时间里 imi 的变动。
MySQL 高性能分页查问(大表分页类)
imi 的用户广泛反馈了一个问题,那就是当业务数据越来越多的状况下,后盾分页查问的速度是越来越慢。为解决用户迫切的需要,开发了这个性能。(文档)
MySQL 分页查问的性能始终被人所诟病,既然 MySQL 不违心主动优化,那用户只能被迫手动优化。
分页查问性能优化的计划有很多,因为篇幅限度,不在这里具体阐明了。
原理:
- 先查出记录 id
- 再依据 id 查问记录
// 首先筹备好查问构建器$query = Db::query()->from('xxxtable');// 实例化大表分页类,字段名默认 id$pagination = new \Imi\Db\Mysql\Query\Pagination\BigTablePagination($query);// 指定主表主键字段名,如果波及多张表关联,这里须要指定主表的主键字段名$pagination = new \Imi\Db\Mysql\Query\Pagination\BigTablePagination($query, 'xxxtable.id');// 只查列表,返回值同 $query->select(),Result 对象$result = $pagination->select();// 获取数组$result->getArray();// 分页查问,返回值同 $query->paginate(),PaginationResult 对象$page = 1;$limit = 10;$result = $pagination->paginate($page, $limit);
仅 MySQL 数据库反对
数据库迁徙组件史诗级加强
反对在生成模型时主动生成迁徙文件。(文档)
配置
@app.beans
:
[ \Imi\Migration\Service\MigrationService::class => [ 'handler' => \Imi\Migration\Handler\FileMigrationHandler::class, // 迁徙处理器 'onGenerateModel' => true, // 是否在生成模型时主动生成迁徙文件 ],]
上述配置是默认配置,不配置时主动启用。
目录
.migration
是寄存数据库迁徙文件和版本信息的目录,请勿将 .migration/version
提交到版本控制系统。
执行数据库迁徙
执行前询问:
vendor/bin/imi-swoole migration/migrate
强制执行:
vendor/bin/imi-swoole migration/migrate -f
请审慎操作
执行数据库回滚
执行前询问:
vendor/bin/imi-swoole migration/rollback
强制执行:
vendor/bin/imi-swoole migration/rollback -f
请审慎操作
优化内存占用
这个版本解决了一处内存透露以及一处内存开释不及时(非泄露)问题,服务内存占用迟缓晋升的问题失去改善。
另外,imi 在 Swoole 和 Workerman 启动服务前,开释了一些不必要的变量,当然这个算蚊子肉优化了,能够忽略不计。
提前兼容 Swoole v5.1
imi 曾经提前跑通未正式公布的 Swoole v5.1 版本(master 分支),并且齐全兼容!
imi 减少了一个北京工夫每天 0 点自动测试,次要测试 imi 在 PHP 8.2 + Swoole master 下的测试用例是否能跑通。(测试地址)
目前来看,imi-pgsql 曾经完满兼容 Swoole v5.1 中的 pdo_pgsql hook。
接下来大家只须要急躁期待 Swoole v5.1 的正式发版!
更新日志
Release:https://github.com/imiphp/imi/releases/tag/v2.1.48
加强
- 反对 MySQL 高性能分页查问(大表分页类) (#542)
- 生成模型相干改良 (#537)
- 数据库迁徙组件(imi-migration),反对一种新的迁徙形式
优化
- 优化软删除查问构建器及时开释内存(非泄露) (#547)
- 简化框架配置 (#543)
- 优化了一些代码
- 改良服务相干 (#541)
- 优化启动服务命令,修复 swoole 启动服务指定
workerNum
参数有效 - 设置 Workerman 过程名称
修复
- 修复 Swoole 下期待连贯事件执行完才执行 receive 的机制偶然会生效 (#551)
- 修复
ConnectionContextStore
初始化 (#552) - 修复可能存在的定时器未捕捉谬误 (#550)
- 修复事务嵌套时,事件触发不正确 (#548)
- 修复事件名称是动静设定时,仅触发一次的事件被执行后,有残留数据导致内存透露 (#546)
- 修复
SWOOLE_PROCESS
模式获取 master 过程 pid (#545) - 修复生成模型基类中的
ddlDecode
值有时不正确 - 修复配置
beanScan
后扫描命名空间谬误 (#540) - 修复同一个目录被多个命名空间映射,扫描报错 (#540)
- 修复
AnnotationManager
获取注解办法,传入$onlyFirst=true
找不到注解时特定状况不返回 null (#538) - 修复极其状况下某些类初始化不齐全 (#553)
其它
- 欠缺了一些测试
- 更新了一些文档
- 修复覆盖率测试和偶发测试失败 (#539)
- 修复 Windows 测试 Workerman Gateway,启动服务时端口检测不齐全
- 每天北京工夫 0 点定时测试 PHP8.2 + Swoole master 分支(pdo_pgsql hook 跑通)
- 更新 php-cs-fixer 版本 (#536)
对于 imi
imi 是一款反对长连贯微服务分布式的 PHP 开发框架,它能够运行在 PHP-FPM
、Swoole
、Workerman
和 RoadRunner
等多种容器环境下。
imi 提供了丰盛的根底性能:MySQL
、PostgreSQL
、Redis
、超强超好用的自研 ORM
、连接池
、Web Api
、Web MVC
、WebSocket
、TCP Server
、UDP Server
、HTTP2
、MQTT
、gRPC
、容器化(Container)
、依赖注入
、Aop
、事件
、异步(Async)
、缓存(Cache)
、命令行(Command)
、配置化(Config)
、上下文(Context)
、定时工作(Cron)
、门面(Facade)
、验证器(Validate)
、锁(Lock)
、日志(Log)
、定时器(Timer)
、权限管制
、音讯队列(RabbitMQ、Kafka、Redis)
、Swagger
、Hprose
、宏(Macro)
、限流
、共享内存
、Smarty
、雪花算法发号器(Snowflake)
、Workerman Gateway
、InfluxDB
和 TDengine
等组件。
同时,imi 还提供了微服务相干反对:Nacos 配置核心
、etcd 配置核心
、Nacos 服务注册
、Nacos 服务发现
、Swoole Tracker
、Zipkin
、Jaeger
、Prometheus
、InfluxDB 服务指标监控
、TDengine 服务指标监控
和 负载平衡
等组件。
除此之外,imi 还提供了治理后盾开发骨架 imi-admin。
imi 框架自 2018 年 6 月 21 日首次公布以来,曾经稳固运行在许多我的项目中,例如文旅电商平台、物联网充电云平台、停车云平台、领取微服务、短信微服务、钱包微服务、卡牌游戏服务端和数据迁徙服务(虎扑)等我的项目。
- 官网:https://www.imiphp.com/
- Github:https://github.com/imiphp/imi
- Gitee:https://gitee.com/yurunsoft/IMI
- 技术支持:https://doc.imiphp.com/v2.1/base/support.html