數據工程師妹子養成手記——數據庫篇

這篇文章沒有代碼,請放心閱讀。程序員

程序員最寶貴的東西是生命,生命屬於程序員只有一次。一個程序員的一輩子應該這樣度過:當她回首往事的時候,她不會由於搭建環境浪費時間而悔恨,也不會由於集羣沒法運行而羞恥。這樣,在她開發的時候,她可以說:「個人整個生命和所有精力,都已經獻給了開發中最重要的事情——設計程序,實現程序和調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,可是又不知道從何處下手的讀者,提供一個學習的方向。

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

相關文章
相關標籤/搜索