1.關系型數據庫 Relational Database
mysql、oracle、sqlserver
關系型數據庫的特點:
1.1 存儲方式:表格
1.2 存儲結構:先根據字段建立表---再用進行數據存儲,好處是:提前定義好了表的字段和類型,所以表的可靠性和穩定性都很高,缺點是:一旦有數據存入后,想修改表結構很困難。
1.3 擴展能力:由於關系型數據庫將數據存儲在數據表中,數據操作的瓶頸出現在多張數據表的操作中,而且數據表越多這個問題越嚴重,如果要緩解這個問題,只能提高處理能力,也就是選擇速度更快性能更高的計算機,這樣的方法雖然可以一定的拓展空間,但這樣的拓展空間一定有非常有限的,也就是關系型數據庫只具備縱向擴展能力。
1.4 查詢方式:結構化查詢語言(即SQL)來對數據庫進行查詢。
1.5 規范性:ORM層(也就是對象關系映射)來將數據庫中對象模型映射到基於SQL的關系型數據庫中去以及進行不同類型系統的數據之間的轉換。
1.6 事務性:關系型數據庫強調ACID規則(原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)、持久性(Durability))
原子性:原子性很容易理解,也就是說事務里的所有操作要么全部做完,要么都不做,事務成功的條件是事務里的所有操作都成功,只要有一個操作失敗,整個事務就失敗,需要回滾。
比如銀行轉賬,從A賬戶轉100元至B賬戶,分為兩個步驟:1)從A賬戶取100元;2)存入100元至B賬戶。這兩步要么一起完成,要么一起不完成,如果只完成第一步,第二步失敗,錢會莫名其妙少了100元。
一致性:指在事務開始之前和事務結束以后,數據庫的完整性約束沒有被破壞。這是說數據庫事務不能破壞關系數據的完整性以及業務邏輯上的一致性。
如A給B轉賬,不論轉賬的事務操作是否成功,其兩者的存款總額不變(這是業務邏輯的一致性,至於數據庫關系約束的完整性就更好理解了)。
隔離性:所謂的隔離性是指並發的事務之間不會互相影響,如果一個事務要訪問的數據正在被另外一個事務修改,只要另外一個事務未提交,它所訪問的數據就不受未提交事務的影響。
持久性:持久性是指一旦事務提交后,它所做的修改將會永久的保存在數據庫上,即使出現宕機也不會丟失。
1.7 讀寫性能:關系型數據庫十分強調數據的一致性,並為此降低讀寫性能付出了巨大的代價,雖然關系型數據庫存儲數據和處理數據的可靠性很不錯,但一旦面對海量數據的處理的時候效率就會變得很差,特別是遇到高並發讀寫的時候性能就會下降的非常厲害。
1.8 授權方式:關系型數據庫常見的有 Oracle,SQLServer,DB2,Mysql,除了Mysql大多數的關系型數據庫如果要使用都需要支付一筆價格高昂的費用,即使是免費的Mysql性能也受到了諸多的限制
2.非關系型數據庫
2.1 redis
Redis是一個key-value存儲系統,key為字符串類型,只能通過key對value進行操作,支持的數據類型包括string、list、set、zset(有序集合)和hash。Redis支持主從同步,數據可以從主服務器向任意數量的從服務器上同步。
Redis事務允許一組命令在單一步驟中執行。事務有兩個屬性:在一個事務中的所有命令作為單個獨立的操作順序執行;Redis事務是原子的,原子意味着要么所有的命令都執行,要么都不執行。Redis 事務由指令 MULTI 發起的,之后傳遞需要在事務中和整個事務中,最后由 EXEC 命令執行所有命令的列表。
Redis分區,是將數據分割成多個 Redis 實例,使每個實例將只包含鍵子集的過程.它允許更大的數據庫,使用多台計算機的內存總和,它允許按比例在多內核和多個計算機計算,以及網絡帶寬向多台計算機和網絡適配器。劣勢:涉及多個鍵時,Redis事務無法使用;數據處理比較復雜;加和刪除的容量可能會很復雜。
分區類型:范圍分區;散列分區
Redis 數據庫可以配置安全保護的,所以任何客戶端在連接執行命令時需要進行身份驗證。
2.2 MongodDB
2.3 Hbase
2.4 Neo4j