當(dāng)前位置:首頁(yè) > IT技術(shù) > 數(shù)據(jù)庫(kù) > 正文

數(shù)據(jù)工程師妹子養(yǎng)成手記——數(shù)據(jù)庫(kù)篇
2021-09-17 16:30:29

這篇文章沒(méi)有代碼,請(qǐng)放心閱讀。

程序員最寶貴的東西是生命,生命屬于程序員只有一次。一個(gè)程序員的一生應(yīng)該這樣度過(guò):當(dāng)她回首往事的時(shí)候,她不會(huì)因?yàn)榇罱ōh(huán)境浪費(fèi)時(shí)間而悔恨,也不會(huì)因?yàn)榧簾o(wú)法運(yùn)行而羞恥。這樣,在她開(kāi)發(fā)的時(shí)候,她能夠說(shuō):“我的整個(gè)生命和全部精力,都已經(jīng)獻(xiàn)給了開(kāi)發(fā)中最重要的事情——設(shè)計(jì)程序,實(shí)現(xiàn)程序和調(diào)Bug?!?——P醬。

P醬是公司新來(lái)的實(shí)習(xí)生妹子。聽(tīng)說(shuō)是一個(gè)文科生。文科生應(yīng)該會(huì)去文案組或者策劃組吧。什么?來(lái)數(shù)據(jù)組?讓我來(lái)帶?

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

P醬你會(huì)些什么?

“我叫P醬,在XX大學(xué)讀研二,愛(ài)好是拍照和被拍,大家可以在B站找到我跳舞的視頻,比如av170001。我的另外一個(gè)愛(ài)好是寫(xiě)代碼……”

當(dāng)一個(gè)文科妹子說(shuō)自己喜歡寫(xiě)代碼的時(shí)候,整個(gè)辦公室熱鬧了起來(lái)。

“P醬,聽(tīng)說(shuō)你喜歡寫(xiě)代碼,那你寫(xiě)過(guò)什么東西嗎?”新人介紹會(huì)議結(jié)束以后,我問(wèn)P醬。

“一般都是各種分析程序,我們的專(zhuān)業(yè)要做很多調(diào)查報(bào)告,他們都是用Excel來(lái)計(jì)算的。我喜歡用Python來(lái)把這些統(tǒng)計(jì)過(guò)程自動(dòng)化。后來(lái)也寫(xiě)過(guò)自動(dòng)寫(xiě)詩(shī)的程序、鬼畜視頻生成器等等?!?/p>

“真不敢相信你是文科生。這么說(shuō)你的興趣是數(shù)據(jù)分析方向咯?”

“其實(shí)我對(duì)師父你做的爬蟲(chóng)很有興趣。但是聽(tīng)說(shuō)會(huì)經(jīng)常和網(wǎng)站發(fā)生對(duì)抗?女孩子還是不要打打殺殺的好~”

于是我讓P醬負(fù)責(zé)對(duì)爬蟲(chóng)的原始數(shù)據(jù)進(jìn)行清洗、整理并做簡(jiǎn)單的分析。

一種船新的數(shù)據(jù)儲(chǔ)存方式

“P醬,爬蟲(chóng)抓到的原始數(shù)據(jù)是存放在MongoDB里面的,你的Python還不錯(cuò)吧,你試一試用Python來(lái)讀寫(xiě)MongoDB看看?!?/p>

“MongoDB是什么呀?”

“是一個(gè)和MySQL不太一樣的數(shù)據(jù)庫(kù)?!?/p>

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

“我舉個(gè)例子,當(dāng)你要插入數(shù)據(jù)的時(shí)候,你需要做的,就是‘插入’??瓤龋悴灰樇t,我是指你不需要寫(xiě)SQL語(yǔ)句、不需要建表、不需要提前定義字段。僅僅只需要一行代碼就能夠?qū)崿F(xiàn)了。我這里給你寫(xiě)了一篇文檔,講到了MongoDB的增刪改查,你試一試。數(shù)據(jù)庫(kù)已經(jīng)給你搭建好了,你直接連上去用吧”

