對(duì)于許多程序員而言,基本上不需要決定公司選擇哪種數(shù)據(jù)庫(kù)。當(dāng)程序員加入公司時(shí),公司早已經(jīng)確認(rèn)了的大多數(shù)技術(shù)選擇,尤其是數(shù)據(jù)庫(kù)選擇,因?yàn)橐坏┻x擇了數(shù)據(jù)庫(kù),以后遷移的成本仍然很高,因此要求程序員在使用現(xiàn)有數(shù)據(jù)庫(kù)時(shí),具有一定的避坑能力。那么程序員如何在數(shù)據(jù)庫(kù)中避坑的?下文總結(jié)了5點(diǎn),幫助大家更好的應(yīng)用數(shù)據(jù)庫(kù)。
程序員如何在數(shù)據(jù)庫(kù)中避坑的?
再好的數(shù)據(jù)庫(kù),如果使用姿勢(shì)不對(duì)也是枉然,更何況很多程序員并不怎么懂?dāng)?shù)據(jù)庫(kù)。在數(shù)據(jù)庫(kù)使用中,我們常會(huì)碰到很多問(wèn)題。
人為失誤
人為失誤一般分兩類,一種是DBA操作失誤,一種是程序員開(kāi)人員程序里使用不當(dāng)。DBA一般我們認(rèn)為是數(shù)據(jù)庫(kù)管理的專家了,出錯(cuò)的概率比較小,但是一旦出錯(cuò),危險(xiǎn)是做大的。比如我們經(jīng)常調(diào)侃的“刪庫(kù)跑路”,雖然是依據(jù)調(diào)侃,但是我是真真的見(jiàn)到過(guò)兩次,生產(chǎn)環(huán)境出現(xiàn)一次,就會(huì)在你的工作生涯上記上“光輝”一筆,所以說(shuō)DBA算是一個(gè)高危工作了吧。另一種是開(kāi)發(fā)人員使用不當(dāng)。常見(jiàn)的比如在使用大表時(shí)候,不考慮是否有索引,進(jìn)行了全表掃描,導(dǎo)致整個(gè)數(shù)據(jù)庫(kù)被拖垮。
數(shù)據(jù)庫(kù)的訪問(wèn)瓶頸
只要是數(shù)據(jù)庫(kù),就會(huì)有并發(fā)量的限制。以前使用MySQL,我們經(jīng)常看到互聯(lián)網(wǎng)公司并發(fā)上萬(wàn)的壓測(cè)。但是對(duì)于很多新型的MPP數(shù)據(jù)庫(kù),他們的并發(fā)并不是你想的那樣,MPP一般由集群CPU物理核數(shù)有關(guān)。比如以前開(kāi)發(fā)程序查詢的MySQL,遷移到GP,那么你的數(shù)據(jù)庫(kù)連接池要改一改了。特別是對(duì)于一些面向互聯(lián)網(wǎng)的網(wǎng)站,數(shù)據(jù)庫(kù)管理層也要做訪問(wèn)策略,不然,一個(gè)外掛可能就會(huì)把你的庫(kù)搞死。
索引
我們都知道索引在傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)中使用的很多,效果也很明顯。但是你要知道索引是拿存儲(chǔ)換時(shí)間的操作。曾遇到過(guò)開(kāi)發(fā)人員動(dòng)不動(dòng)就讓建索引,搞的好像不要錢一樣。還有像Vertica這個(gè)數(shù)據(jù)庫(kù)就比較友好了,不需要建立索引,只需要在建表時(shí)候預(yù)排序分布即可提高查詢效率,同時(shí)列存儲(chǔ)的數(shù)據(jù)還是壓縮的,降低了存儲(chǔ),還提高了查詢效率。
HA(高可用)
數(shù)據(jù)庫(kù)作為存儲(chǔ)查詢引擎的同時(shí),支撐著大型網(wǎng)站的后臺(tái)服務(wù),一定要考慮高可用。對(duì)于一些天然不支持高可用或者高可用不友好的選型一定要小心。再來(lái)安利一下Vertica,無(wú)Master MPP架構(gòu),集群中只要不超過(guò)一半機(jī)器宕機(jī),集群就處于可用狀態(tài)。
標(biāo)準(zhǔn)SQL
SQL就是針對(duì)數(shù)據(jù)庫(kù)查詢產(chǎn)生的語(yǔ)言。隨著新型數(shù)據(jù)庫(kù)的出現(xiàn),很多數(shù)據(jù)庫(kù)不支持標(biāo)準(zhǔn)SQL或者支持很弱。比如HBase。這對(duì)于很多以前的開(kāi)發(fā)人員還是有一定學(xué)習(xí)門檻的,還有就是后期如果出現(xiàn)業(yè)務(wù)遷移還是很困難的。
Oracle支持標(biāo)準(zhǔn)SQL,但是存儲(chǔ)過(guò)程并不是每個(gè)數(shù)據(jù)庫(kù)都有的,這也是阿里為何禁用存儲(chǔ)過(guò)程的吧,你無(wú)法想象一個(gè)上萬(wàn)行存儲(chǔ)過(guò)程的遷移要耗費(fèi)多少資源。對(duì)標(biāo)準(zhǔn)SQL的支持,降低了開(kāi)發(fā)人員的使用門檻,也降低了以后業(yè)務(wù)遷移的風(fēng)險(xiǎn)。
以上就是關(guān)于程序員如何在數(shù)據(jù)庫(kù)中避坑的全部?jī)?nèi)容介紹,想了解更多關(guān)于數(shù)據(jù)庫(kù)的信息,請(qǐng)繼續(xù)關(guān)注中培偉業(yè)。