關係型數據,非關係型數據庫和文檔型數據庫

關係型數據和文檔型數據庫有什麼區別?

關係數據庫(Relational Database)是創建在關係模型基礎上的數據庫,藉助於幾何代數等數學概念和方法來處理數據庫中的數據。所謂關係模型是一對1、一對多或者多對多等關係支持事務和持久化,關係型數據庫都會支持的 ACID 特性,也就是原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持久性(Durability),通常遵循三範式設計思想,常見的關係型數據庫有 Oracle、SQL Server、DB二、MySQL 等。java

而文檔型數據庫是一種非關係型數據庫,非關係型數據庫(Not Only SQL,NoSQL)正好與關係型數據庫相反,它不是創建在「關係模型」上的數據庫。文檔型數據庫的典型表明是 MongoDB。面試

非關係型數據庫和文檔型數據庫有什麼區別?

非關係型數據和文檔型數據庫屬於包含關係,非關係型數據包含了文檔型數據庫,文檔型數據庫屬於非關係型數據。redis

非關係型數據一般包含 3 種數據庫類型:文檔型數據庫、鍵值型數據庫和全文搜索型數據庫,下面分別來看每種類型的具體用途。mongodb

1. 文檔型數據庫

文檔型數據庫以 MongoDB 和 Apache CouchDB 爲表明,文檔型數據庫一般以 JSON 或者 XML 爲格式進行數據存儲。數據庫

以 MongoDB 爲例,它是由 C++ 編寫的一種面向文檔的數據庫管理系統,在 2007 年 10 月 由 10gen 團隊所開發,並在 2009 年 2 月首度推出。MongoDB 是以二進制 JSON 格式存儲數據的,MongoDB 對 JSON 作了一些優化,它支持了更多的數據類型,這種二進制存儲的 JSON 咱們也能夠稱之爲 BSON(Binary JSON)。數組

BSON 具有三個特色:輕量、可遍歷以及高效,它的缺點是空間利用率不是很理想。MongoDB 使用 BSON 進行存儲的另外一個重要緣由是 BSON 具有可遍歷性緩存

MongoDB 存儲結構示例以下:數據結構

