數據庫二

幾種經常使用引擎介紹css

1, MyISAM引擎node

特色mysql

1, 不支持事務sql

事務是指邏輯上的一組操做,組成這組操做的各個單元,要麼全成功要麼全失敗。數據庫

2, 表級鎖定緩存

數據更新時鎖定整個表:其鎖定機制是表級鎖定,也就是對錶中的一個數據進行操做都會將這個表鎖定,其餘人不能操做這個表,這雖然可讓鎖定的實現成本很小可是也同時大大下降了其併發性能安全

3, 讀寫互相阻塞架構

不只會在寫入的時候阻塞讀取,MyISAM還會再讀取的時候阻塞寫入,但讀自己不會阻塞另外的讀併發

4, 只會緩存索引oracle

MyISAM 能夠經過key_buffer_size 的值來提升緩存索引,以大大提升訪問性能減小磁盤IO,可是這個緩存區只會緩存索引,而不會緩存數據。

5, 讀取速度快

佔用資源相對較少

6, 不支持外鍵約束,但只是全文索引

7, MyISAM引擎是MySQL5.5版本以前的默認引擎,是對最初的ISAM引擎優化的產物。

 

業務場景:

1, 不須要事務支持的業務

2, 通常爲讀數據比較多的應用,讀寫都頻繁場景不適合,讀多或者寫多的都適合

3, 讀寫併發訪問都相對較低的業務

4, 數據修改相對較少的業務

5, 以讀爲主的業務

6, 對數據一致性要求不是很高的業務

7, 中小型的網站部分業務會用

 

調優精要:

1, 設置合適的索引

2, 調整讀寫優先級,根據實際需求確保重要操做更優先執行,讀寫的時候能夠經過參數設置優先級

3, 啓用延遲插入改善大批量寫入性能(下降寫入頻率,儘量多條數據一次性寫入)

4, 儘可能順序操做讓insert數據都寫入道尾部,較少阻塞

5, 分解大的操做,下降單個操做的阻塞時間,就像操做系統控制cpu分片同樣

6, 下降併發數,某些高併發某些高併發場景經過應用進行排隊隊列機制Q隊列

7, 對於相對靜態的數據庫數據,充分利用Query Cache或mecached緩存服務能夠極大的提升訪問頻率

8, MyISAM的Count只有再全表掃描的時候特別高效,帶有其餘條件的count都須要進行實際

不支持事務、表鎖設計、支持全文索引,主要面向一些 OLAP 數 據庫應用,在 MySQL 5.5.8 版本以前是默認的存儲引擎(除 Windows 版本外)。數據庫系統 與文件系統一個很大的不一樣在於對事務的支持,MyISAM 存儲引擎是不支持事務的。究其根 本,這也並不難理解。用戶在全部的應用中是否都須要事務呢?在數據倉庫中,若是沒有 ETL 這些操做,只是簡單地經過報表查詢還須要事務的支持嗎?此外,MyISAM 存儲引擎的 另外一個不同凡響的地方是,它的緩衝池只緩存(cache)索引文件,而不緩存數據文件,這與 大多數的數據庫都不相同。

2. InnoDB引擎

特色:

1, 支持事務,支持4個事務隔離界別,支持多版本讀

2, 行級鎖定:經過索引實現,全表掃描仍然會是表鎖,注意間隙的影響

3, 讀寫阻塞與事務隔離級別相關

4, 具體很是高效的緩存特性:能緩存索引,也能緩存數據

5, 整個表和主鍵與cluster方式存儲,組成一顆平衡樹

6, 全部secondaryIndex都會保存主鍵信息

7, 支持分區,表空間,相似oracle數據庫

8, 支持外鍵約束

9, 對硬件要求比較高

 

業務場景:

1, 須要事務支持(具備較好的事務特性)

2, 行級鎖定對高併發有很好的適應能力,但須要確保查詢是經過索引完成

3, 數據更新較爲頻繁的場景

4, 數據一致性要求較高的業務

5, 硬件設備內存較大

