成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

從MongoDB漫談數(shù)據(jù)庫(kù)

Carl / 2689人閱讀

摘要:可水平擴(kuò)展,可以添加更多服務(wù)器來(lái)擴(kuò)展您的數(shù)據(jù)庫(kù)需要管理員是否開(kāi)發(fā)人員和管理員都可以使用適用場(chǎng)景會(huì)計(jì)師事務(wù)所和銀行,以及需要具有清晰架構(gòu)的結(jié)構(gòu)化數(shù)據(jù)的其他公司。

今天的主題是從MongoDB漫談數(shù)據(jù)庫(kù),在日常的項(xiàng)目中,我們一般都是使用的mysql作為數(shù)據(jù)庫(kù),但是一旦有問(wèn)題,又常常會(huì)聽(tīng)到類似“要不換成MongoDB試試”的聲音,因此就讓我們這些小白來(lái)隨便聊聊數(shù)據(jù)庫(kù)

什么是數(shù)據(jù)庫(kù)

我們就用最簡(jiǎn)單的話來(lái)說(shuō),數(shù)據(jù)庫(kù),就是保存數(shù)據(jù)的一個(gè)倉(cāng)庫(kù)

數(shù)據(jù)庫(kù)(Database)的基本概念

數(shù)據(jù)庫(kù)就是按照一定的數(shù)據(jù)結(jié)構(gòu)來(lái)組織,儲(chǔ)存和管理數(shù)據(jù)的倉(cāng)庫(kù)

我們寫的程序都是在內(nèi)存中運(yùn)行的,一旦程序運(yùn)行結(jié)束或者計(jì)算機(jī)斷點(diǎn),程序運(yùn)行中的數(shù)據(jù)就會(huì)全部丟失;所以我們就需要將一些程序的數(shù)據(jù)持久化到硬盤中,以確保數(shù)據(jù)的安全性。

數(shù)據(jù)庫(kù)則是大批量數(shù)據(jù)持久化的普遍選擇,1.文件 2. 數(shù)據(jù)庫(kù)

為什么用數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)

數(shù)據(jù)庫(kù)是有結(jié)構(gòu)的

數(shù)據(jù)庫(kù)可以提供各種接口,讓數(shù)據(jù)處理(增刪改查)快捷方便

各種語(yǔ)言(PHP、jsp、.net..)提供了完善的接口

數(shù)據(jù)庫(kù)流行度(來(lái)源:https://db-engines.com/en/ranking)

從統(tǒng)計(jì)的數(shù)據(jù)中可以看出,最受歡迎的DBMS是“關(guān)系型”,前五名中占據(jù)了四位,把數(shù)據(jù)擴(kuò)大到前十,關(guān)系型數(shù)據(jù)庫(kù)也占到了七位之多。

為什么大多數(shù)程序員更喜歡使用MySQL?

開(kāi)源,只有企業(yè)才需要購(gòu)買許可證

具有廣泛的用途:可廣泛用于大多數(shù)平臺(tái),如Linux,Windows,Ubuntu,Mac OS X等

易于使用

可靠的:多年來(lái)一直經(jīng)過(guò)試驗(yàn)和測(cè)試

適用于PHP(PHP天下第一),也可以與其他編程語(yǔ)言一起使用,如JAVA,PERL,C,C ++等

適用于小型和大型應(yīng)用

那么關(guān)系型數(shù)據(jù)庫(kù)這么好為什么前五名中還會(huì)出現(xiàn)MongoDB的身影呢,我們來(lái)看一下

關(guān)系數(shù)據(jù)庫(kù)和MySQL的缺點(diǎn)是什么?

可伸縮性:向特定記錄添加更多數(shù)據(jù)可能涉及擴(kuò)展到多個(gè)表,列和行,而因?yàn)閿?shù)據(jù)是按行存儲(chǔ),即使只針對(duì)其中某一列進(jìn)行運(yùn)算,關(guān)系型數(shù)據(jù)庫(kù)也會(huì)將整行數(shù)據(jù)從存儲(chǔ)設(shè)備中讀入內(nèi)存,導(dǎo)致I/O較高

由第一條產(chǎn)生而來(lái)的一個(gè)缺陷就是無(wú)法存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)

速度:由于數(shù)據(jù)結(jié)構(gòu)的問(wèn)題倒是分析數(shù)據(jù)時(shí)需要一定的時(shí)間,另外只能夠進(jìn)行子字符串的匹配查詢,當(dāng)表的數(shù)據(jù)逐漸變大的時(shí)候,like查詢的匹配會(huì)非常慢,即使在有索引的情況下

