數據庫使用系列專欄:數據庫使用系列文章
目錄
1 數據庫分類
數據庫根據數據結構可分為關系型數據庫和非關系型數據庫。非關系型數據庫中根據應用場景又可分為鍵值(Key-Value)數據庫、列存儲數據庫、面向文檔數據庫、搜索引擎數據庫等。
1.1 關系型數據庫
這種類型的數據庫是最古老的數據庫類型,關系型數據庫模型是把復雜的數據結構歸結為簡單的二元關系(即二維表格形式), 如圖2是一個二維表的實例。通常該表第一行為字段名稱,描述該字段的作用,下面是具體的數據。在定義該表時需要指定字段的名稱及類型。
圖一 數據庫表實例
在關系型數據庫中,對數據的操作幾乎全部建立在一個或多個關系表格上。在大型系統中通常有多個表,且表之間有各種關系。實際使用就是通過對這些關聯的表格分類、合并、連接或選取等運算來實現數據庫的管理。
典型產品:MySQL、、Oracle、、SQLite等。
1.2 非關系型數據庫
鍵值存儲數據庫
鍵值數據庫是一種非關系數據庫,它使用簡單的鍵值方法來存儲數據。鍵值數據庫將數據存儲為鍵值對集合,其中鍵作為唯一標識符。
圖2 鍵值存儲數據示意圖
如圖2是某公有云的鍵值存儲示意圖,其中鍵包含分區鍵和排序鍵,而值包含更多的實際信息。比如實際使用是可以以學號為鍵,姓名、性別、年齡和班級等信息為值進行存儲。實際存儲形式很靈活,是業務需求自行定義即可。
典型產品:Redis、等。
列存儲數據庫
列式存儲(column-based)是相對于傳統關系型數據庫的行式存儲(Row-)來說的。簡單來說兩者的區別就是對表中數據的存儲形式的差異。
圖3列存儲數據
如圖3是傳統行數據庫和列數據庫表中數據在磁盤上的存儲形式的差異對比。對于行存儲數據庫,表中的數據是以行為單位逐行存儲在磁盤上的;而對于列存儲數據庫,表中的數據則是以列為單位逐列存儲在磁盤中。
列存儲解決的主要問題是數據查詢問題。我們知道,平時的查詢大部分都是條件查詢,通常是返回某些字段(列)的數據。對于行存儲數據,數據讀取時通常將一行數據完全讀出,如果只需要其中幾列數據的情況,就會存在冗余列,出于縮短處理時間的考量,消除冗余列的過程通常是在內存中進行的。而列存儲,每次讀取的數據是集合的一段或者全部,不存在冗余性問題。這樣,通過這種存儲方式的調整,使得查詢性能得到極大的提升。
典型產品:HBase等。
面向文檔數據庫
此類數據庫可存放并獲取文檔,可以是XML、JSON、BSON等格式,這些文檔具備可述性(self-),呈現分層的樹狀結構( tree data ),可以包含映射表、集合和純量值。數據庫中的文檔彼此相似,但不必完全相同。文檔數據庫所存放的文檔,就相當于鍵值數據庫所存放的“值”。文檔數據庫可視為其值可查的鍵值數據庫。
典型產品:MongDB、CouchDB等。
圖形數據庫
圖形數據庫顧名思義,就是一種存儲圖形關系的數據庫。圖形數據庫是NoSQL數據庫的一種類型,它應用圖形理論存儲實體之間的關系信息。關系型數據用于存儲明確關系的數據,但對于復雜關系的數據存儲卻有些力不從心。如圖4這種人物之間的關系,如果用關系型數據庫則非常復雜,用圖形數據庫將非常簡單。
圖4 圖形數據庫示例
典型產品:Neo4J、InfoGr id等。
搜索引擎存儲
搜索引擎數據庫是應用在搜索引擎領域的數據存儲形式,由于搜索引擎會爬取大量的數據,并以特定的格式進行存儲,這樣在檢索的時候才能保證性能最優。
典型產品:Solr、等。
2 數據庫對比
幾種主流關系型數據庫對比:
數據庫
優勢
缺點
MySQL
1)MySQL性能卓越,服務穩定,很少出現異常宕機。
2)MySQL開放源代碼且無版權制約,自主性及使用成本低,版本更新較快。
3)MySQL軟件體積小,安裝使用簡單,并且易于維護,安裝及維護成本低。
4)MySQL支持多種操作系統,提供多種API接口,支持多種開發語言,特別對流行的PHP語言有很好的支持。
數據量大時處理性能不及Oracle
1)真正的客戶機/服務器體系結構
2)圖形化的用戶界面,使系統管理和數據庫管理更加直觀、簡單
3)豐富的編程接口工具,為用戶進行程序設計提供了更大的選擇余地
4)與WinNT完全集成,利用了NT的許多功能,如發送和接受消息,管理登錄安全性等,SQL Server也可以很好地與 產品集成。
5)提供數據倉庫功能,這個功能只在Oracle和其他昂貴的DBMS中才有。
只能在Windows系統下運行
Oracle
1)Oracle 能在所有主流平臺上運行
2)Oracle 性能高,保持開放平臺下TPC-D和TPC-C世界記錄
3)獲得最高認證級別的ISO標準認證
價格昂貴
1) 的穩定性極強, Innodb 等引擎在崩潰、斷電之類的災難場景下抗打擊能力有了長足進步。
2)PG 性能高速度快。任何系統都有它的性能極限,在高并發讀寫,負載逼近極限下,PG的性能指標仍可以維持雙曲線甚至對數曲線,到頂峰之后不再下降。
3)PG 多年來在 GIS 領域處于優勢地位,因為它有豐富的幾何類型,實際上不止幾何類型,PG有大量字典、數組、bitmap 等數據類型。
4) 是唯一支持事務、子查詢、多版本并行控制系統、數據完整性檢查等特性的唯一的一種自由軟件的數據庫管理系統
5)PG對數據量大的文本以及SQL處理較快
SQLite
1)零配置,SQlite3不用安裝,不用配置,不用啟動,關閉或者配置數據庫實例。當系統崩潰后不用做任何恢復操作,再下次使用數據庫的時候自動恢復
2)SQLite是被設計成輕量級,自包含的,不依賴服務進程
3)采用無數據類型,所以可以保存任何類型的數據,SQLite采用的是動態數據類型,會根據存入值自動判斷
4)可移植,可運行在不同操作系統上
數據量不宜過大,sql語句執行相比其他數據庫效率較低
幾種主流非關系型數據庫對比:
數據庫
優勢
缺點
Redis
1)支持內存緩存,這個功能相當于
2)支持持久化存儲,這個功能相當于,
3)數據類型更豐富。比其他key-value庫功能更強
4)支持主從集群,分布式
5)支持隊列等特殊功能
開源的、高性能的、具有分布式內存對象的純緩存系統
不支持持久化
HBase
1)適合存儲半結構化或非結構化數據
2)高可用和海量數據以及很大的瞬間寫入量
3)記錄很稀疏,RDBMS的行有多少列是固定的,為null的列浪費了存儲空間。HBase為null的Column不會被存儲,這樣既節省了空間又提高了讀性能。
1)不適合于大范圍掃描查詢
2)不直接支持 SQL 的語句查詢
MongoDB
1)弱一致性(最終一致),更能保證用戶的訪問速度
2)查詢與索引方式靈活,是最像SQL的Nosql
3)內置GridFS,支持大容量的存儲
4)內置,支持復制集、主備、互為主備、自動分片等特性
5)第三方支持豐富 6)性能優越
1)單機可靠性比較差 2)磁盤空間占用比較大
3)大數據量持續插入,寫入性能有較大波動
架構設計有一句流行語:不以業務模型為基礎的架構設計都是耍流氓。同樣數據庫選型也應該根據自己業務需求選擇最適合自己的數據庫。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。