半天以后。

“師父,我已經(jīng)會(huì)使用MongoDB啦。”

“你讀爬蟲(chóng)的原始數(shù)據(jù),主要涉及到的就是查詢(xún)操作,為了鞏固插入、修改和刪除的操作,再給你一個(gè)小任務(wù)吧。試一試寫(xiě)一個(gè)人員管理系統(tǒng)吧?!?/p>

既然有關(guān)系,就整整齊齊放在一起看吧

“P醬,你看起來(lái)很高興的樣子啊?!?/p>

“因?yàn)槲矣X(jué)得MongoDB比起MySQL太簡(jiǎn)單了啊~”

“你確定?那我看看你怎么對(duì)整行數(shù)據(jù)去重的?”

“師父,我知道distinct關(guān)鍵字可以對(duì)一個(gè)字段去重。但是整行數(shù)據(jù)我是讀出來(lái)用Python來(lái)去重的?!?/p>

“這個(gè)時(shí)候你就要用到MongoDB的聚合查詢(xún)了。文檔已經(jīng)給你寫(xiě)好了,拿去看吧?!?/p>

“還有還有,這里你把店鋪信息和菜單信息放在了兩個(gè)集合里面,我怎么樣才能把他們聯(lián)表查詢(xún)出來(lái)呢?”

“聯(lián)表查詢(xún)是MySQL里面的操作,在MongoDB里面,沒(méi)有 ,只有 集合,所以叫做 聯(lián)集合查詢(xún)更恰當(dāng)一些。這也是要用到聚合查詢(xún),也在這個(gè)文檔里面了。”

再給你一個(gè)玩具吧。

“P醬,之前讓你做的爬蟲(chóng)數(shù)據(jù)監(jiān)控系統(tǒng)怎么樣了?”

“功能已經(jīng)做好了,但是有一個(gè)地方查詢(xún)起來(lái)特別慢。我已經(jīng)加過(guò)索引了,但還是很慢。懷疑是同時(shí)聯(lián)了四個(gè)集合的數(shù)據(jù)造成的?!?/p>

“這邊的數(shù)據(jù)實(shí)際上每小時(shí)才更新一次,你沒(méi)有必要每次刷新頁(yè)面都去查詢(xún)MongoDB的。我覺(jué)得是時(shí)候讓你用一下Redis做緩存了?!?/p>

“Redis就是那個(gè)內(nèi)存數(shù)據(jù)庫(kù)嗎?我知道我知道。”

“給你寫(xiě)了一份文檔,包含Redis里面的各種數(shù)據(jù)類(lèi)型和使用方式。你試一試把Redis和MongoDB結(jié)合起來(lái)看看能不能提高速度?!?/p>

你怎么擅自加功能?。?/h2>

“P醬,你怎么在爬蟲(chóng)監(jiān)控系統(tǒng)的網(wǎng)頁(yè)上加了一個(gè)廣播窗口?”

“呀,被師父發(fā)現(xiàn)了。因?yàn)槲蚁氲酵粋€(gè)爬蟲(chóng)可能會(huì)被幾個(gè)人監(jiān)控,所以就用Redis的發(fā)布訂閱功能做出來(lái)了這個(gè)廣播的功能。一旦爬蟲(chóng)狀態(tài)發(fā)生改變,所有人都能收到推送?!?/p>

“既然你這么閑,那不如加上賬號(hào)登錄功能,把權(quán)限驗(yàn)證也做上去?不同的人只能看到自己負(fù)責(zé)的爬蟲(chóng)。順便你可以試一試用Redis實(shí)現(xiàn)……”

“實(shí)現(xiàn)布隆過(guò)濾器和Session管理是嗎?”

“你怎么知道我要說(shuō)什么?”

“因?yàn)槲以缟峡吹侥阍谖臋n上面更新了布隆過(guò)濾器和Session管理相關(guān)的內(nèi)容啊~”

紅色的鎖?

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

