1. 什么是數據庫引擎
數據庫引擎:用於存儲、處理、保護數據的核心服務。
當你訪問數據庫時,不管是手工訪問,還是程序訪問,都不是直接讀寫數據庫文件,而是通過數據庫引擎去訪問數據庫文件
2. 數據庫引擎有幾種
Innodb 、 MyISAM 、MEMORY 、MERGE
3.myisam 和innodb的區別 5+3
InnoDB 提供事務支持,具有提交(commit)和回滾(rollback)事務的能力。 myisam不是
innodb 支持行級鎖(row-level locking)和表級鎖,默認為行級鎖 ,myisam鎖粒度是表級的
innodb 支持外鍵/mvcc,myisam 不行
使用 InnoDB 的數據庫在異常崩潰后,數據庫重新啟動的時候會保證數據庫恢復到崩潰前的狀態。這個恢復的過程依賴於 redo log,myisam 不行
myisam更簡單 ,效率上優於innodb ,小型應用考慮使用myisam
myisam表保存為文件的形式,在跨平台的數據轉移中使用myisam會更方便
補充:MyISAM 引擎和 InnoDB 引擎都是使用 B+Tree 作為索引結構,但是,兩者的實現方式不太一樣
MyISAM 引擎中,B+Tree 葉節點的 data 域存放的是數據記錄的地址。在索引檢索的時候,首先按照 B+Tree 搜索算法搜索索引,如果指定的 Key 存在,則取出其 data 域的值,
然后以 data 域的值為地址讀取相應的數據記錄。這被稱為“非聚簇索引”
InnoDB 引擎中,其數據文件本身就是索引文件。相比 MyISAM,索引文件和數據文件是分離的,其表數據文件本身就是按 B+Tree 組織的一個索引結構,樹的葉節點 data 域保存了完整的數據記錄。
這個索引的 key 是數據表的主鍵,因此 InnoDB 表數據文件本身就是主索引。這被稱為“聚簇索引(或聚集索引)”
而其余的索引都作為輔助索引(二級索引),輔助索引的 data 域存儲相應記錄主鍵的值而不是地址,這也是和 MyISAM 不同的地方。
在根據主索引搜索時,直接找到 key 所在的節點即可取出數據;在根據輔助索引查找時,則需要先取出主鍵的值,再走一遍主索引。
因此,在設計表的時候,不建議使用過長的字段作為主鍵,也不建議使用非單調的字段作為主鍵,這樣會造成主索引頻繁分裂
應用場景
4 對MySQL InnoDB的認識
特點是:
1、具有較好的事務支持:支持4個事務隔離級別,支持多版本讀
2、行級鎖定:通過索引實現,全表掃描仍然會是表鎖,注意間隙鎖的影響
3、讀寫阻塞與事務隔離級別相關
4、具有非常高效的緩存特性:能緩存索引,也能緩存數據
5、整個表和主鍵以Cluster方式存儲,組成一顆平衡樹
6、所有Secondary Index都會保存主鍵信息
適用場景:
1、需要事務支持(具有較好的事務特性)
2、行級鎖定對高並發有很好的適應能力,但需要確保查詢是通過索引完成
3、數據更新較為頻繁的場景
4、數據一致性要求較高
5、硬件設備內存較大,可以利用InnoDB較好的緩存能力來提高內存利用率,盡可能減少磁盤IO
事務表和非事務表
什么是事務表呢
事務表就是可以進行事務回滾操作, InnoDB是一種數據庫存儲引擎.他是事務型數據庫的首選引擎,支持ACID事務,支持行級鎖定。InnoDB是為處理巨大數據量時的最大性能設計。
InnoDB存儲引擎完全與MySQL服務器整合,InnoDB存儲引擎為在主內存中緩存數據和索引而維持它自己的緩沖池。
什么是非事務表
Nontransactional Tables,非事務表,不支持事務的表,也就是使用MyISAM存儲引擎的表。
非事務表的特點是不支持回滾
關系型數據庫(如mysql)與非關系型數據庫(如Redis)的區別
https://blog.csdn.net/xyphf/article/details/82832936
1.不同的數據存儲方法。
關系數據庫和非關系數據庫之間的主要區別在於數據的存儲方式。關系數據自然采用表格格式,因此存儲在數據表的行和列中。數據之間有關系,擅長復雜的SQL操作
可以方便的生成各種數據對象,利用存儲的數據建立窗體和報表,可視化較好
相反,非關系數據不適合存儲在數據表的行和列中,而是按大塊分組在一起。非關系數據通常存儲在數據集中,例如文檔,鍵值對或圖形結構。
適合處理海量數據。尤其是在做高並發業務的時候
如 Mongodb 存儲在磁盤,快速的查詢響應
數據結構變更或更新非常方便,不需要更改已有數據的數據結構
2.存儲擴展
這可能是兩者之間最大的區別,關系型數據庫是縱向擴展,也就是說想要提高處理能力,要使用速度更快的計算機。因為數據存儲在關系表中,操作的性能瓶頸可能涉及到多個表,需要通過提升計算機性能來克服。雖然有很大的擴展空間,但是最終會達到縱向擴展的上限。而Nosql數據庫是橫向擴展的,它的存儲天然就是分布式的,可以通過給資源池添加更多的普通數據庫服務器來分擔負載
3.對事務的支持是不同的。
關系型數據庫遵循ACID規則 由於關系型數據庫的數據強一致性,所以對事務的支持很好。關系型數據庫支持對事務原子性細粒度控制,並且易於回滾事務。
而Nosql數據庫 所以對事務的支持不是很好