数据库
運維為什么要學DBA課程
在我們互聯的小型企業中,有的公司3百多臺的數據服務器也沒有用DBA,而是運維人員來維護。我們運維人員為什么要學好DBA那,因為數據庫是企業架構的瓶頸。
99%互聯網的公司的網站機構瓶頸都在后端,一個是存儲一個是數據庫數據庫,第一大瓶頸是數據庫極難擴展的,第二大瓶頸是存儲,只要將這兩個學好,做網絡架構是非常容易的。因為數據庫和存儲的極難擴展的特性所應用到了緩存和cdn這些技術的價值,cdn和緩存的目的都是為了減輕存儲的壓力。為什么是加緩存那而不是直接擴展數量那,一個是不好擴展,另一個是即使擴展了效率也不高,就拿數據庫為例,加一個memched比后端擴展5臺mysql的效果都好。
一、什么是數據庫?
簡單說,數據庫就是一個存放數據的倉庫,這個廠庫是按照一定的數據結構來組織、存儲的我們可以通過數據提供的多種方法來管理數據據庫的數據。
數據庫誕生距現在大概60年,2000年后,數據庫不在僅僅是存儲和管理數據了,而轉變成用戶所需要的各種數據管理的方式,數據庫有很多種類和功能,從簡單的存儲有各種數據的表格到能夠進行海量數據據存儲的大型數據系統都各方面得到了廣泛的應用。
二、非關系型數據庫
隨著互聯網web2.0網站的興起,傳統關系型數據庫在應對web2.0網站,特別是對于模塊日益擴大的海量數據,超大規模和高并發的微博、微信、SNS類型的web2.0純動態網站已經顯得力不從心,暴露了很多難以克服的問題,例如:傳統的關系型數據IO瓶頸、性能瓶頸都難以有效的突破,于是開始出現大批針對特定場景,以高性能和使用便利為目的功能特異化的數據產品,NoSQl(非關系型)類的數據庫就是在這樣的場景中誕生并得到非常迅速的發展。
簡單來講就是web2.0后動態請求的增加,傳統的數據庫已經成為機構的瓶頸,所以才會后noSql的發展。
非關系型數據庫的種類
1.(鍵值)存儲數據庫
鍵值數據庫就是類似于傳統語言中使用的哈希表,可以通過key來添加、查詢或者刪除數據,因為使用key主鍵訪問,所以會獲得很高的性能以擴展性。
鍵值數據庫主要使用的是哈希表,這個表中有一個特定的建和一個指針指向特定的數據。key/value 模型對與IT系統來說的優勢在于簡單、易于部署、高并發。
典型產品:Momcached,Redis、MomcacheDB、Berkeley DB
2.列存儲數據庫
列存儲數據庫將數據存儲的列族中,一個列族存儲經常備一起查詢的相關數據。舉個例子,如果我們有一個Person類,我們通過經常一起查詢他們的姓名和年齡而不是薪資。這種情況下,姓名和年齡就會備放入一個列族中,而薪資則在另一列族中。
這部分數據庫通常是用來對應分布存儲的海量數據。鍵仍然存在,但是它們的特點是指向了多個列,這些列是由列家族來安排的
典型產品:Cassandra,Hbase
3.面向文檔的數據庫
文檔數據庫的靈感來自與Lotus Notes辦公軟件的,而且它同第一中鍵值存儲類型。該類型的數據類型是版本的文檔,半結構的文檔一特別的格式存儲,比如json。文檔數據可一看作是鍵值數據的升級版本。允許之間嵌套鍵值,而且文檔數據庫比鍵值數據庫的查詢效率高。
面向文檔數據庫會將數據以及文檔的形式存儲,每個文檔都是自包含的數據單元,是一系列數據項的集合,每個數據項都有一個名稱于應鍵值,值既可以是簡單的數據類型,如字符串、數字和日期等;亦可以是復雜的類型,如有序表和關聯對象,數據存儲的最小單位是文檔,同一個表中存儲的文檔屬性可以是不同的,數據可以使用XML、JSON或者JSONB等多種形式存儲。
典型產品:mongoDB、CouchDB
4.圖形數據庫
圖形數據庫允許我們將數據以圖的方式存儲,實體會被作為頂點,而實體之間的關系則被作為邊,比如我們有三個實體SteveJobs、Annle和Next、則會有“Founded by”的邊將Apple和Next連接Steve Jobs
圖形結構的數據庫通其他行列以及剛性結構的SQL數據庫不同,它是使用靈活的圖形模型,并且能夠擴展到多個服務器上,NoSQL數據庫沒有標準的查詢語言(SQL),因此進行數據庫查詢需要定制數據庫類型,許多NoSQL數據庫有REST式的數據接口或或者查詢API
典型產品:Neo4J、InforGr id
三、關系型數據庫
關系型數據庫是把復雜的機構歸結為簡單的二元關系(即二位表格形式)。在關系型數據庫中,對數據的操作幾乎全部建立在一個或多個關系表格上,通過對這些關聯表格分類、合并、連接或選取等運算來實現數據庫的管理
Mysql 數據庫的主要應用范圍,是互聯網
典型產品:Mysql ,oracle
有必要學習oracle嗎? 互聯網公司是沒有必要學習的,互聯網公司都用mysql,因為oracle太笨重、太貴了,在傳統的一些行業中可能會用到(證卷,金融,政府。。。)。
Mysql數據庫是一個中小行的關系數據庫管理系統,軟件開發為瑞典Mysql AB公司。在2008年1月16號備sun公司收購,后Sun公司又被oracle公司收購。目前Mysql被廣泛應用在Intnet上的大中小網站中。由于體積小、速度快、總體擁有成本低,尤其是開放源代碼這一特點,許多大中小網站為了降低網站成本而選擇了Mysql作為網站數據庫,甚至國內致命的淘寶也選擇棄用oracle而更換為Mysql。Mysql數據庫的主要應用范圍;互聯網領域,大中小行網站,游戲公司,電商平臺等。
為什么選擇用mysql數據庫
毫無疑問,既成事實,絕大多數linux操作系統的大中小互聯網網站都在用Mysql作為后端的數據庫存儲,從大型的BAT門戶,到電商平臺,分類用戶等無一例外都使用mysql數據庫。那么Mysql數據庫到底有那些優勢和特點,讓大家義無反顧的選擇它呢?
原因有一下幾點:
1)Mysql性能卓越,服務穩定,很少出現異常宕機
2)Mysql開放源代碼且無版權限制,自主及使用成本低
3)Mysql歷史悠久,社區及用戶非常活躍,遇到文帝,可以尋求幫助
4)Mysql軟件體積小,安裝使用方便,并且維護成本低
5)Mysql口碑效應,是的企業無需考慮是使用,LAMP,LEMP流行架構
6)Mysql支持多中操作系統,提供多中API接口,支持多種語言,特別多流行的PHP語言有很好的支持
四、msyql版本
mysql 官網:https://www.mysql.com/,msyql采取雙授權的政策,和大多數的開源產品一樣,分為社區版和商業版,二者兩個版本又各自分四個曉得版本,這個四個曉得版本分別是alpha版、Beta版、RC版和GA版。
alpha 版:mysql公司內部測試用的版本,不對外開放。
beata 版:完成功能和測試后的版本。
RC版:生產環境發布前的小版本,是beata升級后的版本。
GA版:對外的穩定版。
五、mysql產品線
msyql在發展5.1版本后,重新規劃為三條生產線,為的是提高市場的競爭力
第一條生產線:5.0.xxx--5.1.xxx生產線
這條生產線繼續完善和改進用戶體驗和性能,同時增加新功能,這條生產線可以說是早起生產線的延續。
第二條生產線:5.4.xxx--5.7.xxx生產線
第二條產品線是為了更好的整合msyql AB 公司社區和第三方公司的新存引擎,以及吸收新的算法等,從而更好的支持SMP架構,提搞性能而做了大量的代碼重構版本從5.4開始目前發展到5.6x
***公司常用的版本是5.5版本
第三條產品線:6.0.xx--7.1.xx 產品系列(使用比較少,為的是解決集群的問題,但是各公司都用自己的解決方案)
第三條產品先是為了更好的推廣mysql cluster版本,以及提高性能和穩定性,以及功能改進,使其對cluster引擎提供更有效的支持和優化,版本為6.0開發版,目前到7.1xx
六、mysql版本選擇建議
1)選擇開源的社區版的穩定版GA 版本
2)選擇5.1或5.5,互聯網主流是5.5 ,其次是5.1和5.6
3)選擇mysql數據庫發布GA版,一定是發布6個月以上的GA版本
4)要選則前后幾個月沒BUG修復的版本,而不是大量修復BUG集中的版本
5)最好向后較長時間沒有發布更新的版本
6)要考慮開發人員開發程序使用的版本是否兼容你的版本
7)做為內部開發測試數據庫跑3到6個月的時間
8)優先企業非核心業務跑新版的數據庫
9)行DBA高手請教,那個產品更適合
10)經過上述流程沒有問題后,可以全面上新的數據庫
七、mysql多實例介紹(需要補充)
什么是mysql多實例?
簡單說,就是一臺機器上開啟多個不同對的服務端口(3306-3307),運行多個mysql服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供各自的服務。
這些mysql多實例共用一套mysql安裝程序,使用不同(也可以相同)的mysql配置文件、啟動程序、數據文件,在提供服務時多實例Mysql在邏輯上看來是各自獨立的,多個實例的自身根據配置文件對應的設定值,來取得服務器的相關硬件資源多少。
mysql多實例就像房子的多個臥室一樣,每個實例可以看做一個臥室,整個服務就是一套房子,服務器的硬件資源可以看做房子的衛生間、廚房、客廳一樣,是房子的公共資源。
多實例的問題:
當某個服務實例并發很高或者有慢查詢時,整個實例回消耗整個更多的內存、cpu、磁盤IO資源,導致服務上的其他實例提供服務的質量下降,這樣相當于大家住在一個房子的不同臥室內,早上起床上班,都會刷牙。。。這樣為衛生間會長期占用,其他人就要等待一樣的道理。
多實例的應用場景
1)資金緊張的公司。公司業務量不大有舍不得花錢,可以通過3臺服務器部署6-9個實例,交叉做主從同步及讀寫分離,實現6-9臺服務器才有的效果,這里要強調的是所謂的盡量獨立是相對的。
2)并發訪問不是特別大的業務。服務的資源基本是浪費的。這個時候就和適合多實例的應用,如果對SQl語句優化做的好,MYSQL多實例是一個值得用的技術,及使并發很大,合理分配好系統資源,也不會有太多問題。
3)門戶網站應用MYSQL多實例的場景。百度搜索引擎的數庫就是多實例,一般是從庫,cpu為48C內存96G,跑3-4個實例,sina網也是用的多實例,內存48G左右。門戶網站使用多實例的目的是配硬件好的服務,節省IDC機柜空間,同時,跑多個實例也讓硬件資源不浪費。
總結
- 上一篇: 五款帮助创业者迅速熟悉互联网创业的在线学
- 下一篇: C++ 中复杂的声明