資料工程師妹子養成手記——資料庫篇

青南發表於2019-02-23

這篇文章沒有程式碼,請放心閱讀。

程式設計師最寶貴的東西是生命,生命屬於程式設計師只有一次。一個程式設計師的一生應該這樣度過:當她回首往事的時候,她不會因為搭建環境浪費時間而悔恨,也不會因為叢集無法執行而羞恥。這樣,在她開發的時候,她能夠說:“我的整個生命和全部精力,都已經獻給了開發中最重要的事情——設計程式,實現程式和調Bug。” ——P醬。

P醬是公司新來的實習生妹子。聽說是一個文科生。文科生應該會去文案組或者策劃組吧。什麼?來資料組?讓我來帶?

於是我和P醬生活工作在了一起。

P醬你會些什麼?

“我叫P醬,在XX大學讀研二,愛好是拍照和被拍,大家可以在B站找到我跳舞的視訊,比如av170001。我的另外一個愛好是寫程式碼……”

當一個文科妹子說自己喜歡寫程式碼的時候,整個辦公室熱鬧了起來。

“P醬,聽說你喜歡寫程式碼,那你寫過什麼東西嗎?”新人介紹會議結束以後,我問P醬。

“一般都是各種分析程式,我們的專業要做很多調查報告,他們都是用Excel來計算的。我喜歡用Python來把這些統計過程自動化。後來也寫過自動寫詩的程式、鬼畜視訊生成器等等。”

“真不敢相信你是文科生。這麼說你的興趣是資料分析方向咯?”

“其實我對師父你做的爬蟲很有興趣。但是聽說會經常和網站發生對抗?女孩子還是不要打打殺殺的好~”

於是我讓P醬負責對爬蟲的原始資料進行清洗、整理並做簡單的分析。

一種船新的資料儲存方式

“P醬,爬蟲抓到的原始資料是存放在MongoDB裡面的,你的Python還不錯吧,你試一試用Python來讀寫MongoDB看看。”

“MongoDB是什麼呀?”

“是一個和MySQL不太一樣的資料庫。”

“MySQL我知道,MongoDB和MySQL有什麼不一樣呢?”

“我舉個例子,當你要插入資料的時候,你需要做的,就是‘插入’。咳咳,你不要臉紅,我是指你不需要寫SQL語句、不需要建表、不需要提前定義欄位。僅僅只需要一行程式碼就能夠實現了。我這裡給你寫了一篇文件,講到了MongoDB的增刪改查,你試一試。資料庫已經給你搭建好了,你直接連上去用吧”

半天以後。

“師父,我已經會使用MongoDB啦。”

“你讀爬蟲的原始資料,主要涉及到的就是查詢操作,為了鞏固插入、修改和刪除的操作,再給你一個小任務吧。試一試寫一個人員管理系統吧。”

既然有關係,就整整齊齊放在一起看吧

“P醬,你看起來很高興的樣子啊。”

“因為我覺得MongoDB比起MySQL太簡單了啊~”

“你確定?那我看看你怎麼對整行資料去重的?”

“師父,我知道distinct關鍵字可以對一個欄位去重。但是整行資料我是讀出來用Python來去重的。”

“這個時候你就要用到MongoDB的聚合查詢了。文件已經給你寫好了,拿去看吧。”

“還有還有,這裡你把店鋪資訊和選單資訊放在了兩個集合裡面,我怎麼樣才能把他們聯表查詢出來呢?”

“聯表查詢是MySQL裡面的操作,在MongoDB裡面,沒有,只有集合,所以叫做聯集合查詢更恰當一些。這也是要用到聚合查詢,也在這個文件裡面了。”

再給你一個玩具吧。

“P醬,之前讓你做的爬蟲資料監控系統怎麼樣了?”

“功能已經做好了,但是有一個地方查詢起來特別慢。我已經加過索引了,但還是很慢。懷疑是同時聯了四個集合的資料造成的。”

“這邊的資料實際上每小時才更新一次,你沒有必要每次重新整理頁面都去查詢MongoDB的。我覺得是時候讓你用一下Redis做快取了。”

“Redis就是那個記憶體資料庫嗎?我知道我知道。”

“給你寫了一份文件,包含Redis裡面的各種資料型別和使用方式。你試一試把Redis和MongoDB結合起來看看能不能提高速度。”

你怎麼擅自加功能啊!

“P醬,你怎麼在爬蟲監控系統的網頁上加了一個廣播視窗?”

“呀,被師父發現了。因為我想到同一個爬蟲可能會被幾個人監控,所以就用Redis的釋出訂閱功能做出來了這個廣播的功能。一旦爬蟲狀態發生改變,所有人都能收到推送。”

“既然你這麼閒,那不如加上賬號登入功能,把許可權驗證也做上去?不同的人只能看到自己負責的爬蟲。順便你可以試一試用Redis實現……”

“實現布隆過濾器和Session管理是嗎?”

“你怎麼知道我要說什麼?”

“因為我早上看到你在文件上面更新了布隆過濾器和Session管理相關的內容啊~”

紅色的鎖?

“師父師父,你知道什麼是RedLock嗎?”

“你學得這麼快?都知道RedLock了?RedLock是Redis官方給出的分散式鎖的演算法。已經有很多程式語言實現它了。”

“原來RedLock只是一個演算法啊……”

為什麼我學的這麼快呢?

“師父師父,我覺得很奇怪啊,為什麼MongoDB和Redis我學得這麼快呢?難道是因為他們本來就簡單?還是因為我太聰明瞭?”

“為什麼你不說是因為你師父教的好呢?“

“因為這是事實啊~不用我說出來~”

“咳咳,實際上是因為兩個原因。一是你一直通過專案驅動來學習,先有需求,然後再去學習實現這個需求所要涉及到的技能。所以你知道你學的東西能用來幹什麼,自然就能學得快……”

“那第二個原因是什麼呢?”

“第二個原因,我先問你一個問題,你會搭建Redis叢集嗎?會搭建MongoDB叢集嗎?知道什麼叫做哨兵嗎?你知道如何優化MongoDB的啟動引數嗎?”

“這…………好像都不知道額…………”

“因為你的角色是資料工程師,不是資料庫工程師,所以資料庫搭建、底層優化這些內容我都給你跳過了。”

“這些聽起來都很重要啊,師父你會教我嗎?”

“你想經常值夜班嗎?想半夜3點被人打電話叫起來修資料庫嗎?認清自己的定位啊,資料庫工程師的技能當然很重要,但你是要成為資料工程師的人,技能樹應該點在合適的方向。”

後記

後來,P醬成了別人的女朋友。

資料工程師妹子養成手記——資料庫篇

幸好我還有左手和右手,於是我把我給P醬總結的文件編撰成了《左手MongoDB,右手Redis——從入門到商業實戰》這本書。本書現在已經在京東、亞馬遜、淘寶上架。

資料工程師妹子養成手記——資料庫篇

資料工程師妹子養成手記——資料庫篇

資料工程師妹子養成手記——資料庫篇

這本書的定位是MongoDB和Redis的應用,所以有意弱化了資料庫的搭建、維護和底層優化。所以本書可能不適合資料庫工程師。

希望本書能夠給那些一直想掌握MongoDB、Redis,但是又不知道從何處下手的讀者,提供一個學習的方向。

微信公眾號本文正在舉行留言送書活動。

資料工程師妹子養成手記——資料庫篇

相關文章