F1賽車大概是所有賽車運(yùn)動里最復(fù)雜、數(shù)據(jù)最密集的物種。每輛車都在實(shí)時(shí)回傳海量遙測數(shù)據(jù),賽道上的傳感器也在比賽周末不停采集。天氣、輪胎溫度、彎心出彎速度……凡是能測的,賽事工程師都會一周接一周地做分析。數(shù)據(jù),是這項(xiàng)運(yùn)動往前沖的核心推力之一。
偏偏我就是個(gè)喜歡翻數(shù)據(jù)的人,最近正好又在學(xué)圖數(shù)據(jù)庫和Neo4j。一個(gè)念頭忽然冒出來:既然有好萊塢演員版本的“凱文·貝肯六度分隔”,那F1車手之間能不能也連成一條鏈?和演員不同的是,F(xiàn)1從1950年開跑至今,車手總數(shù)要小得多,隊(duì)友關(guān)系卻足夠清晰——只要抓住“隊(duì)友”這個(gè)關(guān)鍵紐帶,說不定就能畫出最短路徑。
![]()
于是我問了一個(gè)很具體的題:維斯塔潘和八屆世界冠軍方吉奧,他們之間隔著多少位中間車手?方吉奧1958年就退役了,那時(shí)連維斯塔潘的父親都還沒出生。這種跨時(shí)代的連接,無論如何都要靠一串隊(duì)友關(guān)系才能接上。
我第一反應(yīng)是寫SQL,用遞歸CTE一層層展開隊(duì)友關(guān)聯(lián)表。因?yàn)楦静恢雷罱K要跳幾步,只能不斷重復(fù)自連接,重復(fù)路徑像雪崩一樣涌進(jìn)來,結(jié)果應(yīng)用直接鎖死。關(guān)系型數(shù)據(jù)庫處理這類不定深度的鏈?zhǔn)讲樵儯娌皇撬L項(xiàng)。
圖數(shù)據(jù)庫的思路恰好相反。在Neo4j里,關(guān)系本身就是一等公民,不用等到查詢時(shí)再臨時(shí)拼湊。車手是節(jié)點(diǎn),隊(duì)友關(guān)系是邊,沿途追蹤就是一次直接的圖遍歷。正是這個(gè)底層設(shè)計(jì),把剛才讓SQL卡殼的難題,變成了一句Cypher就能解決的一行查詢。
下面這篇文章,就帶著你從零開始,把1950年以來所有F1車手裝進(jìn)一張屬性圖里。不要求你有任何圖數(shù)據(jù)庫經(jīng)驗(yàn),結(jié)束之后,你會在本地跑通整張車手關(guān)系網(wǎng),親自輸出那條從維斯塔潘到方吉奧的最短路徑。
特別聲明:以上內(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.