6, 更消耗資源,沒有MyISAM引擎快

 

InnoDB引擎調優精要 1.主鍵儘量小,避免給Secondery index帶來過大的空間負擔。 2.避免全表掃描,由於會使用表鎖。 3.儘量緩存全部的索引和數據,提升響應速度,較少磁盤IO消耗。 4.在大批量小插入的時候,儘可能本身控制事務而不要使用autocommit自動提交,有開關能夠控制提交方式。 5合理設置innodb_flush_log_at_trx_commit參數值,不要過分追求安全性。 若是innodb_flush_log_at_trx_commit的值爲0,log buffer每秒就會被刷寫日誌文件到磁盤,提交事務的時候不作任何操做。 6.避免主鍵更新,由於這會帶來大量的數據移動。 能夠看一看InnoDB的重要參數學習一下。

 

InnoDB 存儲引擎將數據放在一個邏輯的表空間中,這個表空間就像黑盒同樣由 InnoDB 存儲引擎自身來管理。從 MySQL 4.1(包括 4.1)版本開始,能夠將每一個 InnoDB 存儲引擎的 表單獨存放到一個獨立的 ibd 文件中。此外,InnoDB 存儲引擎支持將裸設備(row disk)用 於創建其表空間。

InnoDB 經過使用多版本併發控制(MVCC)來得到高併發性,而且實現了 SQL 標準 的 4 種隔離級別,默認爲 REPEATABLE 級別,同時使用一種稱爲 netx-key locking 的策略來 避免幻讀(phantom)現象的產生。除此以外,InnoDB 存儲引擎還提供了插入緩衝(insert buffer)、二次寫(double write)、自適應哈希索引(adaptive hash index)、預讀(read ahead) 等高性能和高可用的功能。

對於表中數據的存儲,InnoDB 存儲引擎採用了彙集(clustered)的方式,每張表都是按 主鍵的順序進行存儲的,若是沒有顯式地在表定義時指定主鍵,InnoDB 存儲引擎會爲每一 行生成一個 6 字節的 ROWID,並以此做爲主鍵。

InnoDB 存儲引擎是 MySQL 數據庫最爲經常使用的一種引擎,Facebook、Google、Yahoo 等 公司的成功應用已經證實了 InnoDB 存儲引擎具有高可用性、高性能以及高可擴展性。對其 底層實現的掌握和理解也須要時間和技術的積累。若是想深刻了解 InnoDB 存儲引擎的工做 原理、實現和應用,能夠參考《MySQL 技術內幕:InnoDB 存儲引擎》一書。

 

事務介紹:

四大特性:

1, 原子性:

事務是一個不可分割的單位,事務中的全部SQL等操做要麼都發生,要麼都不發生

2, 一致性

事務發生前和發生後,數據的完整性必須保持一致

3, 隔離性:

當併發訪問數據庫時,一個正在執行的事務在執行完畢前,對於其餘的會話是不可見的,多個併發事務之間的數據是相互隔離的,

4, 持久性

一個事務一旦被提交,它對數據中的數據改變就是永久性的。若是出了錯誤,事務也不準撤銷,只能經過‘補償性事務’

 

事務的開啓:

數據庫默認事務時自動提交的,也就是發一條sql它就執行一條

 

