1942年,幾名統計學家走進盟軍情報部門的會議室,把一疊序號記錄拍在桌上。他們不看間諜報告,不聽截獲的無線電,只做了一件事:數數。數的是從戰場上繳獲或擊毀的德國坦克上銘刻的序列號。這些號碼整齊劃一地打在了變速箱、底盤、負重輪上——德國人的工程強迫癥,意外變成了一封情報信。
盟軍當時的估算方式聽著靠譜:安插間諜、攔截通信、加上經驗豐富的推測。推出來的數字是每月大約生產1500輛坦克。但統計學家的算術推翻了整個判斷。他們觀察到,在繳獲的坦克中,看到的最高序列號是m,總共看到了k輛。他們給出的總產量估算值是一個簡潔到近乎狡猾的公式:N ≈ m + (m / k) ? 1。
![]()
直覺是這樣工作的:你手上最大的那個數字,告訴你已經摸到了多靠近天花板;而你手上總共有多少個數字,告訴你這個“靠近”有多可信。序列號之間的空缺,正好替你估算出那些還沒見過的坦克。這就像只翻了幾頁書,就能猜出整本書的頁碼——只要頁碼是連續印上去的。
1942年的某個具體月份里,間諜給出的數字是1500輛上下,統計學家只靠繳獲序列號和這個公式,給出的答案是327輛。戰后德國生產記錄被找到,真實的月產量是342。間諜錯了一千多輛,這群做算術的錯了15輛。換句話說,連續號碼本身就會泄露規模,所有看到過一小段序列號的人,都有能力反推出整體存量。
這個教訓被刻進情報工作的底層邏輯:順序編號就是天線,向外廣播著你的數量。我每次看到類似 /users/1042 的網址,腦子里自動跳出來的就是那些坦克的齒輪箱編號。
把地圖從二戰挪到今天的后端開發,幾乎每個數據庫都在兢兢業業地扮演德國裝甲師的角色。你創建一個PostgreSQL 表,主鍵用 serial 自增整數,因為那是默認選項,排序好看,用著順手。用戶1是你,2是你的聯合創始人,3是你媽媽,一切完美。然后你搭建了個人主頁,路由就是 /users/3。上線。從這一刻起,你同時也上線了一臺序列號發報機。
競爭對手、無聊的青少年、記者,任何有個瀏覽器的人,都可以像當年的統計學家一樣操作。今天注冊一個賬號,拿到 ID 等于 4317;等一周,換一個郵箱再注冊,拿到 ID 等于 4981。做一次減法:4981 減去 4317,就是你這周的注冊量——664個新用戶。對方沒有入侵任何系統,沒有破解任何接口,只是讀了你隨手攤在URL里的序列號。你的增長數據被讀走了,就像盟軍讀走坦克齒輪箱上的編號一樣安靜。
這就是“德國坦克問題”在現代互聯網的投影。自增ID不只是個技術習慣,更是一個默認開啟的信息廣播頻道。它把用戶量、業務增速、甚至某些活動的參與人數,都打包成精心排列的數字,發給每一個愿意做算術的人。UUID 不是過度設計,而是關掉這條舊情報頻道的開關。
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.