“你學(xué)得這么快?都知道RedLock了?RedLock是Redis官方給出的分布式鎖的算法。已經(jīng)有很多編程語(yǔ)言實(shí)現(xiàn)它了?!?/p>

“原來(lái)RedLock只是一個(gè)算法啊……”

為什么我學(xué)的這么快呢?

“師父師父,我覺(jué)得很奇怪啊,為什么MongoDB和Redis我學(xué)得這么快呢?難道是因?yàn)樗麄儽緛?lái)就簡(jiǎn)單?還是因?yàn)槲姨斆髁???/p>

“為什么你不說(shuō)是因?yàn)槟銕煾附痰暮媚兀俊?/p>

“因?yàn)檫@是事實(shí)啊~不用我說(shuō)出來(lái)~”

“咳咳,實(shí)際上是因?yàn)閮蓚€(gè)原因。一是你一直通過(guò)項(xiàng)目驅(qū)動(dòng)來(lái)學(xué)習(xí),先有需求,然后再去學(xué)習(xí)實(shí)現(xiàn)這個(gè)需求所要涉及到的技能。所以你知道你學(xué)的東西能用來(lái)干什么,自然就能學(xué)得快……”

“那第二個(gè)原因是什么呢?”

“第二個(gè)原因,我先問(wèn)你一個(gè)問(wèn)題,你會(huì)搭建Redis集群?jiǎn)???huì)搭建MongoDB集群?jiǎn)??知道什么叫做哨兵嗎?你知道如何?yōu)化MongoDB的啟動(dòng)參數(shù)嗎?”

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

“因?yàn)槟愕慕巧菙?shù)據(jù)工程師,不是數(shù)據(jù)庫(kù)工程師,所以數(shù)據(jù)庫(kù)搭建、底層優(yōu)化這些內(nèi)容我都給你跳過(guò)了?!?/p>

“這些聽(tīng)起來(lái)都很重要啊,師父你會(huì)教我嗎?”

“你想經(jīng)常值夜班嗎?想半夜3點(diǎn)被人打電話叫起來(lái)修數(shù)據(jù)庫(kù)嗎?認(rèn)清自己的定位啊,數(shù)據(jù)庫(kù)工程師的技能當(dāng)然很重要,但你是要成為數(shù)據(jù)工程師的人,技能樹(shù)應(yīng)該點(diǎn)在合適的方向?!?/p>

后記

后來(lái),P醬成了別人的女朋友。

數(shù)據(jù)工程師妹子養(yǎng)成手記——數(shù)據(jù)庫(kù)篇_數(shù)據(jù)

幸好我還有左手和右手,于是我把我給P醬總結(jié)的文檔編撰成了《左手MongoDB,右手Redis——從入門(mén)到商業(yè)實(shí)戰(zhàn)》這本書(shū)。本書(shū)現(xiàn)在已經(jīng)在京東、亞馬遜、淘寶上架。

數(shù)據(jù)工程師妹子養(yǎng)成手記——數(shù)據(jù)庫(kù)篇_mysql_02

數(shù)據(jù)工程師妹子養(yǎng)成手記——數(shù)據(jù)庫(kù)篇_數(shù)據(jù)庫(kù)_03

數(shù)據(jù)工程師妹子養(yǎng)成手記——數(shù)據(jù)庫(kù)篇_數(shù)據(jù)庫(kù)_04

這本書(shū)的定位是MongoDB和Redis的應(yīng)用,所以有意弱化了數(shù)據(jù)庫(kù)的搭建、維護(hù)和底層優(yōu)化。所以本書(shū)可能不適合數(shù)據(jù)庫(kù)工程師。

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

福利時(shí)間:

在本文下面留言,回復(fù)你與MongoDB、Redis的故事并把本文轉(zhuǎn)發(fā)到朋友圈,我將會(huì)在2019年02月25日20點(diǎn)選擇三位同學(xué),每人贈(zèng)送一本簽名版的《左手MongoDB,右手Redis——從入門(mén)到商業(yè)實(shí)戰(zhàn)

?

本文摘自 :https://blog.51cto.com/u

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >