數據庫管理系統
前言
1、數據的定義:文字、圖像、地理位置信息(坐標、經緯度)等
2、數據庫管理系統的定義:建立、存取和管理數據,保證數據安全和完整性的軟件
3、常見的數據庫管理系統:
關系型:MySQL、Oracle、SQL Server、Db2等
非關系型:MongoDB、Redis、HBase等
NOSQL簡介
NoSQL=Not Only SQL,支持類似SQL的功能, 與Relational Database相輔相成。
其適用於性能較高,不使用SQL意味着沒有結構化的存儲要求(SQL為結構化的查詢語句),沒有約束之后架構更加靈活。
NoSQL數據庫四大家族
列存儲:Hbase
鍵值(Key-Value)存儲:Redis
圖像存儲:Neo4J
文檔存儲:MongoDB
NoSQL的優勢
高可擴展性、分布式計算、沒有復雜的關系、低成本、架構靈活、半結構化數據。
MongoDB
MongoDB特性
MongoDB與RDBMS的最大區別:
沒有固定的行列組織數據結構,即無需將不同類的數據放入多張表中建立對應關系並分別存儲其數據,而是直接放入一份文檔進行存儲。
數據存儲格式
JSON
MongoDB使用JSON(JavaScript ObjectNotation)文檔存儲記錄
JSON數據庫語句可以容易被解析
Web應用大量使用
NAME-VALUE配對
BSON
二進制的JSON,JSON文檔的二進制編碼存儲格式
BSON有JSON沒有的Date和BinData
MongoDB中document以BSON形式存放
{ _id: ObjectID("1"), username: “Silence”, regDate: “10-10-2015”, scores: { math: "80", english: "200" } }
MongoDB優勢
存儲引擎比較
MySQL InnoDB |
MongoDB MAPI |
MongoDB WiredTiger |
|
事務 |
YES |
NO |
NO |
鎖粒度 |
ROW-level行級鎖 |
Collection-level |
Document-level |
Geospatial |
YES |
YES |
YES |
MVCC |
YES |
NO |
NO |
Replication |
YES |
YES |
YES |
外鍵 |
YES |
NO |
NO |
數據庫集群 |
NO |
YES |
YES |
B-TREE索引 |
YES |
YES |
YES |
全文檢索 |
YES |
YES |
YES |
數據壓縮 |
YES |
NO |
YES |
存儲限制 |
64TB |
NO |
NO |
表分區 |
YES |
YES(分片) |
YES(分片) |
數據邏輯結構
文檔(document)、集合(collection)、數據庫(database)
MongoDB與RDBMS數據結構邏輯對比:
MongoDB |
RDBMS |
集合Collection |
表Table |
文檔Document |
行Row |
數據庫Database |
數據庫Database |
索引值Index |
索引值Index |
嵌入式文件Embedded Document |
合並Join |
引用Reference |
外鍵Foreign Key |
分片Shard |
分區Partition |
MongoDB適用場景
- 網站數據:MongoDB 非常適合實時的插入,更新與查詢,並具備網站實時數據存儲所需的復制及高度伸縮性
- 緩存:由於性能很高,MongoDB 也適合作為信息基礎設施的緩存層。在系統重啟之后,由 MongoDB 搭建的持久化緩存層可以避免下層的數據源過載
- 大尺寸,低價值的數據:使用傳統的關系型數據庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲
- 高伸縮性的場景:MongoDB 非常適合由數十或數百台服務器組成的數據庫。MongoDB的路線圖中已經包含對 MapReduce 引擎的內置支持
- 用於對象及 JSON 數據的存儲:MongoDB 的 BSON 數據格式非常適合文檔化格式的存儲及查詢
我的數據量是有億萬級或者需要不斷擴容 需要2000-3000以上的讀寫每秒 新應用,需求會變,數據模型無法確定 我需要整合多個外部數據源 我的系統需要99.999%高可用 我的系統需要大量的地理位置查詢 我的系統需要提供最小的latency 我要管理的主要數據對象 <10
以上條件滿足一個可以考慮MongoDB,滿足兩個選擇MongoDB不會后悔。