news 2026/6/10 16:07:22

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 工具。

我们对开源的理解:

安装要简单

使用要舒服

性能要给力

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 22:57:46

三步搞定.NET Framework 3.5自动化部署:Windows系统管理员的救星

三步搞定.NET Framework 3.5自动化部署:Windows系统管理员的救星 【免费下载链接】.NETFramework3.5一键安装工具 本仓库提供了一个方便快捷的资源文件,用于一键安装.NET Framework 3.5。该工具适用于需要在Windows系统上快速部署.NET Framework 3.5的用…

作者头像 李华
网站建设 2026/6/10 13:04:54

腾讯开源视频生成新标杆:HunyuanVideo的技术突破与应用前景

腾讯开源视频生成新标杆:HunyuanVideo的技术突破与应用前景 【免费下载链接】HunyuanVideo-PromptRewrite 项目地址: https://ai.gitcode.com/hf_mirrors/tencent/HunyuanVideo-PromptRewrite 在视频生成技术快速发展的今天,腾讯最新开源的Hunyu…

作者头像 李华
网站建设 2026/6/10 12:41:29

19、Ubuntu服务器常见配置指南(上)

Ubuntu服务器常见配置指南(上) 在当今的服务器管理中,Ubuntu系统因其稳定性和易用性受到广泛青睐。本文将为你详细介绍Ubuntu服务器中邮件服务器、OpenSSH服务器以及DHCP服务器的常见配置方法。 1. 邮件服务器配置 1.1 二级邮件服务器设置 若要为 example.org 和 exa…

作者头像 李华
网站建设 2026/6/8 13:22:03

17、网络操作与文件搜索全解析

网络操作与文件搜索全解析 在网络环境中,我们常常需要查看网络路由表、传输文件、安全地与远程主机通信以及搜索文件。下面将详细介绍这些操作及其相关工具。 查看网络路由表 使用 netstat 命令的 -r 选项可以显示内核的网络路由表,它展示了网络如何配置以在不同网络之…

作者头像 李华
网站建设 2026/6/10 9:45:47

我如何使用 Claude Code 的每个功能

我几乎每天都在使用 Claude Code。在个人项目中,我每周会在虚拟机里运行它多次,经常配合 --dangerously-skip-permissions,以“随心编码(vibe code)”的方式快速把脑中的点子落地。工作中,我们团队的一部分…

作者头像 李华
网站建设 2026/6/10 11:50:51

Oracle LogMiner实战指南:误删误改数据的救命稻草

惊魂时刻:数据误操作的现实困境在日常数据库运维中,数据误操作几乎无法完全避免:误执行DELETE不带WHERE条件,整表数据瞬间消失UPDATE忘记限定范围,全表数据被错误更新DROP表时选错对象,重要业务表意外被删批…

作者头像 李华