我爲什麼離開IBM?

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"strong"}],"text":"本文由Adam Storm發表在cockroachlabs.com,經原作者授權由InfoQ中文站翻譯並分享"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我是一個數據庫極客。或者更準確的說,是一個數據庫管理系統(DBMS)極客。我最喜歡數據庫的地方在於,儘管數據庫無處不在,且現代社會離開它將無法正常運轉,卻仍然很難得到恰當地構建。這其中的部分難點在於,數據庫很複雜,並且其架構借鑑了計算機科學幾乎所有的領域。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"然而,我對數據庫的熱愛並非一直如此強烈。還在上大學的時候,我不惜一切代價逃避數據庫的課程,並揣測數據庫領域沒有太多的新知識要學習(這很不正確),所有最困難的問題都已經被解決了。我的逃避很快就讓自己嚐到苦頭,因爲畢業後,IBM當地的DBMS開發團隊錄用了我,我決定加入他們。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"加入IBM——自主管理數據庫的早期"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"剛加入IBM時,我在一個自動計算(Autonomic Computing)團隊工作。該團隊的任務是通過自動化難以人工執行的任務或容易出錯的任務(例如物理數據庫設計、統計信息收集、內存管理),來使數據庫管理員的工作更輕鬆。具體點說,我被任命領導一個團隊,這個團隊的目標是自動調整DBMS的各種內存配置參數以優化性能。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“儘管這項工作令我精疲力盡(我不止一次在身旁的筆記本上睡着了),但能針對棘手問題提出創新性的解決方案還是很有意義的。最終我們的成果在產品中是默認啓用的,並且如今仍然得到成千上萬客戶的使用。”"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在我們剛開始自動化內存調優的工作時,當時現有的所有學術方法都存在一定限制,使它們無法在工業產品中實現。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例如,當時有幾種可用於調整緩衝區緩存的方法,但是其中很多都需要將查詢劃分爲多個類並指定響應時間目標。這些查詢劃分和目標指定常常像底層內存調優的那麼難。此外,儘管有關單個內存使用者調優(例如緩存、工作內存、鎖定內存等)有許多文章,但還沒有研究成果去探討如何統一所有的方法,來建立一種自動調優一組內存使用者的機制。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在調查中,我們還發現一些複雜的問題,這些問題使得在複雜的DBMS上進行內存調優變得困難。例如,DBMS中最大的查詢內存使用者之一是排序所需的內存。當查詢包含ORDER BY子句,並且沒有相應的索引可用時,系統必須對數據進行排序。在內存中執行排序是最高效的。但是,如果排序太大而無法全部存儲在內存中,大多數系統都可以通過將已排序的行寫入臨時表來將其“溢出”到磁盤。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"然後,臨時表在可能被寫入磁盤前(如果出現高速緩存不足以容納整個臨時表的情況,臨時表就會被寫入磁盤)由系統緩存(在回寫緩存中)。排序內存和緩存內存之間存在交互,這一事實使內存的調優變得困難。理想情況下,系統將優化排序內存的大小,以防止溢出(即使它們從未溢出到磁盤,這也是很昂貴的),但是添加額外的緩存內存會給人一種調優的錯覺,因爲它可以加快排序溢出的執行速度。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"第二個複雜問題是,大多數學術方法都假定調整單獨的參數不會互相影響。 實際上,情況遠非如此。例如,當減小回寫緩存的大小時,必須釋放存在於內存中的所有髒頁,並將它們寫入磁盤。因此,頻繁減少緩存大小帶來的結果是增加了I \/ O子系統的負擔。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,由於必須釋放連續的內存塊才能供其他內存使用者使用,因此將內存頁面寫入磁盤必須等待所有併發事務當前正在使用的頁面。 在實踐中,我們發現有必要對這些減少內存的成本進行建模,並採用控制理論方法來減少內存使用者大小的頻繁波動。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這些挑戰加在一起使該項目需要付出非常多的努力,因爲我還經驗不足,所以尤爲如此。 我不僅需要絞盡腦汁地思考DBMS中執行內存管理的複雜方式,同時還要學習控制理論、商業軟件開發,而且還要首次領導一個團隊。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我非常感激的是,我在IBM Research中有非常優秀的夥伴,有一名非常棒的經理和導師,以及一個非常寬容的團隊。儘管這項工作令我精疲力盡(我不止一次趴在筆記本上睡着了),但能夠針對棘手問題提出創新性的解決方案還是很有意義的。最終,我們的工作成果在產品中是默認啓用的,並且如今仍然有成千上萬的客戶在使用——這件事令我感到無比自豪。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"分佈式事務以及commodity hardware"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在交付了第一批自動計算功能後,我們的團隊被重新劃分成多個團隊,以幫助其他更緊迫的項目能順利進展。這次重組,我加入了一個新團隊,該團隊正在研究將大型計算機上非常成功的技術——Db2數據共享,引入commodity hardware的可行性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"1994年,當Db2 數據共享(以及大型計算機的Parallel Sysplex)問世時,它允許將通常僅限於單機使用的數據庫擴展到多臺計算機上。 這使它成爲分佈式關係數據庫的第一批代表之一。這極大地幫助了那些爲滿足工作量需求而努力擴展數據庫的客戶。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當Oracle如法炮製,在2001年將其應用到它們的Real Application Clusters(RAC)時,IBM開始面臨將競爭技術引入非大型機市場的壓力。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“我被任命領導事務管理團隊。 我加入了一個由事務管理專家組成的團隊。 儘管這可能令人望而生畏,但實際上這使我不必圍繞技術進行日常決策,而是讓我專注於領導(這恰好是團隊需要)。 在這裏,我提高了軟件開發項目管理的技能……”"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"然而,將大型機技術引入到commodity hardware的問題在於,大型機相對於基於UNIX的服務器具有某些技術優勢。例如,大型機既有高速互連,又有基於硬件的時鐘同步,這兩者都使多個服務器上的分佈數據庫更加可行。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"對我們來說,幸運的是,當我們在2006年開始這項工作時,Infiniband連接得到了廣泛採用,並且與遠程直接內存訪問(RDMA)結合使用,讓集羣中的節點之間的交互延遲變得極低。RDMA與Lamport時鐘的內部實現相結合,使我們能向現有的非大型機客戶提供大型機上已有的類似技術。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這個新職位是我第一次瞭解核心DBMS開發,也是我第一次瞭解ARIES之類的東西(幸運的是,我是從該論文的原作者那裏瞭解到的)。第一年是一個艱難的旅程,因爲有很多東西要學,但同時學習全新的東西也令人振奮,尤其是在深挖內存管理領域這麼長時間後。在團隊證明了原型(由於我還在學習,我對此只做出了很小的貢獻)後,我們便“一路綠燈”,將其構建到我們的產品中,該產品最終被稱爲Db2 pureScale。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"那時,我們需要瘋狂地擴張團隊,並且由於我學習了幾個月的技術細節,所以我被任命領導事務管理團隊。這與我在自動計算領域(在這個團隊中的每個人都是該領域的新手)的經歷截然不同,因爲我現在要加入一個由事務管理專家組成的團隊。儘管這可能令人望而生畏,但實際上這使我不必圍繞技術進行日常決策,而是讓我專注於領導(這恰好是團隊需要)。在這裏,我提高了軟件開發項目管理的技能,與此同時,我掌握了足夠多的技術細節,能夠做出重要貢獻,尤其是在項目的最後階段。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"在現有的關係型數據庫中構建列存儲"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"2009年,在交付了Db2 pureScale後,我開始朝一個完全不同的方向前進,但也與兩個老朋友在這個方向上”團聚“。我以前在自動計算部門時的經理(以及他的經理)在那時正在組建一個團隊,來探索將列存儲的最新研究納入我們產品的可能性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“這項任務中的困難正是吸引我的地方。並且它是一個完全未知的領域,這允許我既可以領導團隊,又可以設計技術解決方案。同時做這兩件事情並不總是那麼容易,並且項目管理的要求又時常讓我從我真正想做的事情(代碼)中分心。“"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"自從關係數據庫誕生,行需要連續存儲在磁盤上以最大化性能就是流行的思想。對於事務性工作負載而言,這是有意義的,因爲在這種情況下,一次插入一個行並進行更新(因此,將它們放在磁盤上的單個位置是最有效的),並且通常可以通過索引來加速查詢。但是,對於分析型數據庫,行通常會作爲批處理作業的一部分進行修改,而且,通常都是隻指定少數幾列去查詢非常大的表,在沒有索引的情況下掃描表的大部分內容。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"因此,將連續行的列值存儲在一起會更有效,因爲查詢可以只讀取查詢請求的列值,並節省所有未讀列所需的I\/O。列存儲也很適合矢量處理,因爲列值被連續存儲在內存中,能進行批處理,而不是單獨處理。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"另外,列存儲還有助於數據壓縮,因爲給定的數據頁(甚至磁盤上的整個文件)將包含一個列,其值通常是從有限的一組可能性中得出的(例如州、地區代碼、性別或年齡)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在剛剛進入列存儲領域時,我被問到是否要與IBM Research的一些人員一起加入一個團隊,來看看我們是否可以快速構建一個原型以集成到Db2中。當我們與該原型的硬件部門合作時,我被要求承擔將SIMD指令添加到我們新的矢量化處理引擎中的工作。這是我以前從未做過的工作,並且它深入到了機器指令水平,這既令人興奮又令人生畏。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當我們成功完成原型並開始將其構建到產品中時,我遊說並開始領導一個團隊,該團隊將構建列存儲的插入\/更新\/刪除功能。我們構建的初始原型僅支持插入操作(或許更誠實地說,僅支持批量加載),並且由於行被拆分爲磁盤上的多個文件,確保我們能進行細粒度的數據修改絕非易事。 而且,我們被要求與現有的行存儲的插入性能相匹配,至少在大批量插入和更新時,性能不輸現有的行存儲。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這項任務中的困難正是吸引我的地方。並且,它是一個完全未知的領域,這允許我既可以領導團隊,又能設計技術解決方案。同時做這兩件事情並不總是那麼容易,並且項目管理的要求又時常讓我從我真正想做的事情(也就是代碼)中分心。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"不論如何,讓客戶滿意是我的最終目標,如果這意味着花在技術故障排除的時間比實際寫代碼的時間更多,我也很樂意。同時,我也很幸運,我所在的團隊非常強大,也非常均衡。他們很高興與彼此在一起工作,其中一些人至今仍然是關係要好的朋友。2013年,我們交付了我們的解決方案(名爲BLU Acceleration),並發表了有關其創新設計的研究論文。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"關於混合事務分析處理的實驗"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在我們交付BLU Acceleration之後,負責其前期工作的研究人員決定將注意力轉向混合事務\/分析處理(Hybrid Transaction\/Analytical Processing,即HTAP)。數據庫工作負載大致分爲兩類:事務型和分析型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"HTAP的目標是通過使用單個數據拷貝,構建針對事務處理和分析處理都進行優化的系統。 這並不是一件容易的事,因爲如前所述,事務處理得益於將行一起存儲在磁盤上,而使用列式組織存儲通常能加速分析處理。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我作爲獨立的開發人員開始與IBM Research在HTAP方面進行合作。這項工作很有趣,並且我們取得了良好進展,但是最終,該公司當時對繼續發展HTAP並不感興趣(至少,對我們曾經追求的深度集成的方式不感興趣)。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在任何情況下,都要講究天時地利。雖然我當時尚不清楚深度集成的HTAP是否對我而言算是地利(它當然有其優勢,但仍然很難保證合適),但我們肯定未佔天時。當時,對數據庫領域的最大影響是向雲的轉移,而僅HTAP並不能直接解決這種向雲轉移的趨勢帶來的挑戰。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"最終,儘管我們正在做的工作很有趣,並且很可能會取得成果,但這並不是組織當時最緊迫的挑戰,這正是它失敗的原因。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"爲物聯網工作負載構建新的數據庫管理系統"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當HTAP的工作停止時,我提出了一個從頭開始構建雲原生分析數據庫的建議。與事務型數據庫一樣,依據傳統,分析型數據庫被設計爲在一臺機器上運行。但是,在80年代和90年代,數據庫設計人員意識到,將長時間運行的分析查詢拆分在多臺計算機上並行運行,可以更快地處理它們。這種“拆分”涉及對數據庫進行分區,並使每臺計算機擁有數據庫的一部分。機器完全不會共享任何數據(每臺機器將擁有數據庫的不同部分),這使得此種方法被稱爲無共享架構。在接下來的幾十年中,無共享架構主導了分析型數據庫的發展。然後是向雲的遷移,或更具體地說,是向雲原生存儲的遷移。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"blockquote","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"“這項工作也很振奮人心,因爲我們不受改造現有系統的困難的束縛,而可以專注於創新。”"}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在雲中,存儲大型數據集(並且分析型數據庫通常包含非常大的數據集)的最具成本效益的方法是憑藉對象存儲(比如AWS S3、Azure Blob存儲等)。這不僅使存儲成本大大降低,而且還將數據存儲在集羣中所有節點可見的存儲中,從而開闢了大量新的可能性。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"例如,使用共享存儲上的數據,分區所有權幾乎可以立即被重新分配給節點,而不必在磁盤上物理移動數據(傳統的無共享部署就是這種情況)。即時分區重新分配不僅允許羣集按每個查詢進行擴展和收縮,而且還能大大簡化高可用性,因爲故障節點擁有的分區可以輕鬆地重新分配給尚存的節點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當時,我意識到雲存儲之上的無共享架構是未來的潮流,於是我建議我們構建這樣的系統,並首先關注物聯網(IoT)工作負載。爲此,組織要求我在數據庫部門之外組建一個團隊,以便我們可以不受限制地進行自由創新。這不僅令人耳目一新,而且充滿挑戰,因爲多年來我們認爲當時存在的所有基礎架構都是理所當然的,而今卻需要重新構建。幸運的是,這樣我們就能夠進行創新了,我們在很大程度上依靠了Docker、Jenkins和Kubernetes等較新的技術,這些技術當時在數據庫部門還未使用過。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這項工作也很振奮人心,因爲我們不受改造現有系統的困難的束縛,而可以專注於創新。但是不幸的是,團隊性質要求我將大部分精力花在保持團隊氛圍上,而不是花在技術決策上。之所以如此,是因爲我擁有一支強大的技術團隊,我對此深信不疑。儘管通往成功的道路並非一帆風順,但我們最終於2017年交付了針對IoT進行優化的雲原生數據庫(名爲Db2 Event Store),並於近期發表了有關其初始設計和演進的研究論文。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"離開技術工作——我擔任執行官的時間"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了表示對我在Db2 Event Store上的工作的認可,我升職了。在新的職位上,我不再領導專門的技術團隊,而是與執行團隊就我們的部門戰略進行了更緊密的合作。這包括與客戶更長的時間合作,對幾種大型且成功的產品進行架構監督,以及爲我們的未來進行規劃。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這項工作很有意義,我非常喜歡與其他高管(尤其是老闆)一起工作,但它最終也使我離開了我非常喜歡的深度技術工作。當有人詢問我是否考慮新的機會時,我就接受了,其中部分原因是我想念那種深度的技術工作。這最終導致我在今年早些時候離開IBM加入Cockroach Labs。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"您對剛進入數據庫行業的人有何建議?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"成爲領導者有許多地方讓人很開心,其中之一就是你可以對他人的職業產生影響。很幸運的是,多年來我指導了很多人,並且經常被問到在我們這一行業中如何取得成功,尤其是數據庫領域。如下是我對提問者的一些回答:"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"成爲一個全才"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"數據庫領域在其廣度和深度上都有着極大的技術挑戰,這一點很是令人振奮。因此,大家可能在數據庫領域研究得非常地廣或非常地深。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有些人漸漸地會在一個領域(例如查詢優化、開發人員接口或事務管理)越來越深入,並且公平地說,行業的發展和日益複雜的問題的解決需要人們在技術上非常深入。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"但是,我發現,DBMS開發人員在成就一番事業時,具有技術廣度很有好處。具體來說,這使你可以識別系統中存在的問題,並更加整體全面地解決這些問題。當有人特別問到這一點時,我通常建議人們在職業生涯的早期學的越多越好,數據庫的領域瞭解得越多越好。如果你採用這種方式,則可以不再受限於當前所關注的領域,發現之外的問題並提出解決方案,從而爲整個組織帶來更多價值。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"避免金錢陷阱"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"剛進入這個行業的人們會追求工資最高的工作,這種情況經常發生。我能理解這種誘惑。當你在職業早期階段時,有很多緊急的財務問題(例如買房、結婚、開始退休計劃),按工資的高低對工作排序似乎是種正確方法。然而,問題在於,在許多情況下,在職業的早期追求最大回報會對職業的後期產生不利影響。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當剛開始工作時,你應該試圖最大程度地增加學習的機會,即使這可能意味着薪水比較低。儘早成爲一個“拼命的“學習者,將會保證你在收入最高的40到50多歲還能表現出最理想最具影響力的狀態。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"總而言之,如果你剛剛開始自己的職業生涯,找到能使你爲公司做出最大貢獻的機會,向周圍的專家學習,在不同領域提升技能以成爲一個全才。"}]},{"type":"heading","attrs":{"align":null,"level":4},"content":[{"type":"text","text":"自己掌控運氣"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"任何事業成功的人(或者還包括事業不成功的人)都忽略提及運氣在多大程度上發揮了作用。做個好好先生能對你的事業有很大的幫助,但運氣的極大加持能將平庸的人和卓越的人區分開。人生的關鍵是在正確的時間處在正確的地點。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在很大程度上,運氣是無法改變的。對於所出生在的家庭,成長過程中使用的語言或者童年時的地緣政治局勢,你沒有任何決定權。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"話雖如此,隨着年齡的增長,你開始有能力影響自己的運氣,並且你應該利用這種能力。當我完成本科學位思考去哪裏攻讀研究生時,我有幾個可以考慮的選項。其中有一個是迄今爲止最賺錢的,但最後我決定去的是滑鐵盧大學,因爲我認爲這樣做可以使我在未來的事業中位於最佳處境。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"兩年後,當我從那裏被招募加入IBM時,一部分原因正是運氣(我在IBM招聘季的時候畢業了——這就是正確的時機),而且,IBM的數據庫團隊在當時僅從滑鐵盧大學招聘(這就是正確的地方)。如果我沒有去滑鐵盧大學,那我很可能永遠都不會到IBM工作。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"從那以後,我的好運就像雪球一般越滾越大。在IBM,我有大量的機會向一部分數據庫行業的創始人——構建System R的原始團隊的成員,以及他們的後繼者學習。他們所擁有的關於數據庫系統的知識,至今仍令我敬佩。毫無疑問,我能被招募進這樣一個強大的學習環境中是十分幸運的,但選擇滑鐵盧大學是我掌控的運氣,所有的一切均源自於此。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當決定在哪裏工作,成爲哪個團隊的一員或在工作之外做些什麼時,請記住,我們有能力影響自己的運氣,這能幫到你。儘管你無法總能掌控“正確的時間”,但你可能能夠預見到哪裏會是“正確的位置”。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"爲什麼我離開IBM,加入構建CockroachDB的團隊"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"當人們換工作的時候,尤其是在某家公司工作多年以後,背後的原因往往不止一個。在和朋友、家人和同事對這個改變進行過多次交流以後,對於爲什麼我對能加入Cockroach Labs如此激動,我總結了如下原因:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"很棒的技術:我確定你現在意識到了,我內心是一個極客。因此,如果我對我所開發的技術沒有信念,就很難在這樣的公司工作下去。幸運的是,在Cockroach Labs,這不是問題。CockroachDB是爲無限擴容而從頭開始設計的,具有在任何情況下運作的能力,以及強一致性事務的能力。隨着數據庫市場如此大規模地遷移到雲上,這就是當今世界所需要的數據庫架構,並且這種需求在未來只會越來越強烈。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"產品的成熟度:CockroachDB現在處於最佳狀態,類似於我加入IBM時的Db2。它有豐富的功能,並因其創新得到了老客戶的認可,但它仍然有許多難題需要解決。有機會解決其中的一些難題,是我每天上班的動力。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一個已經十分強大的團隊的擴張:Cockroach Labs建立了一個非常強大的團隊來開發CockroachDB。我在面試過程中以及加入團隊後遇到的每個人都非常熱情、友好並且有很強的技術實力。同時,我們需要極大地壯大我們的團隊,以實現我們所有的崇高目標。我很高興我能成爲團隊擴張的一部分,參與解決擴張過程中所有的新挑戰。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"🇨🇦 數據庫一路相北:如果在此我忽略了地理位置的因素,那我一定是“瘋了”。我是一個自豪的多倫多人,並且熱愛在多倫多生活和工作。我決定跳槽的關鍵原因之一,是Cockroach Labs最近在這裏設立了辦公室。這對這家公司而言也是一個重要的舉措。多年來,多倫多一直是數據庫開發的中心,多家大型數據庫供應商在這裏設立了分部,並且這裏還有一些加拿大最有才華的數據庫研究人員。多倫多的數據庫人才儲備非常充足,我們只會讓這些人才加入我們強大的團隊。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有時,只是到了該改變的時候:所有上述令人激動的原因並沒有直接解釋我爲什麼辭掉舊工作。我可以簡單地再寫一篇簡短的博文陳述各中緣由,但歸根結底,它可以被歸結爲想要改變,並有機會從不同的側面去看待這個蓬勃發展的行業。對我而言,如果僅僅從IBM管窺該行業之一角就退休,人生就太短暫了。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原文鏈接:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"https:\/\/www.cockroachlabs.com\/blog\/why-i-left-ibm"}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章