摘要:可水平擴展,可以添加更多服務器來擴展您的數據庫需要管理員是否開發人員和管理員都可以使用適用場景會計師事務所和銀行,以及需要具有清晰架構的結構化數據的其他公司。
今天的主題是從MongoDB漫談數據庫,在日常的項目中,我們一般都是使用的mysql作為數據庫,但是一旦有問題,又常常會聽到類似“要不換成MongoDB試試”的聲音,因此就讓我們這些小白來隨便聊聊數據庫
什么是數據庫我們就用最簡單的話來說,數據庫,就是保存數據的一個倉庫
數據庫(Database)的基本概念數據庫就是按照一定的數據結構來組織,儲存和管理數據的倉庫
我們寫的程序都是在內存中運行的,一旦程序運行結束或者計算機斷點,程序運行中的數據就會全部丟失;所以我們就需要將一些程序的數據持久化到硬盤中,以確保數據的安全性。
數據庫則是大批量數據持久化的普遍選擇,1.文件 2. 數據庫
為什么用數據庫存儲數據數據庫是有結構的
數據庫可以提供各種接口,讓數據處理(增刪改查)快捷方便
各種語言(PHP、jsp、.net..)提供了完善的接口
數據庫流行度(來源:https://db-engines.com/en/ranking)
從統計的數據中可以看出,最受歡迎的DBMS是“關系型”,前五名中占據了四位,把數據擴大到前十,關系型數據庫也占到了七位之多。
為什么大多數程序員更喜歡使用MySQL?開源,只有企業才需要購買許可證
具有廣泛的用途:可廣泛用于大多數平臺,如Linux,Windows,Ubuntu,Mac OS X等
易于使用
可靠的:多年來一直經過試驗和測試
適用于PHP(PHP天下第一),也可以與其他編程語言一起使用,如JAVA,PERL,C,C ++等
適用于小型和大型應用
那么關系型數據庫這么好為什么前五名中還會出現MongoDB的身影呢,我們來看一下
關系數據庫和MySQL的缺點是什么?可伸縮性:向特定記錄添加更多數據可能涉及擴展到多個表,列和行,而因為數據是按行存儲,即使只針對其中某一列進行運算,關系型數據庫也會將整行數據從存儲設備中讀入內存,導致I/O較高
由第一條產生而來的一個缺陷就是無法存儲數據結構
速度:由于數據結構的問題倒是分析數據時需要一定的時間,另外只能夠進行子字符串的匹配查詢,當表的數據逐漸變大的時候,like查詢的匹配會非常慢,即使在有索引的情況下
在使用之前,需要先編寫架構以定義表,同時表結構schema擴展不方便 如要需要修改表結構,需要執行執行DDL(data definition language),語句修改,修改期間會導致鎖表
是什么讓MongoDB如此吸引人?靈活性:文檔結構更符合開發人員在各自編程語言中的編碼方式,這些編程語言在鍵值對中是清晰且結構化的,這樣可以隨時輕松添加和編輯數據/文檔
支持各種查詢:字段,表達式,范圍查詢,JavaScript函數等
更快的周轉時間:因為存儲在MySQL數據庫中的多個表中的相關數據存儲在MongoDB中的同一文檔中
沒有嚴格的模式:可以在定義文檔結構之前先創建文檔
MongoDB的功能使它更適合處理大量數據
先讓我們來比較一下兩者再來詳細說明
MySQL | MongoDB | |
---|---|---|
版本 | 1995- 2018(mysql 8.0) | 2009 |
結構 | 關系型 | 非關系型 |
靈活性 | 弱,需要在使用之前先定義數據庫模式 | 與MySQL相比具有相當大的靈活性 - 定義不需要的模式 |
可擴展性 | 可以,但是比較困難,MySQL數據庫可以垂直擴展,可以向單個服務器添加更多資源 | 比MySQL更具可擴展性。MongoDB可水平擴展,可以添加更多服務器來擴展您的數據庫 |
需要DB管理員 | 是 | 否 - 開發人員和管理員都可以使用 |
適用場景 | 會計師事務所和銀行,以及需要具有清晰架構的結構化數據的其他公司。非常適合具有或多或少固定要求的企業(twitter例外) | 具有實時數據,物聯網,內容管理,移動應用,社交網絡,面向大數據/網絡分析的系統以及不需要具有清晰架構或其架構的結構化數據的業務的理想選擇不斷變化 |
首先說說靈活性,舉個列子,一個商城里面會有許多的商品,而這些商品都是有自己獨特的屬性的,比如電視有屏幕尺寸、屏幕分辨率,而空調有制冷類型、外機噪音等屬性,要把它們放到產品表里是非常困難的,額外增加了程序員對于數據表設計的工作,而MongoDB沒有Schema(模式、數據模型)就會顯得很簡單。
MongoDB 的靈活還體現在非結構化和半結構化的數據上。MongoDB 提供全文索引,也支持地理位置查詢和索引。例如一位用戶想知道方圓五公里哪里有公共衛生間,這是「地理范圍查詢」。然后他搜索最近的單車。摩拜單車正是使用 MongoDB 完成這樣的「距離排序查詢」。
可擴展性數據一臺機器放不下了,就需要sharding(分片)把它放到好幾臺機器上去。分片是MongoDB多年以來的原生功能,與MongoDB其他功能高效整合。
例如,分片集群中一個復雜的聚合查詢會自動地根據 Shard Key(片鍵)分配到多個結點上運行,盡可能將計算任務下推到數據結點上,最后在一個結點上聚合所有結點的結果。分片還可以在各個結點間自動遷移數據,均衡其數據量。同時配合著MongoDB的復制(副本集)技術,可以有效的避免數據的丟失(在測試的時候發現mongo會自動發現副本集的所有機器地址,當一臺Mongo被停掉時,連接的Server不會報錯)
MongoDB中使用分片集群結構分布:
眾所周知,MongoDB占用了大量的服務器內存
MongoDB在安全性上略微會差一點
過于自由靈活的文件存儲格式帶來的數據錯誤(。。。。。。)
單個文檔大小限制為16 M
對于數組型的數據操作不夠豐富
什么時候選擇MongoDB說了這么多狗屎一樣總結的話,最重要的就是我們在什么時候選擇使用MongoDB
日志系統,系統運行過程中產生的日志信息,一般種類較多、范圍較大、內容也比較雜亂。通過MongoDB可以將這些雜亂的日志進行收集管理
地理位置存儲,MongoDB支持地理位置、二維空間索引,可以存儲經緯度,因此可以很快的計算出兩點之間的距離,等位置信息
數據規模增長很快(比如供給的關注信息)
需要保證高可用的環境
文件存儲需求
其他場景,如游戲開發中可以通過MongoDB存儲用戶信息、裝備、積分等,除此之外物流系統、社交系統、甚至物聯網系統
數據庫的類型說了這么多,為什么我們會把mysql和MongoDB放在一起比較進行選擇,就是因為它們是不同類型的數據庫,從數據庫發展至今,大致上分為三種類型
RDBMS(關系型數據庫)首先要提到的一定是我們最熟悉的mysql數據庫所屬于的關系型數據庫。
關系型數據庫的特點:
比如MySql 、sql server Oracle 等
特點 通過一張張表來建立關聯
基本都使用SQL語言來管理數據庫
Nosql (非關系型數據庫)NoSql,也就是MongoDB的數據庫類型,源自2009年在San Francisco舉辦的一次Meetup,在該Meetup上出現了NoSql技術的描述:open source, distributed, non relational databases
非關系型數據庫的特點:
沒有行 、列的概念 用json類儲存數據
集合相當于“表”,文檔相當于“行”
標準化和非標準化的摩擦。
標準化限制創新,非標準話不能統一
NoSql在剛提出的時候被解釋成Non-Relational,也有No-sql的意思,但是隨著近些年的快速發展,SQL已經逐步被應用在了更廣泛的領域,因此,SQL已不再是RDBMS的專屬特征,NoSql技術體系中也引入了SQL能力,因此而演變出來了Not-Only-SQL的概念
大多數NoSql技術,弱化了對ACID語義以及復雜關聯查詢的支持,采用了更加簡潔或更加專業的數據模型,優化了讀寫路徑,從而能夠換取更高的讀寫性能
NewSql根據wiki中的定義
NewSQL is a class of modern relational database management systems that seek to provide the same scalable performance of NoSQL systems for online transaction processing (OLTP) read-write workloads while still maintaining the ACID guarantees of a traditional database system.
NewSql可以說是傳統的RDBMS與NoSql技術結合之下的產物,因此,可以將典型NewSql技術理解成分布式關系型數據庫,能夠支持分布式事務是一個基本前提。NoSQL與NewSQL在技術棧上有很多重疊,但在是否支持關系型模型及對復雜事務的支持力度上是存在明顯區別的。因為本人不了解,所以這里不做多說。
這里我只是簡單的介紹一下數據庫的類型,對于一種存儲技術屬于NoSql或者NewSql,亦或是RDBMS是不能簡單歸類的,畢竟技術是在不斷進步的,比如MySQL現在也兼容了nosql的特性:
或者有的人會奇怪為什么在介紹MongoDB的缺點時沒有提事務的事,這是因為在2018年夏季的MongoDB4.0版本中,MongoDB引入了事務功能,支持多文檔ACID特性,例如使用mongo shell進行事務操作
具體壓測數據后期補上
參考文章:《MongoDB vs MySQL : Understanding the difference》——Tanya Noronha
《NewSQL是否是NoSQL的取代者?》——Jaison
《MongoDB 4.0 事務實現解析》——張友東
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/19438.html
摘要:在日本,公司的一種移動互聯網模式,卻取得了令世人矚目的成績。自從于年月推出以來,日本已經成為世界上發展最快的互聯網市場。在全世界也受到關注因為它是第一個符合標準的移動數據服務,而且完完全全是日本的。 1978年貝爾實驗室的科學家們在美國芝加哥試驗成功了世界上第一個蜂窩移動通信系統,并...
摘要:當前隨著國內外云計算廠商對于不同服務模式的不斷探索已經使得整個云計算市場實現了快速增長尤其是對于像混合云這類高復雜的應用來說確實在很大程度上推動了國內整個云產業的利潤增長。近些年,國內的云計算市場已經呈現出了多行業深度化應用的發展態勢,特別是隨著物聯網等技術快速發展,帶動了私有云、公有云等云計算市場的快速發展,越來越多的城市開始開展試點工作,在電力、物流、交通、智慧城市、環保、醫療、教育等很...
摘要:前言在學習前端的時候,我總是能聽到很多高級詞匯,比如今天會聊到的函數式編程高階函數。接下來我們看看,高階函數有可能會遇到的問題,又如何去解決。 前言 在學習前端的時候,我總是能聽到很多高級詞匯,比如今天會聊到的 函數式編程(Functional Programming) & 高階函數 (Higher-order function) 。但是當你真正的理解什么是 函數式編程 & 高階函數 ...
閱讀 2133·2023-04-26 03:06
閱讀 3580·2023-04-26 01:51
閱讀 2086·2021-11-24 09:38
閱讀 2452·2021-11-17 17:00
閱讀 2324·2021-09-28 09:36
閱讀 941·2021-09-24 09:47
閱讀 2587·2019-08-30 15:54
閱讀 1554·2019-08-30 15:44