三種東西永遠不要放到資料庫裡
我已經在很多演講裡說過,改進你的系統的最好的方法是先避免做“蠢事”。我並不是說你或你開發的東西“蠢”,只是有些決定很容易被人們忽略掉其暗含的牽連,認識不到這樣做對系統維護尤其是系統升級帶來多大的麻煩。作為一個顧問,像這樣的事情我到處都能見到,我還從來沒有見過做出這樣的決定的人有過好的結果的。
[@more@]我已經在很多演講裡說過,改進你的系統的最好的方法是先避免做“蠢事”。我並不是說你或你開發的東西“蠢”,只是有些決定很容易被人們忽略掉其暗含 的牽連,認識不到這樣做對系統維護尤其是系統升級帶來多大的麻煩。作為一個顧問,像這樣的事情我到處都能見到,我還從來沒有見過做出這樣的決定的人有過好 的結果的。
圖片,檔案,二進位制資料
既然資料庫支援BLOB型別的資料,把檔案塞進BLOB欄位裡一定沒有錯了!?錯,不是這樣的!別的先不提,在很多資料庫語言裡,處理大欄位都不是很容易。
把檔案存放在資料庫裡有很多問題:
- 對資料庫的讀/寫的速度永遠都趕不上檔案系統處理的速度
- 資料庫備份變的巨大,越來越耗時間
- 對檔案的訪問需要穿越你的應用層和資料庫層
這後兩個是真正的殺手。把圖片縮圖存到資料庫裡?很好,那你就不能使用nginx或其它型別的輕量級伺服器來處理它們了。
給自己行個方便吧,在資料庫裡只簡單的存放一個磁碟上你的檔案的相對路徑,或者使用S3或CDN之類的服務。
短生命期資料
使用情況統計資料,測量資料,GPS定位資料,session資料,任何只是短時間內對你有用,或經常變化的資料。如果你發現自己正在使用定時任務從某個表裡刪除有效期只有一小時,一天或數週的資料,那說明你沒有找對正確的做事情的方法。使用redis, statsd/graphite, Riak,它們都是幹這種事情更合適的工具。這建議也適用於對於收集那些短生命期的資料。
當然,用挖土機在後花園裡種土豆也是可行的,但相比起從儲物間裡拿出一把鏟子,你預約一臺挖土機、等它趕到你的園子裡挖坑,這顯然更慢。你要選擇合適的工具來處理手頭上的事。
日誌檔案
把日誌資料存放到資料庫裡,表面上看起來似乎不錯,而且“將來也許我需要對這些資料進行復雜的查詢”,這樣的話很得人心。這樣做並不是一個特別差的做法,但如果你把日誌資料和你的產品資料存放到一個資料庫裡就非常不好了。
也許你的日誌記錄做的很保守,每次web請求只產生一條日誌。對於整個網站的每個事件來說,這仍然會產生大量的資料庫插入操作,爭奪你使用者需要的資料庫資源。如果你的日誌級別設定為verbose或debug,那等著看你的資料庫著火吧。
你應該使用一些比如Splunk Loggly或純文字檔案來存放你的日誌資料。這樣去檢視它們也許會不方便,但這樣的時候不多,甚至有時候你需要寫出一些程式碼來分析出你想要的答案,但總的來說是值得的。
可是稍等一下,你是那片不一樣的雪花,你遇到的問題會如此的不同,所以,如果你把上面提到的三種東西中的某一種放到了資料庫裡也不會有問題。不,你錯了,不,你不特殊。相信我。
英文原文:Three things you should never put in your database
原文連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/66009/viewspace-1058303/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 哪三樣東西永遠不能放進資料庫裡資料庫
- win10如何把桌面1的東西放到桌面2_win10怎麼把桌面1的東西放到桌面2Win10
- k8s~helm映象版本永遠不要用latestK8S
- 記住:永遠不要在 MySQL 中使用 UTF-8MySql
- 記住,永遠不要在MySQL中使用“utf8”MySql
- 記住,永遠不要在 MySQL 中使用 “utf8” 編碼MySql
- 117 遠端連線mysql資料庫的幾種方式MySql資料庫
- [譯]JS裡我才知道的東西JS
- 程式設計師永遠不要再犯的5個程式設計bug程式設計師
- 防騙大資料,朋友圈裡賣的這些東西...不是坑人就是害命!大資料
- 不是自己的東西不要拿,是做人最起碼的道理
- win10怎麼把電腦桌面的東西放到別的盤_win10如何把桌面檔案放到其他盤Win10
- 資料庫查不出資料:傳參不要加引號資料庫
- 獲得資料庫操作日誌的三種方式資料庫
- 永遠不要使用 redis 過期監聽實現定時任務Redis
- git裡最有用最經常使用的東西Git
- input 框裡面的東西刪不掉怎麼辦?
- Flutter一切皆widget但是不要將所有東西放入一個widgetFlutter
- 科藍自主國產資料庫迎來重大機遇,“東數西算”正式啟動!資料庫
- Kubernetes 學習筆記-- kafka往couchdb裡倒東西筆記Kafka
- 遠端連線mysql資料庫MySql資料庫
- 怪東西
- Laravel 資料庫裡的資料刪除Laravel資料庫
- 我後悔了,真的永遠不要在生產中直接執行Node.jsNode.js
- 前端小白,關於在函式裡面使用陣列的push()方法,結果資料永遠只有一條前端函式陣列
- 《燕雲十六聲》“在玩一種很新的東西”
- 爬取githubs——登入後的東西(兩種方法)Github
- 先進資料中心背後,“東數西算”的三重意志
- 重灌系統電腦裡的東西還在嗎 電腦系統重灌後資料還在嗎
- 三種 Post 提交資料方式
- 關於 Gradle 依賴庫的幾個東西Gradle
- 永遠不要使用雙花括號初始化例項,否則就會OOM!OOM
- 不要寄望於市場行情的好轉,因為你可能永遠也等不到了。
- 基於gin的golang web開發:永遠不要相信使用者的輸入GolangWeb
- 在阿里工作的日子裡,我都學到了哪些東西?阿里
- 資料庫遠端連線失敗資料庫
- ORACLE 配置連線遠端資料庫Oracle資料庫
- 在ABAP裡取得一個資料庫表記錄數的兩種方法資料庫
- 安永:2020東盟投資指南(附下載)