MongoDB到數(shù)據(jù)庫的使用?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
成都創(chuàng)新互聯(lián)是專業(yè)的邊壩網(wǎng)站建設(shè)公司,邊壩接單;提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作,網(wǎng)頁設(shè)計,網(wǎng)站設(shè)計,建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進行邊壩網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!今天的主題是從MongoDB漫談數(shù)據(jù)庫,在日常的項目中,我們一般都是使用的mysql作為數(shù)據(jù)庫,但是一旦有問題,又常常會聽到類似“要不換成MongoDB試試”的聲音,因此就讓我們這些小白來隨便聊聊數(shù)據(jù)庫
我們就用最簡單的話來說,數(shù)據(jù)庫,就是保存數(shù)據(jù)的一個倉庫
數(shù)據(jù)庫就是按照一定的數(shù)據(jù)結(jié)構(gòu)來組織,儲存和管理數(shù)據(jù)的倉庫
我們寫的程序都是在內(nèi)存中運行的,一旦程序運行結(jié)束或者計算機斷點,程序運行中的數(shù)據(jù)就會全部丟失;所以我們就需要將一些程序的數(shù)據(jù)持久化到鍵盤之中,以確保數(shù)據(jù)的安全性。
數(shù)據(jù)庫則是大批量數(shù)據(jù)持久化的普遍選擇,1.文件 2. 數(shù)據(jù)庫
數(shù)據(jù)庫是有結(jié)構(gòu)的
數(shù)據(jù)庫可以提供各種接口,讓數(shù)據(jù)處理(增刪改查)快捷方便
各種語言(PHP、jsp、.net..)提供了完善的接口
數(shù)據(jù)庫流行度(來源:https://db-engines.com/en/ranking)
從統(tǒng)計的數(shù)據(jù)中可以看出,最受歡迎的DBMS是“關(guān)系型”,前五名中占據(jù)了四位,把數(shù)據(jù)擴大到前十,關(guān)系型數(shù)據(jù)庫也占到了七位之多。
開源,只有企業(yè)才需要購買許可證
具有廣泛的用途:可廣泛用于大多數(shù)平臺,如Linux,Windows,Ubuntu,Mac OS X等
易于使用
可靠的:多年來一直經(jīng)過試驗和測試
適用于PHP(PHP天下第一),也可以與其他編程語言一起使用,如JAVA,PERL,C,C ++等
適用于小型和大型應(yīng)用
那么關(guān)系型數(shù)據(jù)庫這么好為什么前五名中還會出現(xiàn)MongoDB的身影呢,我們來看一下
可伸縮性:向特定記錄添加更多數(shù)據(jù)可能涉及擴展到多個表,列和行,而因為數(shù)據(jù)是按行存儲,即使只針對其中某一列進行運算,關(guān)系型數(shù)據(jù)庫也會將整行數(shù)據(jù)從存儲設(shè)備中讀入內(nèi)存,導(dǎo)致I/O較高
由第一條產(chǎn)生而來的一個缺陷就是無法存儲數(shù)據(jù)結(jié)構(gòu)
速度:由于數(shù)據(jù)結(jié)構(gòu)的問題倒是分析數(shù)據(jù)時需要一定的時間,另外只能夠進行子字符串的匹配查詢,當(dāng)表的數(shù)據(jù)逐漸變大的時候,like查詢的匹配會非常慢,即使在有索引的情況下
在使用之前,需要先編寫架構(gòu)以定義表,同時表結(jié)構(gòu)schema擴展不方便 如要需要修改表結(jié)構(gòu),需要執(zhí)行執(zhí)行DDL(data definition language),語句修改,修改期間會導(dǎo)致鎖表
靈活性:文檔結(jié)構(gòu)更符合開發(fā)人員在各自編程語言中的編碼方式,這些編程語言在鍵值對中是清晰且結(jié)構(gòu)化的,這樣可以隨時輕松添加和編輯數(shù)據(jù)/文檔
支持各種查詢:字段,表達(dá)式,范圍查詢,JavaScript函數(shù)等
更快的周轉(zhuǎn)時間:因為存儲在MySQL數(shù)據(jù)庫中的多個表中的相關(guān)數(shù)據(jù)存儲在MongoDB中的同一文檔中
沒有嚴(yán)格的模式:可以在定義文檔結(jié)構(gòu)之前先創(chuàng)建文檔
MongoDB的功能使它更適合處理大量數(shù)據(jù)
先讓我們來比較一下兩者再來詳細(xì)說明
MySQL | MongoDB | |
---|---|---|
版本 | 1995- 2018(mysql 8.0) | 2009 |
結(jié)構(gòu) | 關(guān)系型 | 非關(guān)系型 |
靈活性 | 弱,需要在使用之前先定義數(shù)據(jù)庫模式 | 與MySQL相比具有相當(dāng)大的靈活性 - 定義不需要的模式 |
可擴展性 | 可以,但是比較困難,MySQL數(shù)據(jù)庫可以垂直擴展,可以向單個服務(wù)器添加更多資源 | 比MySQL更具可擴展性。MongoDB可水平擴展,可以添加更多服務(wù)器來擴展您的數(shù)據(jù)庫 |
需要DB管理員 | 是 | 否 - 開發(fā)人員和管理員都可以使用 |
適用場景 | 會計師事務(wù)所和銀行,以及需要具有清晰架構(gòu)的結(jié)構(gòu)化數(shù)據(jù)的其他公司。非常適合具有或多或少固定要求的企業(yè)(twitter例外) | 具有實時數(shù)據(jù),物聯(lián)網(wǎng),內(nèi)容管理,移動應(yīng)用,社交網(wǎng)絡(luò),面向大數(shù)據(jù)/網(wǎng)絡(luò)分析的系統(tǒng)以及不需要具有清晰架構(gòu)或其架構(gòu)的結(jié)構(gòu)化數(shù)據(jù)的業(yè)務(wù)的理想選擇不斷變化 |
靈活性
首先說說靈活性,舉個列子,一個商城里面會有許多的商品,而這些商品都是有自己獨特的屬性的,比如電視有屏幕尺寸、屏幕分辨率,而空調(diào)有制冷類型、外機噪音等屬性,要把它們放到產(chǎn)品表里是非常困難的,額外增加了程序員對于數(shù)據(jù)表設(shè)計的工作,而MongoDB沒有Schema(模式、數(shù)據(jù)模型)就會顯得很簡單。
MongoDB 的靈活還體現(xiàn)在非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)上。MongoDB 提供全文索引,也支持地理位置查詢和索引。例如一位用戶想知道方圓五公里哪里有公共衛(wèi)生間,這是「地理范圍查詢」。然后他搜索最近的單車。摩拜單車正是使用 MongoDB 完成這樣的「距離排序查詢」。
數(shù)據(jù)一臺機器放不下了,就需要sharding(分片)把它放到好幾臺機器上去。分片是MongoDB多年以來的原生功能,與MongoDB其他功能高效整合。
例如,分片集群中一個復(fù)雜的聚合查詢會自動地根據(jù) Shard Key(片鍵)分配到多個結(jié)點上運行,盡可能將計算任務(wù)下推到數(shù)據(jù)結(jié)點上,最后在一個結(jié)點上聚合所有結(jié)點的結(jié)果。分片還可以在各個結(jié)點間自動遷移數(shù)據(jù),均衡其數(shù)據(jù)量。同時配合著MongoDB的復(fù)制(副本集)技術(shù),可以有效的避免數(shù)據(jù)的丟失(在測試的時候發(fā)現(xiàn)mongo會自動發(fā)現(xiàn)副本集的所有機器地址,當(dāng)一臺Mongo被停掉時,連接的Server不會報錯)
MongoDB中使用分片集群結(jié)構(gòu)分布:
眾所周知,MongoDB占用了大量的服務(wù)器內(nèi)存
MongoDB在安全性上略微會差一點
過于自由靈活的文件存儲格式帶來的數(shù)據(jù)錯誤(。。。。。。)
單個文檔大小限制為16 M
對于數(shù)組型的數(shù)據(jù)操作不夠豐富
說了這么多狗屎一樣總結(jié)的話,最重要的就是我們在什么時候選擇使用MongoDB
日志系統(tǒng),系統(tǒng)運行過程中產(chǎn)生的日志信息,一般種類較多、范圍較大、內(nèi)容也比較雜亂。通過MongoDB可以將這些雜亂的日志進行收集管理
地理位置存儲,MongoDB支持地理位置、二維空間索引,可以存儲經(jīng)緯度,因此可以很快的計算出兩點之間的距離,等位置信息
數(shù)據(jù)規(guī)模增長很快(比如供給的關(guān)注信息)
需要保證高可用的環(huán)境
文件存儲需求
其他場景,如游戲開發(fā)中可以通過MongoDB存儲用戶信息、裝備、積分等,除此之外物流系統(tǒng)、社交系統(tǒng)、甚至物聯(lián)網(wǎng)系統(tǒng)
說了這么多,為什么我們會把mysql和MongoDB放在一起比較進行選擇,就是因為它們是不同類型的數(shù)據(jù)庫,從數(shù)據(jù)庫發(fā)展至今,大致上分為三種類型
首先要提到的一定是我們最熟悉的mysql數(shù)據(jù)庫所屬于的關(guān)系型數(shù)據(jù)庫。
關(guān)系型數(shù)據(jù)庫的特點:
比如MySql 、sql server Oracle 等
特點 通過一張張表來建立關(guān)聯(lián)
基本都使用SQL語言來管理數(shù)據(jù)庫
NoSql,也就是MongoDB的數(shù)據(jù)庫類型,源自2009年在San Francisco舉辦的一次Meetup,在該Meetup上出現(xiàn)了NoSql技術(shù)的描述:open source, distributed, non relational databases
非關(guān)系型數(shù)據(jù)庫的特點:
沒有行 、列的概念 用json類儲存數(shù)據(jù)
集合相當(dāng)于“表”,文檔相當(dāng)于“行”
標(biāo)準(zhǔn)化和非標(biāo)準(zhǔn)化的摩擦。
標(biāo)準(zhǔn)化限制創(chuàng)新,非標(biāo)準(zhǔn)話不能統(tǒng)一
NoSql在剛提出的時候被解釋成Non-Relational,也有No-sql的意思,但是隨著近些年的快速發(fā)展,SQL已經(jīng)逐步被應(yīng)用在了更廣泛的領(lǐng)域,因此,SQL已不再是RDBMS的專屬特征,NoSql技術(shù)體系中也引入了SQL能力,因此而演變出來了Not-Only-SQL的概念
大多數(shù)NoSql技術(shù),弱化了對ACID語義以及復(fù)雜關(guān)聯(lián)查詢的支持,采用了更加簡潔或更加專業(yè)的數(shù)據(jù)模型,優(yōu)化了讀寫路徑,從而能夠換取更高的讀寫性能
根據(jù)wiki中的定義
<font color=#FF7F50 size=5 face="黑體">NewSQL</font> 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可以說是傳統(tǒng)的RDBMS與NoSql技術(shù)結(jié)合之下的產(chǎn)物,因此,可以將典型NewSql技術(shù)理解成分布式關(guān)系型數(shù)據(jù)庫,能夠支持分布式事務(wù)是一個基本前提。NoSQL與NewSQL在技術(shù)棧上有很多重疊,但在是否支持關(guān)系型模型及對復(fù)雜事務(wù)的支持力度上是存在明顯區(qū)別的。因為本人不了解,所以這里不做多說。
這里我只是簡單的介紹一下數(shù)據(jù)庫的類型,對于一種存儲技術(shù)屬于NoSql或者NewSql,亦或是RDBMS是不能簡單歸類的,畢竟技術(shù)是在不斷進步的,比如MySQL現(xiàn)在也兼容了nosql的特性:
或者有的人會奇怪為什么在介紹MongoDB的缺點時沒有提事務(wù)的事,這是因為在2018年夏季的MongoDB4.0版本中,MongoDB引入了事務(wù)功能,支持多文檔ACID特性,例如使用mongo shell進行事務(wù)操作
具體壓測數(shù)據(jù)后期補上
看完上述內(nèi)容,你們掌握MongoDB到數(shù)據(jù)庫的使用的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前文章:MongoDB到數(shù)據(jù)庫的使用-創(chuàng)新互聯(lián)
標(biāo)題來源:http://chinadenli.net/article2/cdpooc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、App開發(fā)、標(biāo)簽優(yōu)化、域名注冊、全網(wǎng)營銷推廣、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容