{"_id":ObjectId(「57ce2d4cce8685a6fd9df3a3"),"name":"老王","email":['java@qq.com','java@163.com']}

其中,「_id」爲 MongoDB 默認的主鍵字段,它會爲咱們生成一塊兒全局惟一的 id 值,而且這個值在作數據分片時很是有用。分佈式

文檔型數據庫的使用場景以下。性能

敏捷開發,由於 MongoDB 擁有比關係型數據庫更快的開發速度,所以不少敏捷開發組織,包括紐約時報等都採用了 MongoDB 數據庫。使用它能夠有效地避免在增長和修改數據庫帶來的溝通成本,以及維護和建立數據庫模型成本,使用 MongoDB 只須要在程序層面嚴格把關就行,程序提交的數據結構能夠直接更新到數據庫中,並不須要繁雜的設計數據庫模型再生成修改語句等過程。
• 日誌系統,使用 MongoDB 數據庫很是適合存儲日誌,日誌對應到數據庫中就是不少個文件,而 MongoDB 更擅長存儲和查詢文檔,它提供了更簡單的存儲和更方便的查詢功能。
• 社交系統,使用 MongoDB 能夠很方便的存儲用戶的位置信息,能夠方便的實現查詢附近的人以及附近的地點等功能。

2. 鍵值型數據庫

鍵值數據庫也就是 Key-Value 數據庫,它的典型表明數據庫是 Redis 和 Memcached,而它們一般被當作非持久化的內存型數據庫緩存來使用。固然 Redis 數據庫是具有可持久化得能力的,可是開啓持久化會下降系統的運行效率,所以在使用時須要根據實際的狀況,選擇開啓或者關閉持久化的功能。

鍵值型數據庫以極高的性能著稱,且除了 Key-Value 字符串類型以外,還包含一些其餘的數據類型。以 Redis 爲例,它提供了字符串類型(String)、列表類型(List)、哈希表類型(Hash)、集合類型(Set)、有序集合類型(ZSet)等五種最經常使用的基礎數據類型,還有管道類型(Pipeline)、地理位置類型(GEO)、基數統計類型(HyperLogLog)和流類型(Stream),而且還提供了消息隊列的功能。

此數據庫的優勢是性能比較高,缺點是對事務的支持不是很好。

3. 全文搜索型數據庫

傳統的關係型數據庫主要是依賴索引來實現快速查詢功能的,而在全文搜索的業務下,索引很難知足查詢的需求。由於全文搜索須要支持模糊匹配的,當數據量比較大的狀況下,傳遞的關係型數據庫的查詢效率是很是低的;另外一個緣由是全文搜索須要支持多條件隨意組合排序,若是要經過索引來實現的話,則須要建立大量的索引,而傳統型數據庫也很難實現,所以須要專門全文搜索引擎和相關的數據庫才能實現此功能。

全文搜索型數據庫以 ElasticSearch 和 Solr /sɔ:lʌ/爲表明,它們的出現解決了關係型數據庫全文搜索功能較弱的問題。

MongoDB 

談談你對mongodb的理解?特性?mongodb用來作什麼的?

是一個基於分佈式文件存儲的數據庫(文檔型數據庫),介於關係型和非關係型數據庫間。它支持的數據結構相似於JSON的BSON格式,所以能夠存儲比較複雜的數據類型

Mongodb最大的特色是它支持的查詢語言很是強大,支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。MongoDB 將數據存儲爲一個文檔,數據結構由鍵值(key=>value)對組成。MongoDB 文檔相似於 JSON 對象。字段值能夠包含其餘文檔,數組及文檔數組

使用場景:

• 敏捷開發,由於 MongoDB 擁有比關係型數據庫更快的開發速度,所以不少敏捷開發組織,包括紐約時報等都採用了 MongoDB 數據庫。使用它能夠有效地避免在增長和修改數據庫帶來的溝通成本,以及維護和建立數據庫模型成本,使用 MongoDB 只須要在程序層面嚴格把關就行,程序提交的數據結構能夠直接更新到數據庫中,並不須要繁雜的設計數據庫模型再生成修改語句等過程。
• 日誌系統,使用 MongoDB 數據庫很是適合存儲日誌,日誌對應到數據庫中就是不少個文件,而 MongoDB 更擅長存儲和查詢文檔,它提供了更簡單的存儲和更方便的查詢功能。
• 社交系統,使用 MongoDB 能夠很方便的存儲用戶的位置信息,能夠方便的實現查詢附近的人以及附近的地點等功能。

mongodb和redis區別?

(1)  Mongodb在4.0前不支持事務,靠客戶端保證,redis支持事務。

(2) Redis 支持的數據結構豐富, MongoDB 數據結構比較單一,可是支持豐富的數據表達

(3) mongodb適用於存儲海量數據,redis不適合存儲海量數據(受物理內存限制)。

MongoDB 支持事務嗎?

MongoDB 在 4.0 以前是不支持事務的,不支持的緣由也很簡單,由於文檔型數據庫和傳統的關係型數據庫不同,不須要知足三範式。文檔型數據庫之因此性能比較高的另外一個主要緣由,就是使用文檔型數據庫不用進行多表關聯性查詢,由於文檔型數據庫會把相關的信息存放到一張表中。所以,無需關聯多表查詢的 MongoDB,在這種狀況下的查詢性能是比較高的。

把全部相關的數據都放入一個表中,這也是 MongoDB 以前很長一段時間內不支持事務的緣由,它能夠保證單表操做的原子性,一條記錄要麼成功插入,要麼插入失敗,不會存在插入了一半的數據。所以,在這種設計思路下,MongoDB 官方認爲「事務功能」的實現沒有那麼緊迫。

但在 MongoDB 4.0 之中正式添加了事務的功能,而且在 MongoDB 4.2 中實現了分佈式事務的功能,至此 MongoDB 開啓了支持事務之旅。

常見面試題

關係型數據和文檔型數據庫有什麼區別?

談談你對mongodb的理解?特性?mongodb用來作什麼的?(藍月亮1-3)

mongodb和redis區別?(藍月亮1-3)

參考/好文:

拉鉤教育 -- https://kaiwu.lagou.com/course/courseInfo.htm?courseId=59#/detail/pc?id=1778

相關文章
相關標籤/搜索