在使用之前,需要先編寫架構(gòu)以定義表,同時(shí)表結(jié)構(gòu)schema擴(kuò)展不方便 如要需要修改表結(jié)構(gòu),需要執(zhí)行執(zhí)行DDL(data definition language),語(yǔ)句修改,修改期間會(huì)導(dǎo)致鎖表

是什么讓MongoDB如此吸引人?

靈活性:文檔結(jié)構(gòu)更符合開(kāi)發(fā)人員在各自編程語(yǔ)言中的編碼方式,這些編程語(yǔ)言在鍵值對(duì)中是清晰且結(jié)構(gòu)化的,這樣可以隨時(shí)輕松添加和編輯數(shù)據(jù)/文檔

支持各種查詢:字段,表達(dá)式,范圍查詢,JavaScript函數(shù)等

更快的周轉(zhuǎn)時(shí)間:因?yàn)榇鎯?chǔ)在MySQL數(shù)據(jù)庫(kù)中的多個(gè)表中的相關(guān)數(shù)據(jù)存儲(chǔ)在MongoDB中的同一文檔中

沒(méi)有嚴(yán)格的模式:可以在定義文檔結(jié)構(gòu)之前先創(chuàng)建文檔

MongoDB的功能使它更適合處理大量數(shù)據(jù)

先讓我們來(lái)比較一下兩者再來(lái)詳細(xì)說(shuō)明


MySQL MongoDB
版本 1995- 2018(mysql 8.0) 2009
結(jié)構(gòu) 關(guān)系型 非關(guān)系型
靈活性 弱,需要在使用之前先定義數(shù)據(jù)庫(kù)模式 與MySQL相比具有相當(dāng)大的靈活性 - 定義不需要的模式
可擴(kuò)展性 可以,但是比較困難,MySQL數(shù)據(jù)庫(kù)可以垂直擴(kuò)展,可以向單個(gè)服務(wù)器添加更多資源 比MySQL更具可擴(kuò)展性。MongoDB可水平擴(kuò)展,可以添加更多服務(wù)器來(lái)擴(kuò)展您的數(shù)據(jù)庫(kù)
需要DB管理員 否 - 開(kāi)發(fā)人員和管理員都可以使用
適用場(chǎng)景 會(huì)計(jì)師事務(wù)所和銀行,以及需要具有清晰架構(gòu)的結(jié)構(gòu)化數(shù)據(jù)的其他公司。非常適合具有或多或少固定要求的企業(yè)(twitter例外) 具有實(shí)時(shí)數(shù)據(jù),物聯(lián)網(wǎng),內(nèi)容管理,移動(dòng)應(yīng)用,社交網(wǎng)絡(luò),面向大數(shù)據(jù)/網(wǎng)絡(luò)分析的系統(tǒng)以及不需要具有清晰架構(gòu)或其架構(gòu)的結(jié)構(gòu)化數(shù)據(jù)的業(yè)務(wù)的理想選擇不斷變化

靈活性

首先說(shuō)說(shuō)靈活性,舉個(gè)列子,一個(gè)商城里面會(huì)有許多的商品,而這些商品都是有自己獨(dú)特的屬性的,比如電視有屏幕尺寸、屏幕分辨率,而空調(diào)有制冷類型、外機(jī)噪音等屬性,要把它們放到產(chǎn)品表里是非常困難的,額外增加了程序員對(duì)于數(shù)據(jù)表設(shè)計(jì)的工作,而MongoDB沒(méi)有Schema(模式、數(shù)據(jù)模型)就會(huì)顯得很簡(jiǎn)單。

MongoDB 的靈活還體現(xiàn)在非結(jié)構(gòu)化和半結(jié)構(gòu)化的數(shù)據(jù)上。MongoDB 提供全文索引,也支持地理位置查詢和索引。例如一位用戶想知道方圓五公里哪里有公共衛(wèi)生間,這是「地理范圍查詢」。然后他搜索最近的單車。摩拜單車正是使用 MongoDB 完成這樣的「距離排序查詢」。

可擴(kuò)展性

數(shù)據(jù)一臺(tái)機(jī)器放不下了,就需要sharding(分片)把它放到好幾臺(tái)機(jī)器上去。分片是MongoDB多年以來(lái)的原生功能,與MongoDB其他功能高效整合。

