什么是數據庫?
數據庫(Database)是按照數據結構來組織、存儲和管理數據的建立在計算機存儲設備上的倉庫。
數據庫如何分類?
數據庫通常分為層次式數據庫、網絡式數據庫和關系式數據庫三種。而不同的數據庫是按不同的數據結構來聯系和組織的。在當今的互聯網中,最常見的數據庫模型主要是兩種,即關系型數據庫和非關系型數據庫。
關系型數據庫比較
非關系型數據庫比較
下面看看一些常用的關系型數據庫
1、Neo4j
是一個高性能的 NoSQL 圖形數據庫,把數據保存為圖中的節點以及節點之間的關系。Neo4j 中兩個最基本的概念是節點和邊
節點表示實體,邊則表示實體之間的關系。節點和邊都可以有自己的屬性,不同實體通過各種不同的關系關聯起來,形成復雜的對象圖。
Neo4j 提供了在對象圖上進行查找和遍歷的功能:深度搜索、廣度搜索。
特點:
完整的ACID支持;高可用性;輕易擴展到上億級別的節點和關系;通過遍歷工具高速檢索數據;屬性是由Key-Value鍵值對組成。
應用:社交網絡,歌曲信息,狀態圖
2、Hbase
列式存儲以流的方式在列中存儲所有的數據。對於任何記錄,索引都可以快速地獲取列上的數據;列式存儲支持行檢索,但這需要從每個列獲取匹配的列值,並重新組成行。
HBase(Hadoop Database)是一個高可靠性、高性能、面向列、可伸縮的分布式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化存儲集群。
HBase是Google BigTable的開源實現,模仿並提供了基於Google文件系統的BigTable數據庫的所有功能。HBase可以直接使用本地文件系統或者Hadoop作為數據存儲方式,不過為了提高數據可靠性和系統的健壯性,發揮HBase處理大數據量等功能,需要使用Hadoop作為文件系統。HBase僅能通過主鍵(row key)和主鍵的range來檢索數據,僅支持單行事務,主要用來存儲非結構化和半結構化的松散數據。
Hbase中表的特點:大,稀疏,面向列
3、MongodDB
一個基於分布式文件存儲的開源數據庫系統,為WEB應用提供可擴展的高性能數據存儲解決方案。MongoDB 將數據存儲為一個文檔,數據結構由鍵值(key value)對組成。
特點:
面向集合存儲,易存儲對象類型的數據;模式自由;支持動態查詢;支持完全索引,包含內部對象;支持查詢;支持復制和故障恢復;使用高效的二進制數據存儲,包括大型對象(如視頻);自動處理碎片,以支持雲計算層次的擴展性;支持RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言;文件存儲格式為BSON(一種JSON的擴展);可通過網絡訪問。
適用場景:網站數據;緩存;大尺寸,低價值的數據;高伸縮性的場景;用於對象及JSON 數據的存儲。
不適用場景:高度事務性的系統;傳統的商業智能應用;需要SQL 的問題。
4、Redis
Redis是一個key-value存儲系統,key為字符串類型,只能通過key對value進行操作,支持的數據類型包括string、list、set、zset(有序集合)和hash。Redis支持主從同步,數據可以從主服務器向任意數量的從服務器上同步。
Redis事務允許一組命令在單一步驟中執行。事務有兩個屬性:在一個事務中的所有命令作為單個獨立的操作順序執行;Redis事務是原子的,原子意味着要么所有的命令都執行,要么都不執行。
Redis 事務由指令 MULTI 發起的,之后傳遞需要在事務中和整個事務中,最后由 EXEC 命令執行所有命令的列表。
舉個例子:假設我們用關系型數據設計出以下學生選課的數據庫
對比一下優點缺點
5、NewSQL
是對各種新的可擴展/高性能數據庫的簡稱。具有NoSQL對海量數據的存儲管理能力,保持了傳統數據庫支持ACID和SQL等特性。
NewSQL共同特點:支持關系數據模型;使用SQL作為其主要的接口。