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

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 工具。

我们对开源的理解:

安装要简单

使用要舒服

性能要给力

http://www.cnnetsun.cn/news/48889.html

相关文章:

  • 22、LTSP 环境搭建与 Ubuntu 服务器安全指南
  • 23、Linux系统安全管理:sudo、AppArmor与SSH的深度解析
  • 智能中文对话系统完整构建指南:从零到一的5个关键步骤
  • Java泛型实战:类型安全与高效开发
  • 无需函数,教你快速分离Excel单元格中的文本和数字
  • 学术探索新航标:书匠策AI解锁毕业论文写作的“隐形导航仪”
  • 告别论文“缝合怪”:解锁书匠策AI,把信息碎片织成你的知识图谱
  • 学术迷航中的智能灯塔:书匠策AI如何重构毕业论文写作生态
  • 别再死磕论文了!你的毕业论文需要一个“科研副驾”
  • 当你的学术世界支离破碎,我借AI之手为它重绘版图
  • 论文焦虑终结者?揭秘「书匠策AI」如何用算法重构你的学术写作体验
  • 职场进阶:如何全面提升面试表现力?
  • 律师咨询|基于springboot + vue律师咨询系统(源码+数据库+文档)
  • Agent 通过Langchain实现网页检索功能
  • 终极指南:5分钟快速搭建个人作品集网站的完整解决方案
  • CogVideo革命性突破:2D视频秒变立体3D的智能转换技术
  • DeepLabCut实战进阶:从姿态估计到强化学习环境的深度配置指南
  • 终极游戏DLC解锁指南:三步免费解锁付费内容
  • SeedVR2 2.5.10全面评测:8GB显存也能玩转的AI视觉增强神器
  • PCSX2模拟器性能优化终极指南:从卡顿到流畅的完整解决方案
  • 告别卡顿:DBeaver性能优化终极指南
  • NetSonar网络诊断工具:快速定位网络问题的终极解决方案
  • 电子书格式不兼容 零门槛转换 一键搞定 电子书格式转换下载器
  • 『一键掌控』Defender Control:Windows安全防护的终极管理方案
  • 如何在3小时内构建28M微模型:数据预处理实战避坑指南
  • Wallpaper Engine壁纸下载器:5分钟学会轻松获取创意工坊动态壁纸
  • 250MB实现千亿级能力:腾讯混元0.5B重构边缘AI范式
  • HunyuanVideo-Avatar:单图+音频生成高保真数字人视频,开启内容创作新纪元
  • MATLAB 2008B完整安装指南:从下载到配置的一站式解决方案
  • 计算机毕业设计|基于springboot + vue图书借阅管理系统(源码+数据库+文档)