更新阐明
时隔将近一个月工夫,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