例如,分片集群中一個(gè)復(fù)雜的聚合查詢會(huì)自動(dòng)地根據(jù) Shard Key(片鍵)分配到多個(gè)結(jié)點(diǎn)上運(yùn)行,盡可能將計(jì)算任務(wù)下推到數(shù)據(jù)結(jié)點(diǎn)上,最后在一個(gè)結(jié)點(diǎn)上聚合所有結(jié)點(diǎn)的結(jié)果。分片還可以在各個(gè)結(jié)點(diǎn)間自動(dòng)遷移數(shù)據(jù),均衡其數(shù)據(jù)量。同時(shí)配合著MongoDB的復(fù)制(副本集)技術(shù),可以有效的避免數(shù)據(jù)的丟失(在測(cè)試的時(shí)候發(fā)現(xiàn)mongo會(huì)自動(dòng)發(fā)現(xiàn)副本集的所有機(jī)器地址,當(dāng)一臺(tái)Mongo被停掉時(shí),連接的Server不會(huì)報(bào)錯(cuò))

MongoDB中使用分片集群結(jié)構(gòu)分布:

MongoDB的缺點(diǎn)

眾所周知,MongoDB占用了大量的服務(wù)器內(nèi)存

MongoDB在安全性上略微會(huì)差一點(diǎn)

過(guò)于自由靈活的文件存儲(chǔ)格式帶來(lái)的數(shù)據(jù)錯(cuò)誤(。。。。。。)

單個(gè)文檔大小限制為16 M

對(duì)于數(shù)組型的數(shù)據(jù)操作不夠豐富

什么時(shí)候選擇MongoDB

說(shuō)了這么多狗屎一樣總結(jié)的話,最重要的就是我們?cè)谑裁磿r(shí)候選擇使用MongoDB

日志系統(tǒng),系統(tǒng)運(yùn)行過(guò)程中產(chǎn)生的日志信息,一般種類較多、范圍較大、內(nèi)容也比較雜亂。通過(guò)MongoDB可以將這些雜亂的日志進(jìn)行收集管理

地理位置存儲(chǔ),MongoDB支持地理位置、二維空間索引,可以存儲(chǔ)經(jīng)緯度,因此可以很快的計(jì)算出兩點(diǎn)之間的距離,等位置信息

數(shù)據(jù)規(guī)模增長(zhǎng)很快(比如供給的關(guān)注信息)

需要保證高可用的環(huán)境

文件存儲(chǔ)需求

其他場(chǎng)景,如游戲開(kāi)發(fā)中可以通過(guò)MongoDB存儲(chǔ)用戶信息、裝備、積分等,除此之外物流系統(tǒng)、社交系統(tǒng)、甚至物聯(lián)網(wǎng)系統(tǒng)

數(shù)據(jù)庫(kù)的類型

說(shuō)了這么多,為什么我們會(huì)把mysql和MongoDB放在一起比較進(jìn)行選擇,就是因?yàn)樗鼈兪遣煌愋偷臄?shù)據(jù)庫(kù),從數(shù)據(jù)庫(kù)發(fā)展至今,大致上分為三種類型

RDBMS(關(guān)系型數(shù)據(jù)庫(kù))

首先要提到的一定是我們最熟悉的mysql數(shù)據(jù)庫(kù)所屬于的關(guān)系型數(shù)據(jù)庫(kù)。

關(guān)系型數(shù)據(jù)庫(kù)的特點(diǎn):

比如MySql 、sql server Oracle 等

特點(diǎn) 通過(guò)一張張表來(lái)建立關(guān)聯(lián)

基本都使用SQL語(yǔ)言來(lái)管理數(shù)據(jù)庫(kù)

Nosql (非關(guān)系型數(shù)據(jù)庫(kù))

NoSql,也就是MongoDB的數(shù)據(jù)庫(kù)類型,源自2009年在San Francisco舉辦的一次Meetup,在該Meetup上出現(xiàn)了NoSql技術(shù)的描述:open source, distributed, non relational databases

非關(guān)系型數(shù)據(jù)庫(kù)的特點(diǎn):

沒(méi)有行 、列的概念 用json類儲(chǔ)存數(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在剛提出的時(shí)候被解釋成Non-Relational,也有No-sql的意思,但是隨著近些年的快速發(fā)展,SQL已經(jīng)逐步被應(yīng)用在了更廣泛的領(lǐng)域,因此,SQL已不再是RDBMS的專屬特征,NoSql技術(shù)體系中也引入了SQL能力,因此而演變出來(lái)了Not-Only-SQL的概念

大多數(shù)NoSql技術(shù),弱化了對(duì)ACID語(yǔ)義以及復(fù)雜關(guān)聯(lián)查詢的支持,采用了更加簡(jiǎn)潔或更加專業(yè)的數(shù)據(jù)模型,優(yōu)化了讀寫路徑,從而能夠換取更高的讀寫性能

NewSql

根據(jù)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可以說(shuō)是傳統(tǒng)的RDBMS與NoSql技術(shù)結(jié)合之下的產(chǎn)物,因此,可以將典型NewSql技術(shù)理解成分布式關(guān)系型數(shù)據(jù)庫(kù),能夠支持分布式事務(wù)是一個(gè)基本前提。NoSQL與NewSQL在技術(shù)棧上有很多重疊,但在是否支持關(guān)系型模型及對(duì)復(fù)雜事務(wù)的支持力度上是存在明顯區(qū)別的。因?yàn)楸救瞬涣私?,所以這里不做多說(shuō)。

