关于php:imi-v2148-发布大表分页和数据库迁移组件史诗级增强

37次阅读

共计 3180 个字符,预计需要花费 8 分钟才能阅读完成。

更新阐明

时隔将近一个月工夫,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-FPMSwooleWorkermanRoadRunner 等多种容器环境下。

imi 提供了丰盛的根底性能:MySQLPostgreSQLRedis超强超好用的自研 ORM连接池 Web ApiWeb MVCWebSocketTCP ServerUDP ServerHTTP2MQTTgRPC 容器化(Container)依赖注入 Aop 事件 异步(Async)缓存(Cache)命令行(Command)配置化(Config)上下文(Context)定时工作(Cron)门面(Facade)验证器(Validate)锁(Lock)日志(Log)定时器(Timer)权限管制 音讯队列(RabbitMQ、Kafka、Redis)SwaggerHprose宏(Macro)限流 共享内存 Smarty 雪花算法发号器(Snowflake)Workerman GatewayInfluxDBTDengine 等组件。

同时,imi 还提供了微服务相干反对:Nacos 配置核心 etcd 配置核心Nacos 服务注册Nacos 服务发现Swoole TrackerZipkinJaegerPrometheusInfluxDB 服务指标监控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

正文完
 0