程序員最寶貴的東西是生命,生命屬于程序員只有一次。一個程序員的一生應該這樣度過:當她回首往事的時候,她不會因為搭建環境浪費時間而悔恨,也不會因為集群無法運行而羞恥。這樣,在她開發的時候,她能夠說:“我的整個生命和全部精力,都已經獻給了開發中最重要的事情——設計程序,實現程序和調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點被人打電話叫起來修數據庫嗎?認清自己的定位啊,數據庫工程師的技能當然很重要,但你是要成為數據工程師的人,技能樹應該點在合適的方向。”
編輯:hfy
-
工程師
+關注
關注
59文章
1584瀏覽量
68969 -
數據監控系統
+關注
關注
0文章
6瀏覽量
6242 -
網絡爬蟲
+關注
關注
1文章
52瀏覽量
8829 -
Redis
+關注
關注
0文章
381瀏覽量
11198
發布評論請先 登錄
相關推薦
長沙怎么這么難招硬件工程師呀






FPGA算法工程師、邏輯工程師、原型驗證工程師有什么區別?






評論