這里我只是簡(jiǎn)單的介紹一下數(shù)據(jù)庫(kù)的類型,對(duì)于一種存儲(chǔ)技術(shù)屬于NoSql或者NewSql,亦或是RDBMS是不能簡(jiǎn)單歸類的,畢竟技術(shù)是在不斷進(jìn)步的,比如MySQL現(xiàn)在也兼容了nosql的特性:

或者有的人會(huì)奇怪為什么在介紹MongoDB的缺點(diǎn)時(shí)沒(méi)有提事務(wù)的事,這是因?yàn)樵?018年夏季的MongoDB4.0版本中,MongoDB引入了事務(wù)功能,支持多文檔ACID特性,例如使用mongo shell進(jìn)行事務(wù)操作

具體壓測(cè)數(shù)據(jù)后期補(bǔ)上

參考文章:

《MongoDB vs MySQL : Understanding the difference》——Tanya Noronha

《NewSQL是否是NoSQL的取代者?》——Jaison

《MongoDB 4.0 事務(wù)實(shí)現(xiàn)解析》——張友東

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/19438.html

相關(guān)文章

  • 移動(dòng)互聯(lián)網(wǎng)漫談(4)-移動(dòng)通信網(wǎng)絡(luò)

    摘要:在日本,公司的一種移動(dòng)互聯(lián)網(wǎng)模式,卻取得了令世人矚目的成績(jī)。自從于年月推出以來(lái),日本已經(jīng)成為世界上發(fā)展最快的互聯(lián)網(wǎng)市場(chǎng)。在全世界也受到關(guān)注因?yàn)樗堑谝粋€(gè)符合標(biāo)準(zhǔn)的移動(dòng)數(shù)據(jù)服務(wù),而且完完全全是日本的。 1978年貝爾實(shí)驗(yàn)室的科學(xué)家們?cè)诿绹?guó)芝加哥試驗(yàn)成功了世界上第一個(gè)蜂窩移動(dòng)通信系統(tǒng),并...

    tomener 評(píng)論0 收藏0
  • 混合云為何成為焦點(diǎn) 漫談云計(jì)算幾大服務(wù)模式

    摘要:當(dāng)前隨著國(guó)內(nèi)外云計(jì)算廠商對(duì)于不同服務(wù)模式的不斷探索已經(jīng)使得整個(gè)云計(jì)算市場(chǎng)實(shí)現(xiàn)了快速增長(zhǎng)尤其是對(duì)于像混合云這類高復(fù)雜的應(yīng)用來(lái)說(shuō)確實(shí)在很大程度上推動(dòng)了國(guó)內(nèi)整個(gè)云產(chǎn)業(yè)的利潤(rùn)增長(zhǎng)。近些年,國(guó)內(nèi)的云計(jì)算市場(chǎng)已經(jīng)呈現(xiàn)出了多行業(yè)深度化應(yīng)用的發(fā)展態(tài)勢(shì),特別是隨著物聯(lián)網(wǎng)等技術(shù)快速發(fā)展,帶動(dòng)了私有云、公有云等云計(jì)算市場(chǎng)的快速發(fā)展,越來(lái)越多的城市開(kāi)始開(kāi)展試點(diǎn)工作,在電力、物流、交通、智慧城市、環(huán)保、醫(yī)療、教育等很...

    hikui 評(píng)論0 收藏0
  • [前端漫談_3] filter 聊到 Promise

    摘要:前言在學(xué)習(xí)前端的時(shí)候,我總是能聽(tīng)到很多高級(jí)詞匯,比如今天會(huì)聊到的函數(shù)式編程高階函數(shù)。接下來(lái)我們看看,高階函數(shù)有可能會(huì)遇到的問(wèn)題,又如何去解決。 前言 在學(xué)習(xí)前端的時(shí)候,我總是能聽(tīng)到很多高級(jí)詞匯,比如今天會(huì)聊到的 函數(shù)式編程(Functional Programming) & 高階函數(shù) (Higher-order function) 。但是當(dāng)你真正的理解什么是 函數(shù)式編程 & 高階函數(shù) ...

    crossoverJie 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Carl

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<