自馬斯克和他領導的“政府效率部”(DOGE)在各個聯邦政府機構開始查賬後,他們公布了不少讓人驚掉下巴的各種腐敗/浪費信息。雖然一次次被媒體的事實核查打臉,他們還是不斷發布新的聳人聽聞的信息。
福克斯台報道說埃隆·馬斯克聲稱有 150 歲的老人在享受社安保險
最近幾天傳得比較瘋的一條消息是,美國有很多 150 歲的人還在拿社保。馬斯克也拿這個事大說特說,在 X 上用推文說,在白宮橢圓辦公室裏對著記者的鏡頭說。隻是,又很快被打臉。PolitiFact 說,這是電腦編程造成的數據假象,並非真有其事。
用大白話說就是,向係統輸入數據時,如果在生日一欄不輸入任何數值,係統就會自動填充為 1875 年 5 月 20 日。那麽,這些人今年就是 150 歲!
這件事好笑嗎?似乎很好笑。但我笑不出來。作為一個參與了四次大型數據遷移的曾經的資深數據庫 IT 從業人員,我想說的是:不是專業人員,數據庫後台是不能進去的,一是有造成危害的可能,二是你看不懂,會誤讀數據。
任何一個數據庫都有自己的特殊性,有自己獨一無二的“故事”。要讀懂數據,不僅要有關於數據庫的 IT 常識,還必須具體了解這一個數據庫的“故事”,有時甚至需要了解其前世今生。像 DOGE 那樣去讀數據庫,他們讀出來的東西毫無價值。
為什麽非專業人員不該進數據庫後台
數據庫後台隻是給數據庫 IT 專業人員用的。任何非專業人員需要看數據,都是通過應用程序,就是我們平時說的 app,或者請專業人員提供報告。從專業角度來說,有千千萬萬個理由不允許非專業人員進入後台,這裏隻從常識角度說幾點。
第一,你讀不懂後台數據。從 app 上看見的數據是經過一定條件的組合與過濾的。這個我後麵會展開說。
第二,app 裏麵的內置規則後台未必有。比如,某個名單的輸入規定生日不能空缺,輸入空缺數據 app 會不接受。但後台如果沒有做同樣的設置,就有可能接受這樣的數據,於是就產生了“壞”數據,隱患無窮,嚴重的話可能會使係統崩潰。也有自己的係統不崩潰,但數據打包出售後,把買家係統搞崩潰的。
第三,app 裏麵往往都是處理單筆數據,而數據庫後台卻可以“全體”數據一起處理。如果有後台刪除的權限,不小心就把數據都刪光了。
為什麽非專業人員會看不懂後台數據?
回答很簡單,數據庫的後台本來就不是給非專業人員看的。其實這就好像程序隻是給程序員看的一樣。問題是,一般人都看不懂程序,所以不會去看。而數據庫的後台似乎像一個個 Excel 表格,讓人產生可以“看”的感覺,其實不然。數據庫後台的表格與 Excel 表格武完全不是一回事,你要當作 Excel 表格來讀,大錯特錯。
舉個例子,一個公司的員工表,其中有一欄是“是否在職”,裏麵分別有 0,1,2,3,4 等近十個不同數值。首先,你不能簡單地認為表格裏所有人都是在職員工。其次,你不能簡單地認為 0 代表離職,1 代表還在職。很可能不同數值分別代表了退休,離開該公司後又回來重新入職,在休產假,或者休長病假等等。如果沒有係統說明書,這些都需要從知情者那裏了解。
這還是欄目名字有直觀意思的。有的時候你根本不可能從名稱上猜出真正的意思。有時是名稱本身看不出意思,更多時候是,一個欄目的功能已經“進化”,超出了原來名稱的意義。
記得 2020 年大選時,網上盛傳某個州選民數據庫裏很多選民生日是 1800 年 1 月 1 日或 1900 年 1 月 1 日。於是有人說,這還了得,200 多歲的人還在投票!
說實話,我當時一看就明白,這一定是一個派特別用途的特定數值。果然,後來聽見 CNN 電台裏解釋說這是個占位符(placeholder),說是用這個日子代表已經投過票的人。當時我也對人說,我猜是個特定值。但馬上有人說,從來沒見過設計數據庫時,生日欄不輸入生日信息,卻派這樣的用途。不可能!
我隻能說,這樣說話的人不懂得數據庫前台與後台的區別。這種實踐在數據庫應用裏非常普遍。你沒聽說過是因為你隻看得見前台,而做後台的人不需要告訴你這些“肮髒”的東西。
沒有人會在設計數據庫的時候就決定把生日欄派這個用場。這樣的“設計”都是慢慢演變出來的。任何企業或機構,業務範圍或運作方式隨時會發生變化,於是對數據庫就會有新的要求。一個數據庫投入應用後,結構不能隨便改。即便現在數據庫已經越來越機動靈活了,改變的空間也有限,這就必須在現有條件下發揮創造性來滿足業務要求。
我不知道上麵例子的真實情況是怎樣的,但我可以從專業角度猜測。下麵就是幾種數據庫應用中經常發生的隻有在後台才看得見的“不尋常”現象(其中包括但不限於針對上麵例子的情況)。
1)數據庫後台有不止一個生日欄,分布在不同的表格裏。
這就有了機動性,可以保留一個生日欄作為真正的生日,其他派別的用途。上麵例子就很可能是這種情況,凡是已經投過票的,就在這個多餘的生日欄輸入特定的日子,如果這個選民再次來投票,係統就會拒絕。
別問我為什麽會有一個以上生日欄。這個世界稀奇古怪的事情很多,包括數據庫的設計或數據庫裏的數據。大概率是從不同地方數據遷移(data migration)過來匯總的結果,為了某種原因——比如同一個人不同來源的數據給出不同的生日——不得不給兩個、三個生日欄,把不同來源的生日存在不同地方,日後慢慢清理,最後全部輸入一個地方。
2)有一種可能,以前對搬離本州或故世的選民,都是采用刪除的做法。後來業務要求變了,需要保留記錄,隻是將這些人標為不能投票。
為了滿足新的業務要求,做後台設計的人決定用生日欄來做標記,凡是搬離的選民,就把生日改為 1800 年 1 月 1 日;凡是去世的,就輸入 1800 年 1 月 2 日;凡是犯罪被剝奪投票權的,生日一律是 1800 年 1 月 3 日......關鍵是選擇一個“不可能”的日子,這樣就不會與真實的日子混淆。
這裏就再現了我前麵說的非專業人員看不懂後台數據的情況。要從後台調出今年的合格選民,你必須知道選擇條件,必須排除那些生日是特殊日子的人。不知道的人直接去後台看數據,就以為自己發現了驚人的秘密。事實上,那些選民是不會獲得投票資格的。如果是從 app 裏看,你根本不會看見不合格選民,因為被係統過濾掉了。在 app 上,可能隻有有特別權限的人才能看見不合格選民。
3)也有可能,數據庫原先的設計是,投票記錄表格隻記錄最近一次選舉的投票。係統也不保留曆史投票記錄,每次選舉就抹去以前的記錄,重新開始。但是,後來又要求保留所有投票記錄。於是,名稱為“最近一次選舉投票記錄”的那個表格裏,一個選民會有很多記錄。讓事情更糟糕的是,那個表格沒有投票日這一欄,也沒有其他可以用作類似用途的內容,這樣的話,要調出最近一次投票記錄就必須通過與其他表格中的記錄相連,甚至可能需要利用係統內在的“時間戳”(timestamp)才能調出正確的內容。當限製條件在另外的表格裏時,僅僅看一個表格,就不可能知道這一筆記錄是不是“有效”。至於需要利用係統時間戳的,這是“不可見”的東西,外行在後台絕對看不出名堂,相反還會“發現”,居然有那麽多人在一次選舉中多次投票!
數據庫是個特別的東西
數據庫有其特殊性,也有自己特殊的難度,特別是做係統的改朝換代。我做過好幾個大型數據遷移項目,深知把數據從舊係統遷移到一個結構完全不同的新係統是一個非常挑戰的工作。稍有不慎就會犯毀滅性的錯誤。
以顯示員工名單為例,如果一個應用程序忘記考慮“在職與否”那個欄目,把不該包括的名單都顯示了出來,隻需要在程序裏加一個條件就改正了。這樣的錯誤,除了麵子不好看,不會有大傷害。但如果是數據遷移把這一欄漏了,就再也沒辦法區分員工的在職狀態了。
當然,不會有人犯這樣低級的錯誤,我隻是舉例說明數據遷移很容易遺漏關鍵的數據信息。如果事後才發現,數據的修複極其挑戰,甚至會有不可能修複的情況。有的鏈接一旦失去就連不回去了。
說這麽多,一是為了說明數據庫任何“小”錯誤都可以有嚴重後果,二是想說,聯邦社保數據庫中的數據從 1935 年至今,一定是經曆過多次數據遷移,每次遷移都是一番脫胎換骨,再加上平時免不了的大小“補丁”,一定有很多“故事”,因而讀數據時會需要很多“竅門”。
總之一句話:數據庫不僅需要專業的人來維持,還需要專業的人來用。
DOGE 成員絕對不該被允許進入數據庫
二十多年前,這個行業的管理都還不那麽正規,我們做數據庫的人都有上生產環境服務器的權限(後來都被拿掉了,隻有專人才有)。平時需要做什麽,先在開發環境服務器上測試,沒有問題了就自己直接上生產環境服務器做。我每次上生產環境服務器都會緊張。我以為是自己菜,才會緊張,後來一位很“老”的同事告訴我,他每次上生產環境服務器手都會發抖,我才知道,並不隻是我。因為責任的確是太大了,而且後果嚴重。這也是為什麽會有那麽多人,不惜辭職也不肯給 DOGE 的人進入數據庫的權限。
我見過幾乎是最好的數據庫,但也見過讓人哭笑不得的數據庫。一個嚴肅的數據庫,設計合格的話,任何一個操作應該都可以還原,哪怕在後台操作也會留下完整的審核記錄,包括誰做了改動,什麽時候改的,改動之前和之後的內容分別是什麽等等。
我不知道聯邦政府的數據庫質量如何,但我一直記得,川普第一任時曾經搞過讓無證移民孩子與父母“骨肉分離”的事情。我非常吃驚的是,紐約時報記者說,當某個記錄從數據庫中被刪除後,就再也找不到孩子與父母之間的那個聯係了,結果後來有相當一部分孩子再也沒有能與父母團圓。由此可見,至少不是所有聯邦政府的數據庫都是高質量的。
我聽說馬斯克手下幾個毛孩子獲得進入後台的權限,真的有遭了電擊的感覺。那些人很可能是我們稱為碼農的人,自以為編程本事了得。而且碼農往往因為數據庫工程技術成分低,看不起數據庫的活。但正是這個看不起會要人命——不懂得數據庫的特殊性,還輕敵,最容易闖禍。
說實話,他們鬧了那麽多笑話一點也不奇怪。我隻希望,他們沒有對數據庫造成不可逆的傷害。
當然,還有一個需要擔心的因素是,他們會不會隨便泄露不該公開的信息。畢竟他們中的一個曾經有過這方麵的劣跡。
這還隻是說有沒有對數據庫造成技術上的傷害。至於他們滿天飛的謠言極壞的政治影響,都不知該從何說起了。不過,那也不是本文的話題。這裏我隻說一點:數據庫裏有個名字沒有任何意義。隻有查到具體人,而且證明真的拿了錢,才可以作為證據。
參考資料
https://www.fox5dc.com/news/elon-musk-claims-150-year-olds-social-security
https://www.politifact.com/article/2025/feb/17/are-150-year-old-americans-receiving-social-securi/
本文作者授權聯合發表於“美國華人雜談”和“信息正義”公眾號
十分理解幾十年的數據庫,有些奇怪的壞數據,或者單純隻是不同含義的數據。
那其它年齡段的幾百萬人是怎麽回事?比150歲的還多。