其實(shí)我的數(shù)據(jù)庫知識不是很扎實(shí),真心的。
當(dāng)年我學(xué)這個(gè)東西時(shí)某個(gè)大神告訴我“學(xué)會sql server”走遍天下都不怕。事實(shí)上,這幾年如果只會sqlserver根本到哪都很驚悚。
原因?
1、如果是政府軟件,雖然不像互聯(lián)網(wǎng)那樣高,但是數(shù)據(jù)存儲量確實(shí)很大很大,大家想想譬如財(cái)政數(shù)據(jù)、公積金數(shù)據(jù)、民政局?jǐn)?shù)據(jù)等,而且很多數(shù)據(jù)不能使用緩存,必須實(shí)時(shí)計(jì)算,當(dāng)sql2008還沒出現(xiàn)時(shí),確實(shí)在大數(shù)據(jù)計(jì)算性能上不如oracle(同時(shí)期版本)
2、由于某些原因(你懂的),政府很少會同意使用windows服務(wù)器平臺,大都會使用unix或linux平臺,這就決定了sqlserver或者.net應(yīng)用很難賣出去(當(dāng)然不是完全不行,有些局部部門的軟件還是可以的,機(jī)密數(shù)據(jù)那想都不要想)
3、對于企業(yè)項(xiàng)目,很多中小企業(yè)為了節(jié)約成本又想有節(jié)操的不使用盜版,那么mysql是他們最好的選擇。
4、對于自己做網(wǎng)站,前期如果不想花大成本購買獨(dú)立服務(wù)器的話,使用mysql是正道,便宜而且好用,最重要的是前期也沒有這么多數(shù)據(jù)和人氣讓我們需要上高級數(shù)據(jù)庫。
其實(shí)我個(gè)人認(rèn)為,至少掌握1-2個(gè)數(shù)據(jù)庫是很有必要的,譬如mysql和oracle,至于sqlserver不是它簡單,而是微軟的大部分東西(沒說全部)在用戶體驗(yàn)和易學(xué)性上確實(shí)做得更甚一籌(易學(xué)性既是優(yōu)點(diǎn)也是缺點(diǎn),缺點(diǎn)在于出了問題你很難找到根本原因)
以下有幾個(gè)建議關(guān)于怎么玩數(shù)據(jù)庫。
換個(gè)方法學(xué)習(xí)
一、 不建議按部就班的學(xué)習(xí),因?yàn)槟氵@么學(xué),別人也是這么學(xué),而每個(gè)人的理解能力、技術(shù)基礎(chǔ)、記憶力、周邊環(huán)境和自己肚皮飽餓程度都是不同的,這些要素直接影響你的學(xué)習(xí)速度。
如果大家都在同一起跑線上,使用相同的學(xué)習(xí)辦法是不可取的
二、自己逼自己
模擬項(xiàng)目學(xué)習(xí)是我個(gè)人認(rèn)為最好的辦法。
首先需要了解基本的語法,譬如select insert update 等等(還有一些,這里不一一列出)
譬如我們新建一個(gè)新聞表叫做 news ,里面包含 id,title,content(text型),addtime,clickcount 5個(gè)字段。
然后手工insert into 這張表50萬條高仿真數(shù)據(jù),注意是50萬或更多且新聞內(nèi)容字段數(shù)據(jù)必須要大(如"111,aaa,大大大" 這樣的測試數(shù)據(jù)不如趕緊洗洗睡)。
然后做一個(gè)頁面,展示某一條新聞的詳細(xì),右邊邊欄展示(1、相關(guān)新聞 2、人氣排行 3、兩天內(nèi)發(fā)布的新聞 等各10條)
(1) 這時(shí)你會發(fā)現(xiàn),取數(shù)據(jù)還真不能簡單的 select * from 表 where id=X,你會需要學(xué)習(xí)如何創(chuàng)建字段索引、如何需要在該表中加入冗余字段,你還會發(fā)現(xiàn)當(dāng)新聞表特別大的時(shí)候,用戶每點(diǎn)擊一次新聞此時(shí)如果update這張表的clickcount時(shí)頁面很慢,你的筆記本風(fēng)扇很燙。
(2) 如果再復(fù)雜點(diǎn)需求,你會發(fā)現(xiàn)用視圖比較好,或者用存儲過程來更新一些數(shù)據(jù)效率更高,然后你會發(fā)現(xiàn)新增新聞時(shí)還要使用事務(wù)才行。于是逼著你去學(xué)這些知識。
(3) 再進(jìn)一步,你會發(fā)現(xiàn)自己做的新聞頁面好丑好丑,于是逼著你去學(xué)css和html 和jquery
(4) 然后你把表中的數(shù)據(jù)擴(kuò)展到2000萬以上,你會發(fā)現(xiàn)某些功能還真不是一張表可以搞定的。貌似還得了解數(shù)據(jù)庫的分區(qū)甚至分表更甚的是你會發(fā)現(xiàn)還得用到分布式部署。 你還會學(xué)會用數(shù)據(jù)庫sql查詢分析器來分析哪條sql語句占了很大性能。甚至不同的sql語句有的比較耗內(nèi)存,而有的sql語句讓你的cpu漲到了100%。
于是,我個(gè)人認(rèn)為你本來學(xué)1個(gè)月然后做測試項(xiàng)目,共需2個(gè)月左右才能基本掌握一個(gè)數(shù)據(jù)庫知識,如果用同步邊學(xué)邊自虐的方式很可能時(shí)間要節(jié)約20%-30%以上,并且讓你掌握的更扎實(shí)。
這就是為什么有的計(jì)算機(jī)系大學(xué)畢業(yè)的學(xué)生不如其他專業(yè)轉(zhuǎn)行的學(xué)生。
總結(jié):
當(dāng)然,技術(shù)(這里主要指開發(fā)相關(guān))做到高級境界 其實(shí)是數(shù)學(xué)知識和自然社會知識的碰撞,和編程語言也就關(guān)系不大了。但是數(shù)據(jù)庫知識是必須掌握的,不管你做什么樣的應(yīng)用,只要你需要存儲數(shù)據(jù)那么必須了解數(shù)據(jù)庫。
如果你想作為業(yè)余愛好更深入的了解數(shù)據(jù)庫,那么你可以從數(shù)據(jù)結(jié)構(gòu)學(xué)起,深入了解數(shù)據(jù)庫是怎么運(yùn)作的,當(dāng)然mysql都是開源的,學(xué)學(xué)思想很不錯(cuò),當(dāng)然我從沒看過(因?yàn)榭床欢约皼]有經(jīng)濟(jì)實(shí)力去研究)。
如果在你還沒有成為大神時(shí)就想自己開發(fā)一個(gè)關(guān)系型數(shù)據(jù)庫,那可能不太現(xiàn)實(shí)。在我國玩這種事情的前提是必須要有錢,然后才能談技術(shù)、談團(tuán)隊(duì)、談產(chǎn)品,否則你會深陷泥塘不可自拔。
還有一句話,好的并且是賺錢的程序員大部分都是在特定時(shí)事背景中逼出來的,在這個(gè)范圍內(nèi)沒有天才。
以上為個(gè)人觀點(diǎn),見仁見智。并非在任何場合都是正確的。
聯(lián)系客服