相信每位 Laravel 開發者都遇到過這種情況:新建項目、寫遷移、模型默認用自增 ID。開始挺好,但等到系統要上分佈式、對接 API、搞微服務的時候,整數 ID 的侷限性就暴露出來了。

Laravel ObjectId 就是為了解決這個問題:一套開箱即用的全局唯一 ID 方案,借鑑了 MongoDB ObjectId 的設計思路,可以直接用在 MySQL、MariaDB 和 PostgreSQL 上,不需要裝 MongoDB。

為什麼要用 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'); Laravel ObjectId 性能最強體積最小的分佈式 UUID 生成擴展_數據庫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 工具。