避免將三種東西并入數(shù)據(jù)庫
改進(jìn)系統(tǒng)?如何改進(jìn)呢?
那么要改進(jìn)你的系統(tǒng)最好的方法就是避免先做“蠢事”這里親們要理解,不是說你的或者你開發(fā)的東西“蠢”,而是有些細(xì)節(jié)容易被人們忽略掉他暗含的牽連,認(rèn)識不到的話,這樣做對系統(tǒng)維護(hù)尤其是系統(tǒng)升級只會帶來更多的麻煩。
第一種,圖片、文件、二進(jìn)制數(shù)據(jù)。
很多數(shù)據(jù)庫都支持blob類型的數(shù)據(jù),那么我們就可以把文件硬塞進(jìn)去就好了嗎?大錯(cuò)特錯(cuò),先不說這個(gè),在很多數(shù)據(jù)庫的語言里,大部分處理字段都是很不容易的,把文件之間存放在數(shù)據(jù)庫里面,第一點(diǎn),對數(shù)據(jù)庫的讀/寫的速度永遠(yuǎn)都趕不上文件系統(tǒng)處理的速度;第二點(diǎn),數(shù)據(jù)庫備份變的巨大,越來越耗時(shí)間;第三點(diǎn),對文件的訪問需要穿越你的應(yīng)用層和數(shù)據(jù)庫層。
這后面兩個(gè)才是終極boss殺手,把圖片縮略圖存到數(shù)據(jù)庫里面?very good,那你就不能使用nginx或者其他類型的服務(wù)器來處理他們了哦~~
所以給自己圖個(gè)方便吧,就是在數(shù)據(jù)庫里面只簡單的存放一個(gè)你磁盤上和你文件的相對路徑,或者用S3或者cdn之類的服務(wù)。
第二種,短生命期數(shù)據(jù)。
使用情況統(tǒng)計(jì)數(shù)據(jù),測量數(shù)據(jù),GPS定位數(shù)據(jù),session數(shù)據(jù),任何只是短時(shí)間內(nèi)對你有用,或經(jīng)常變化的數(shù)據(jù)。
如果你發(fā)現(xiàn)自己正在使用定時(shí)任務(wù)從某個(gè)表里刪除有效期只有一小時(shí),一天或數(shù)周的數(shù)據(jù),那說明你沒有找對正確的做事情的方法。
使用redis, statsd/graphite, Riak,它們都是干這種事情更合適的工具。這建議也適用于對于收集那些短生命期的數(shù)據(jù)。
當(dāng)然,用挖土機(jī)在后花園里種土豆也是可行的,但相比起從儲物間里拿出一把鏟子,你預(yù)約一臺挖土機(jī)、等它趕到你的園子里挖坑,這顯然更慢。你要選擇合適的工具來處理手頭上的事。
第三種,日志文件。
把日志數(shù)據(jù)存放到數(shù)據(jù)庫里,表面上看起來似乎不錯(cuò),而且“將來也許我需要對這些數(shù)據(jù)進(jìn)行復(fù)雜的查詢”,這樣的話很得人心。
雖然這樣做不是一個(gè)很差的方法,但是也絕對不是一個(gè)聰明人做的方法,一樣道理,你把日志數(shù)據(jù)和你的產(chǎn)品數(shù)據(jù)存放到一個(gè)數(shù)據(jù)庫里面,到時(shí)你就真的會累覺不愛了。
也許你的日志記錄做的很保守,每次web請求只產(chǎn)生一條日志。對于整個(gè)網(wǎng)站的每個(gè)事件來說,這仍然會產(chǎn)生大量的數(shù)據(jù)庫插入操作,爭奪你用戶需要的數(shù)據(jù)庫資源。
如果你的日志級別設(shè)置為verbose或debug,那等著看你的數(shù)據(jù)庫著火吧。
你應(yīng)該使用一些比如Splunk Loggly或純文本文件來存放你的日志數(shù)據(jù)。這樣去查看它們也許會不方便,但這樣的時(shí)候不多,甚至有時(shí)候你需要寫出一些代碼來分析出你想要的答案,但總的來說是值得的。
以上就是人們會忽略掉的三種東西~希望能給親們一點(diǎn)幫助。