#NDB 存儲引擎 2003 年,MySQL AB 公司從 Sony Ericsson 公司收購了 NDB 存儲引擎。 NDB 存儲引擎是一個集羣存儲引擎,相似於 Oracle 的 RAC 集羣,不過與 Oracle RAC 的 share everything 結構不一樣的是,其結構是 share nothing 的集羣架構,所以能提供更高級別的 高可用性。NDB 存儲引擎的特色是數據所有放在內存中(從 5.1 版本開始,能夠將非索引數 據放在磁盤上),所以主鍵查找(primary key lookups)的速度極快,而且可以在線添加 NDB 數據存儲節點(data node)以便線性地提升數據庫性能。因而可知,NDB 存儲引擎是高可用、 高性能、高可擴展性的數據庫集羣系統,其面向的也是 OLTP 的數據庫應用類型。 #Memory 存儲引擎 正如其名,Memory 存儲引擎中的數據都存放在內存中,數據庫重 啓或發生崩潰,表中的數據都將消失。它很是適合於存儲 OLTP 數據庫應用中臨時數據的臨時表,也能夠做爲 OLAP 數據庫應用中數據倉庫的維度表。Memory 存儲引擎默認使用哈希 索引,而不是一般熟悉的 B+ 樹索引。 #Infobright 存儲引擎 第三方的存儲引擎。其特色是存儲是按照列而非行的,所以很是 適合 OLAP 的數據庫應用。其官方網站是 http://www.infobright.org/,上面有很多成功的數據 倉庫案例可供分析。 #NTSE 存儲引擎 網易公司開發的面向其內部使用的存儲引擎。目前的版本不支持事務, 但提供壓縮、行級緩存等特性,不久的未來會實現面向內存的事務支持。 #BLACKHOLE 黑洞存儲引擎,能夠應用於主備複製中的分發主庫。

 

文件做用介紹:

1.  db.opt文件:用來記錄該庫的默認字符集編碼和字符集排序規則用的。也就是說若是你建立數據庫指定默認字符集和排序規則,那麼後續建立的表若是沒有指定字符集和排序規則,那麼該新建的表將採用db.opt文件中指定的屬性。 2.後綴名爲.frm的文件:這個文件主要是用來描述數據表結構(id,name字段等)和字段長度等信息 3.後綴名爲.ibd的文件:這個文件主要儲存的是採用獨立表儲存模式時儲存數據庫的數據信息和索引信息; 4.後綴名爲.MYD(MYData)的文件:從名字能夠看出,這個是存儲數據庫數據信息的文件,主要是存儲採用獨立表儲存模式時存儲的數據信息; 5.後綴名爲.MYI的文件:這個文件主要儲存的是數據庫的索引信息; 6.ibdata1文件:主要做用也是儲存數據信息和索引信息,這個文件在mysql安裝目錄的data文件夾下。 從上面能夠看出,.ibd儲存的是數據信息和索引信息,ibdata1文件也是存儲數據信息和索引信息,.MYD和.MYI也是分別儲存數據信息和索引信息,那他們之間有什麼區別呢? 主要區別是再於數據庫的存儲引擎不同,若是儲存引擎採用的是MyISAM,則生成的數據文件爲表名.frm、表名.MYD、表名的MYI;而儲存引擎若是是innoDB,開啓了innodb_file_per_table=1,也就是採用獨立儲存的模式,生成的文件是表名.frm、表名.ibd,若是採用共存儲模式的,數據信息和索引信息都存儲在ibdata1(在裏面進行分類,從外面看是一個文件)中; 在進行數據恢復的時候,若是用的是MYISAM數據引擎,那麼數據很好恢復,只要將相應.frm, .MYD, .MYI文件拷貝過去便可。可是若是是innodb的話,則每個數據表都是一個單獨的文件,只將相應的.frm和.ibd文件拷貝過去是不夠的,必須在你的ibd文件的tablespace id和ibdata1文件中的元信息的tablespace id一致才能夠。 msyql人家設定的規則就是這樣存儲表的,使用人家的系統,就要理解人家的規則。

 

Oracle 和SQL Server等全部數據存儲管理機制都是同樣的。而MySql數據庫提供了多種存儲引擎。用戶能夠根據不一樣的需求爲數據表選擇不一樣的存儲引擎,用戶也能夠根據本身的須要編寫本身的存儲引擎。

  Oracle中不存在引擎的概念,數據處理大體能夠分紅兩大類:聯機事務處理OLTP(on-line transaction processing)、聯機分析處理OLAP(On-Line Analytical Processing)。OLTP是傳統的關係型數據庫的主要應用,主要是基本的、平常的事務處理,例如銀行交易。OLAP是數據倉庫系統的主要應用,支持複雜的分析操做,側重決策支持,而且提供直觀易懂的查詢結果。

相關文章
相關標籤/搜索