一、兩杯難喝的酒
你還記得第一次喝白酒的感覺嗎?
那股辛辣的液體劃過喉嚨,像一條火線灼燒食道。你的臉扭曲,眼眶發(fā)紅,胃里翻江倒海。你的身體在用最原始的方式告訴你:這不是食物,這是毒藥。
但旁邊的領(lǐng)導(dǎo)前輩笑瞇瞇地看著你,說:習(xí)慣就好了。
MySQL也是如此。當(dāng)你第一次認(rèn)真審視它,會發(fā)現(xiàn)這東西充滿了令人費(fèi)解的設(shè)計:
?默認(rèn)字符集是latin1而不是UTF-8,而當(dāng)你終于改成utf8,才發(fā)現(xiàn)那是個假的 —— 真正的UTF-8叫utf8mb4?TIMESTAMP只到2038年,千年蟲的幽靈從未離去。
? 。
?GROUP BY可以選擇非聚合列——SQL標(biāo)準(zhǔn)是什么?能吃嗎??沒有真正的布爾類型,BOOLEAN只是TINYINT(1)的別名?DDL不支持事務(wù),ALTER TABLE是懸在頭頂?shù)倪_(dá)摩克利斯之劍?主從延遲是永恒的痛,優(yōu)化器的智商經(jīng)常讓人懷疑人生
你的大腦在用最基本的邏輯告訴你:這不是設(shè)計,這是事故。
如果你從零開始學(xué)數(shù)據(jù)庫,PostgreSQL的設(shè)計會讓你覺得"理應(yīng)如此",而MySQL的設(shè)計會讓你不斷問"為什么要這樣?"
但旁邊的老員工們淡定地看著你,說:習(xí)慣就好了。
沒有為什么,習(xí)慣就好。
這和白酒的邏輯一模一樣。"習(xí)慣就好"這四個字,是所有規(guī)訓(xùn)的起點(diǎn)。
二、規(guī)訓(xùn)的形成
沒有人天生喜歡白酒。
有意思的是,白酒的酒桌統(tǒng)治地位并非"自古以來"。古人喝的是黃酒、米酒,"煮酒論英雄"煮的可不是二鍋頭。白酒酒桌文化真正的形成,是近幾十年的事——它沿著一條清晰的路徑擴(kuò)散:從特定的組織體系,到體制內(nèi),再到全社會。
這是一種自上而下的制度性傳播。當(dāng)一個強(qiáng)勢的組織體系把某種行為定義為"規(guī)矩",這個規(guī)矩就會隨著人員流動和利益關(guān)系,滲透到社會的每一個角落。不是因?yàn)榘拙坪煤龋且驗(yàn)?上面的人都這么喝"。模仿權(quán)威、服從規(guī)則,是人類的本能。
![]()
MySQL的流行走的是同一條路。
2000年代,互聯(lián)網(wǎng)創(chuàng)業(yè)的"權(quán)威體系"是硅谷和那些成功的大廠。它們用LAMP棧,于是LAMP成為標(biāo)配——不是因?yàn)檫@些技術(shù)最好,而是因?yàn)椋?strong>它免費(fèi)、它簡單、權(quán)威們都用它、所有人都用它。
當(dāng)BAT把MySQL定為"標(biāo)準(zhǔn)",這個標(biāo)準(zhǔn)就隨著人員流動和行業(yè)影響力,擴(kuò)散到了整個中國互聯(lián)網(wǎng)。后來的創(chuàng)業(yè)公司、中小企業(yè),自然而然地跟隨大廠的選擇——就像民企跟隨體制內(nèi)的酒桌規(guī)則一樣。
一代又一代程序員在"MySQL是互聯(lián)網(wǎng)標(biāo)配"的敘事中成長。他們沒有機(jī)會認(rèn)真比較過其他數(shù)據(jù)庫,就被灌輸了這個信念。質(zhì)疑MySQL,就像在酒桌上說"我不喝白酒"一樣,會收獲異樣的目光:你是不是有什么問題?
規(guī)訓(xùn)從來不是自然形成的。它是被權(quán)力結(jié)構(gòu)塑造,然后偽裝成"傳統(tǒng)"和"慣例"的。
三、服從測試
白酒的真正功能是什么?服從測試。
當(dāng)領(lǐng)導(dǎo)端起酒杯看著你,他測試的不是你的酒量。他測試的是:你愿意為了這段關(guān)系,承受多少不適?
喝下那杯辛辣的液體,你的身體在反抗,但你的意志壓制了它。你用行動證明了:為了這個組織、這個位置、這段關(guān)系,我愿意傷害自己。
這是最原始的忠誠度測試。不需要語言,不需要承諾,一杯酒就夠了。
MySQL也是同樣的測試。
當(dāng)一個技術(shù)團(tuán)隊(duì)選擇數(shù)據(jù)庫,表面上是在評估性能、功能、生態(tài)。實(shí)際上,在很多組織里,這是一個政治決定:
?選MySQL,意味著你服從行業(yè)慣例?選MySQL,意味著你不會挑戰(zhàn)現(xiàn)狀?選MySQL,意味著你愿意和大家一起踩坑,而不是獨(dú)自承擔(dān)"非主流"的風(fēng)險
在很多公司,提議使用PostgreSQL需要勇氣。你得寫詳細(xì)的調(diào)研報告,說服每一個利益相關(guān)者,為未來可能出現(xiàn)的任何問題負(fù)責(zé)。而選擇MySQL?什么都不用說。"行業(yè)標(biāo)準(zhǔn)"四個字就是免死金牌。
選擇MySQL不需要理由。選擇其他的,需要解釋。
這就是規(guī)訓(xùn)的力量:它把服從變成了默認(rèn)選項(xiàng),把思考變成了需要額外努力的事。
四、一個親歷者的故事
我畢業(yè)去了阿里,那是 Java 和 MySQL 統(tǒng)治的世界。
天知道要克服多大的阻力,才能在自己負(fù)責(zé)的項(xiàng)目里使用PostgreSQL和Golang——要寫詳細(xì)的技術(shù)調(diào)研論證,要和各種利益相關(guān)方解釋"為什么不用MySQL",沒有人替你運(yùn)維,你要自己當(dāng)DBA,要承諾出了問題自己負(fù)責(zé)。每一步都是逆流而上。
后來我被擠出那個項(xiàng)目。接手的同事做的第一件事,就是開開心心地?fù)Q回了Java和MySQL。
不是因?yàn)橛龅搅耸裁醇夹g(shù)問題,不是因?yàn)镻ostgreSQL不能勝任,只是因?yàn)椤?strong>換回MySQL,他就不用解釋了。不用向別人證明這個選擇是對的,不用為"非主流"的技術(shù)棧承擔(dān)隱形責(zé)任,不用在每次出問題時面對"早說了用MySQL就沒這事"的目光。
換回MySQL,他就回到了安全區(qū)。
我不服。我從阿里跳槽去了探探,去了蘋果。因?yàn)樗麄兌加梦艺J(rèn)可的技術(shù)棧——PostgreSQL、Go,我不想再委屈自己了。有人選擇適應(yīng)系統(tǒng),有人選擇尋找適合自己的系統(tǒng)。 這是兩種活法,我不評判別人,但我知道自己要什么。
五、吐真劑
白酒還有另一個功能:酒后吐真言。
酒精麻痹前額葉皮層,降低自控力。平時藏在社交面具后面的真實(shí)想法,在酒精作用下脫口而出。所以酒桌是觀察人的好地方——你想知道一個人真正的樣子,灌醉他就行。
MySQL也是吐真劑,只不過它暴露的是技術(shù)能力和思維方式。
和一個工程師聊數(shù)據(jù)庫選型,他的反應(yīng)會告訴你很多:
"MySQL夠用了" —— 他可能從來沒體驗(yàn)過什么叫"好用"。當(dāng)你習(xí)慣了糟糕,平庸就變成了足夠。
"大家都用MySQL" —— 他做決定的依據(jù)是從眾,不是分析。這樣的人在其他事情上大概也是如此。
"PostgreSQL學(xué)習(xí)曲線太陡了" —— 他可能花了三年時間學(xué)習(xí)MySQL的各種坑和workaround,卻不愿意花三個月學(xué)習(xí)一個設(shè)計更好的系統(tǒng)。
"我們團(tuán)隊(duì)沒人會" —— 他在告訴你,這個團(tuán)隊(duì)的技術(shù)投資方向出了問題。
"換數(shù)據(jù)庫風(fēng)險太大" —— 他可能是對的。但這句話的潛臺詞是:我們已經(jīng)被MySQL綁架了。
我見過太多這種模式:有人對PostgreSQL的每一個特性都要挑刺——"這個功能MySQL也有啊"、"這個性能測試不夠全面"、"這個場景用PostgreSQL不一定更好"——卻對MySQL的根本性設(shè)計問題視而不見。
他們不是在做技術(shù)評估。他們是在保護(hù)自己的認(rèn)知舒適區(qū)。
承認(rèn)MySQL有問題,就意味著承認(rèn)自己過去的選擇可能是錯的,承認(rèn)自己花了多年時間精通的東西可能不是最好的。這種認(rèn)知失調(diào)太痛苦了,所以他們選擇防御。
這是人性。我理解。但理解不等于認(rèn)同。
六、潮水的方向
好消息是,規(guī)訓(xùn)正在瓦解。
白酒那邊: 年輕人越來越不買賬了。"我不喝酒"不再是社交自殺,而是被尊重的個人選擇。那些堅持"不喝不給面子"的酒桌,正在被新一代人拋棄。
MySQL這邊,潮水也在轉(zhuǎn)向:
?云原生時代:AWS、Google、Azure都把PostgreSQL作為首推,用真金白銀告訴你未來在哪里?AI時代:pgvector讓PostgreSQL成為向量數(shù)據(jù)庫的首選,而MySQL還在原地踏步?合規(guī)時代:PostgreSQL是純粹的BSD許可證,MySQL是Oracle手里的GPL,企業(yè)法務(wù)更喜歡哪個不言自明?生態(tài)繁榮:打開GitHub看看新項(xiàng)目用什么數(shù)據(jù)庫,PostgreSQL生態(tài)的活力肉眼可見
,都用無可辯駁的數(shù)字證明:PostgreSQL是過去十年增長最快的數(shù)據(jù)庫。 它已經(jīng)成為新一代創(chuàng)業(yè)公司和AI項(xiàng)目的標(biāo)配,替代了MySQL的位置,成為了那個"默認(rèn)的數(shù)據(jù)庫"。
越來越多的團(tuán)隊(duì)開始問:"我們?yōu)槭裁捶且肕ySQL?"
這就像年輕人在酒桌上說"我不喝白酒"一樣,是規(guī)訓(xùn)瓦解的開始。
七、選擇的勇氣
MySQL不是一個差勁到?jīng)]法用的數(shù)據(jù)庫。它確實(shí)運(yùn)行著無數(shù)系統(tǒng),服務(wù)著無數(shù)用戶。在某些場景下,它確實(shí)夠了。
但 “合適的選擇” 和 “默認(rèn)的選擇” 是兩回事。前者是思考的結(jié)果,后者是規(guī)訓(xùn)的產(chǎn)物。
當(dāng)你下一次面臨技術(shù)選型,當(dāng)有人說"我們用MySQL吧",我希望你能停下來問一句:為什么?
不是要抬杠,不是要顯得特立獨(dú)行。只是:這個決定,值得被認(rèn)真思考一下。
你花了多少時間學(xué)習(xí)MySQL的奇技淫巧,繞過它的設(shè)計缺陷?如果把同樣的時間投入到一個設(shè)計更好的系統(tǒng),你會走多遠(yuǎn)?
你踩過的那些坑——字符集問題、DDL鎖表、主從延遲、優(yōu)化器抽風(fēng)——有多少是數(shù)據(jù)庫本身該解決的問題,卻變成了你的問題?
你習(xí)慣的那些"最佳實(shí)踐"——把子查詢改成JOIN、用中間表代替CTE、用各種外部工具做本該是數(shù)據(jù)庫功能的事——有多少其實(shí)是在為糟糕的設(shè)計打補(bǔ)丁?
PostgreSQL不是完美的,沒有什么是完美的。但它代表了一種不同的可能性:數(shù)據(jù)庫可以被設(shè)計得讓你感到舒適,而不是讓你不斷適應(yīng)它的怪癖。
選擇 PostgreSQL 不是信仰問題。選擇任何技術(shù)都不應(yīng)該是信仰問題。
但在中國,選擇它需要一點(diǎn)勇氣——打破慣性的勇氣,獨(dú)立思考的勇氣,對自己的決定負(fù)責(zé)的勇氣。這種勇氣,和在酒桌上說"我不喝白酒"的勇氣,本質(zhì)上是同一種東西:
拒絕被規(guī)訓(xùn),堅持做判斷。
數(shù)據(jù)庫老司機(jī)
點(diǎn)一個關(guān)注 ??,精彩不迷路
對 PostgreSQL, Pigsty,下云 感興趣的朋友
歡迎加入 PGSQL x Pigsty 交流群(搜pigsty-cc)
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
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.