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

Laravel ObjectId 性能最强体积最小的分布式 UUID 生成扩展

Laravel ObjectId 性能最强体积最小的分布式 UUID 生成扩展

相信每位 Laravel 开发者都遇到过这种情况:新建项目、写迁移、模型默认用自增 ID。开始挺好,但等到系统要上分布式、对接 API、搞微服务的时候,整数 ID 的局限性就暴露出来了。

Laravel ObjectId 就是为了解决这个问题:一套开箱即用的全局唯一 ID 方案,借鉴了 MongoDB ObjectId 的设计思路,可以直接用在 MySQL、MariaDB 和 PostgreSQL 上,不需要装 MongoDB。

原文链接 Laravel ObjectId 性能最强体积最小的分布式 UUID 生成扩展

为什么要用 ObjectId?

和 UUID、ULID 比起来,ObjectId 只有 12 字节,里面包含了时间戳、随机值和计数器,所以天然可排序、体积小、跨系统唯一。

性能数据很直观:生成速度是 UUID 的 3 倍,占用空间更小,直接拉升数据库性能和索引效率。

  • 原生支持 MySQL、MariaDB 和 PostgreSQL
  • 不依赖 MongoDB 驱动或扩展

ObjectId 内部结构

ObjectId 是个 12 字节(96 位)的标识符,分成四个部分:

组成部分 占用空间 说明
时间戳 4 字节 UNIX 时间戳秒数,保证 ID 按时间排序
机器标识 5 字节 随机生成,每台机器不同
进程 ID 2 字节 标识当前进程
自增计数器 3 字节 每个进程独立计数,初始值随机

总共:4 + 5 + 2 + 3 = 12 字节 = 24 位十六进制字符

这个设计的好处是不需要中心化的 ID 生成服务就能保证唯一性,还能按时间顺序排列,特别适合分布式系统。

扩展阅读:

  • MongoDB ObjectId 官方文档
  • Percona 关于 ObjectId 的深度解析
  • Stack Overflow 上的 ObjectId 结构分析

相关包

这个 Laravel 扩展包依赖了一个核心 PHP 库:

  • wooserv/php-objectid:纯 PHP 实现,不依赖任何扩展
  • wooserv/laravel-objectid:Laravel 集成包,支持自动 ID 分配和迁移宏

两个包都是开源的,MIT 协议,WooServ Labs 出品。

安装

composer require wooserv/laravel-objectid

使用方式

在模型中使用

use WooServ\LaravelObjectId\Concerns\HasObjectIds;
use Illuminate\Database\Eloquent\Model;class Post extends Model
{use HasObjectIds;
}

迁移文件写法

Schema::create('posts', function (Blueprint $table) {$table->objectId(); // Creates a 24-char string primary key$table->string('title');$table->timestamps();
});

手动生成 ID

$id = objectid(); // e.g. 6730b6a0d8a28f890b7c9f40

性能测试

ID 生成速度(10,000 次)

----------------------------------------------------------
ObjectId             : 0.412 µs per ID
objectid() helper    : 0.417 µs per ID
UUID                 : 1.283 µs per ID
ULID                 : 1.147 µs per ID
----------------------------------------------------------
结论:ObjectId 最快

数据库插入速度(1,000 条)

----------------------------------------------------------
ObjectId   : 14.78 ms total (0.015 ms/insert)
UUID       : 15.48 ms total (0.015 ms/insert)
ULID       : 15.17 ms total (0.015 ms/insert)
----------------------------------------------------------

三者对比

对比项 ObjectId UUID ULID
字符串长度 24 字符 36 字符 26 字符
字节数 12 16 16
时间排序 支持 不支持 支持
随机性 支持 支持 支持
可读性 简洁 冗长 适中
生成速度 最快 最慢 中等
MySQL/MariaDB/PostgreSQL 支持 支持 支持 支持
是否需要 MongoDB 不需要 不需要 不需要

总结: ObjectId 在体积、性能和时间排序上做到了最好的平衡,而且可以直接用在传统 SQL 数据库上。

核心优势

  • 自动分配,不用手动生成 ID
  • 迁移宏 $table->objectId() 写起来很舒服
  • 核心库独立,不绑定 Laravel 框架
  • 体积小,比 UUID 省数据库空间
  • 自带时间戳,ID 天然按时间排序
  • 兼容主流数据库:MySQL、MariaDB、PostgreSQL

关于开源

这两个包都采用 MIT 协议,由 WooServ Labs 团队维护。这个团队专注于为现代 Web 应用打造开放、高性能的 PHP 工具。

我们对开源的理解:

  • 安装要简单
  • 使用要舒服
  • 性能要给力

认同这些想法的话,欢迎给仓库点星、提交代码,或者推荐给其他开发者。

相关链接

  • Laravel ObjectId GitHub 仓库
  • PHP ObjectId GitHub 仓库
  • MongoDB ObjectId 参考文档
http://www.rkmt.cn/news/46993.html

相关文章:

  • k6 nats 测试扩展
  • 一场论坛捕捉 26 年语音 AI 关键词:思考机制、专有模型、低功耗、超低帧率、多语种、语音增强……丨RTE2025 回顾
  • 2025年11月EGUOO营养包价格贵:稀缺原料与诺奖科研背书下的价值拆解
  • 2025年7月EGUOO营养包价格贵推荐:从成分奢侈品到健康投资品路径
  • 习题解析之:求数列前n项的平方和
  • 画家的命运
  • 侧载安装 .msixbundle 程序包的两种方法
  • 基于和声搜索(Harmony Search, HS)的多中心点选址优化算法matlab仿真
  • OU 的类人话集
  • the future of American universities
  • 2025 年 11 月电缆厂家权威推荐榜:国标/国网入围/南网入围/铜芯/纯铜/铝合金/光伏/新能源/控制/拖链/铠装电缆厂家精选
  • 2025 年 11 月电缆分支箱厂家推荐排行榜,电缆分接箱,电缆对接箱,35KV带隔离开关,10KV欧式,高压电缆分支箱公司精选
  • 2025 年 11 月高压泵厂家推荐排行榜,高压清洗泵,试压泵,超小型,电动,高温,柴油,海水淡化,往复式,三柱塞,柱塞,三缸柱塞高压泵公司推荐
  • 快捷键、图层面板、时间轴、图表编辑器
  • Ai元人文:认知纠缠体——当文明踏入元智慧纪元
  • Linux 管道的速度到底有多快?
  • 2025 年 11 月中央空调厂家推荐排行榜,美的中央空调,海信中央空调,大金中央空调,格力中央空调,约克中央空调,海尔中央空调,商用/家用/工业中央空调安装维修公司推荐
  • JavaSE---数组
  • 教育部关于印发普通高中课程方案和语文等 学科课程标准(2017年版2020年修订)的通知
  • 每日反思(2025_11_11)
  • 别被热潮迷惑:八款AI智能编程助手全景对比
  • 超参数
  • Weblate审计日志IP泄露漏洞分析
  • 团队作业2-《文章管理系统》需求规格说明书
  • 01人月神话读后感--软件中的“焦油坑”
  • 从同步耦合到异步解耦:消息中间件如何重塑系统间的通信范式?
  • 第22天(简单题中等题 二分查找)
  • Meta AI 推出全语种语音识别系统,支持 1600+语言;谢赛宁、李飞飞、LeCun 联手发布「空间超感知」AI 框架丨日报
  • Python Socket网络编程
  • 英语翻译题做法