日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

作者 | Mark Smith

譯者 | 王者

策劃 | 萬佳

我加入 MongoDB 還不到一年,但學(xué)到了很多東西。在面試這家公司前,我從未真正使用過 MongoDB,盡管我聽過一些有關(guān)它的演講,并且它的簡(jiǎn)單易用給我留下深刻印象。

但和大多數(shù)人一樣,我也聽說過這些可怕的說法:“它不支持關(guān)系模型。如果你想存儲(chǔ)文檔,那沒問題,但如果以后想要進(jìn)行聚合該怎么辦?你將被困在這個(gè)錯(cuò)誤的數(shù)據(jù)庫(kù)里!而且不管怎樣,它不支持事務(wù)!”

當(dāng)我開始查找這些信息的來源,才意識(shí)到兩個(gè)問題:首先,這些帖子大多是十年前的,所以他們所說的是一個(gè)剛剛推出三年的產(chǎn)品,而不是今天這個(gè)成熟、經(jīng)過實(shí)戰(zhàn)考驗(yàn)的數(shù)據(jù)庫(kù)。其次,他們說的幾乎都不再是對(duì)的,而且在某些情況下從來都沒有對(duì)過。

所以我決定做一個(gè)演講(并寫了這篇文章)來逐一澄清這些錯(cuò)誤的說法。

1

迷思 0:MongoDB 是 Web 可伸縮的

YouTube 上有個(gè)視頻,視頻里有幾只狗(看起來應(yīng)該是狗吧?)。你可能已經(jīng)看到了——其中一只是盲目的新技術(shù)追隨者,它盲目相信 MongoDB,沒有真正加以了解。另一只狗比較理性,第一只狗的盲從讓它感到沮喪。

在加入 MongoDB 第一天,我的一個(gè)朋友給我發(fā)了這個(gè)視頻鏈接,但此前,我已經(jīng)看過了。看看日期,這段視頻已經(jīng)流傳十多年了。當(dāng)時(shí)真的很有趣,但現(xiàn)在呢?里面幾乎所有的東西都過時(shí)了。

事實(shí)上,MongoDB 公司很多人的 T 恤或筆記本電腦貼紙上都有這個(gè)角色,它是 MongoDB 的非官方吉祥物。

2

MongoDB 到底是什么?

在開始講“MongoDB 不是什么”之前,我們來總結(jié)一下 MongoDB 到底是什么。

MongoDB 是一個(gè)分布式文檔數(shù)據(jù)庫(kù)。集群(我們稱之為復(fù)本集)大多是自我管理的——當(dāng)集群中的每臺(tái)機(jī)器都知道了其他服務(wù)器的所在,如果其中一個(gè)節(jié)點(diǎn)宕機(jī)或網(wǎng)絡(luò)出現(xiàn)問題,它們會(huì)自動(dòng)加以處理。如果其中一臺(tái)機(jī)器被關(guān)閉或發(fā)生崩潰,其他機(jī)器會(huì)接管。要實(shí)現(xiàn)仲裁,群集中至少需要有 3 個(gè)節(jié)點(diǎn)。集群中的每臺(tái)服務(wù)器都有數(shù)據(jù)庫(kù)所有數(shù)據(jù)的完整副本。

集群是為了冗余,而不是為了可伸縮性。所有的客戶端通常只連接到一臺(tái)服務(wù)器——被選舉出來的主服務(wù)器,它負(fù)責(zé)執(zhí)行查詢和更新,并將數(shù)據(jù)變更傳輸?shù)絺溆脵C(jī)器。

你可以直接連接到備用服務(wù)器做一些有趣的事情,比如運(yùn)行分析查詢。但一般來說,直接連接到備用節(jié)點(diǎn)意味著你可能會(huì)遇到一些舊數(shù)據(jù),所以不應(yīng)該連接到備用節(jié)點(diǎn),除非你可以接受舊數(shù)據(jù)。

講完“分布式”,接下來講講“文檔數(shù)據(jù)庫(kù)”。

MongoDB 與傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)的不同之處在于,它不是將數(shù)據(jù)保存成扁平的行,然后存儲(chǔ)在數(shù)據(jù)庫(kù)的表中,而是在文檔中存儲(chǔ)分層結(jié)構(gòu)的數(shù)據(jù)——基本上與 JSON 對(duì)象類似。文檔存儲(chǔ)在集合中,集合實(shí)際上就是一堆文檔。每個(gè)文檔可以具有與集合中其他文檔不同的結(jié)構(gòu)或模式。你還可以(而且應(yīng)該)根據(jù)將要運(yùn)行的查詢類型和存儲(chǔ)數(shù)據(jù)對(duì)集合中的文檔進(jìn)行索引。如果你想要確保集合中的所有文檔都遵循一種結(jié)構(gòu),可以將 JSON 模式應(yīng)用于集合,作為驗(yàn)證器。

上面的文檔是一個(gè)例子,顯示了 1893 年的一部電影的信息!文檔是用PyMongo驅(qū)動(dòng)程序獲取的。

注意,這里有些值是數(shù)組,比如“countries”和“cast”,而有些值是對(duì)象(我們稱它們?yōu)樽游臋n)。這就是 MongoDB 文檔的層次結(jié)構(gòu)——它們不像關(guān)系數(shù)據(jù)庫(kù)中的表行那樣扁平。

還需要注意的是,它還包含一個(gè)原生 Python datetime 類型的“released”字段,以及一個(gè)特殊的 ObjectId 類型的值。或許這個(gè)不是真正意義上的 JSON 文檔?我們待會(huì)再來說這個(gè)……

上面的文檔是一個(gè)例子,顯示了 1893 年的一部電影的信息!文檔是用PyMongo驅(qū)動(dòng)程序獲取的。

注意,這里有些值是數(shù)組,比如“countries”和“cast”,而有些值是對(duì)象(我們稱它們?yōu)樽游臋n)。這就是 MongoDB 文檔的層次結(jié)構(gòu)——它們不像關(guān)系數(shù)據(jù)庫(kù)中的表行那樣扁平。

還需要注意的是,它還包含一個(gè)原生 Python datetime 類型的“released”字段,以及一個(gè)特殊的 ObjectId 類型的值?;蛟S這個(gè)不是真正意義上的 JSON 文檔?我們待會(huì)再來說這個(gè)……

3

迷思 1:MongoDB 的版本是 3.2

如果你在 Debian Stretch 上使用apt get mongodb安裝 MongoDB,它會(huì)安裝 3.2 版本。不幸的是,這個(gè)版本已經(jīng)是 5 年前的了!從那時(shí)起,已經(jīng)發(fā)布了 5 個(gè)主要版本,它們包含大量的新特性,以及安全性、性能和可伸縮性方面的改進(jìn)。

MongoDB 的當(dāng)前版本是 4.4(截至 2020 年末)。如果你要安裝,應(yīng)該安裝MongoDB社區(qū)服務(wù)器版,但最好請(qǐng)先了解一下MongoDB Atlas,也就是我們的托管數(shù)據(jù)庫(kù)即服務(wù)(DBaaS)產(chǎn)品!

4

迷思 2:MongoDB 是一個(gè) JSON 數(shù)據(jù)庫(kù)

你肯定聽說過 MongoDB 是一個(gè) JSON 數(shù)據(jù)庫(kù)的說法,特別是如果你最近訪問過 MongoDB 的主頁(yè)。

不過,正如前面提到的,MongoDB 不是一個(gè) JSON 數(shù)據(jù)庫(kù)。它支持額外的數(shù)據(jù)類型,比如對(duì)象、原生日期對(duì)象、更多的數(shù)字類型、地理原語和高效的二進(jìn)制類型等等。

MongoDB 實(shí)際上是一個(gè) BSON 數(shù)據(jù)庫(kù)。

這似乎是一個(gè)微不足道的區(qū)別,但卻很重要。與基于文本的格式相比,它在存儲(chǔ)、傳輸和遍歷方面更高效,而且比 JSON 支持更多的數(shù)據(jù)類型。

MongoDB 存儲(chǔ)的是 BSON 文檔

用于查找的實(shí)際上也是 BSON 文檔

結(jié)果以 BSON 文檔的形式輸出

BSON 甚至是 MongoDB 的有線協(xié)議

如果你習(xí)慣了使用 JSON,可以將 MongoDB 看成是 JSON 數(shù)據(jù)庫(kù),這就是為什么我們有時(shí)會(huì)這樣描述它!等你使用 MongoDB 一段時(shí)間,就會(huì)開始對(duì) BSON 的優(yōu)勢(shì)大加贊許。

4

迷思 3:MongoDB 不支持事務(wù)

一些第三方文章將 MongoDB 描述成 BASE 數(shù)據(jù)庫(kù)。BASE 是指“基本可用、軟狀態(tài)、最終一致”。

但這不是真的,從來都不是!MongoDB 從來都不是“最終一致”的。對(duì)主文檔的讀寫是強(qiáng)一致性的,對(duì)單個(gè)文檔的更新始終是原子的。軟狀態(tài)是指需要持續(xù)不斷的更新數(shù)據(jù),否則數(shù)據(jù)就會(huì)過期,但 MongoDB 并非如此。

最后,如果太多的節(jié)點(diǎn)不可用,無法達(dá)成仲裁,MongoDB 將進(jìn)入只讀狀態(tài)(降低可用性)。這是有意這么設(shè)計(jì)的,因?yàn)檫@樣可以確保在出現(xiàn)問題時(shí)保持一致性。

MongoDB 是一個(gè) ACID 數(shù)據(jù)庫(kù)。它支持原子性、一致性、隔離性和持久性。

對(duì)單個(gè)文檔的更新始終是原子的,從 4.0 版本開始,MongoDB 也支持跨多個(gè)文檔和集合的事務(wù)。從 4.2 開始,甚至支持分片集群的跨分片事務(wù)。

雖然 MongoDB 支持事務(wù),但在使用它時(shí)仍然要謹(jǐn)慎。事務(wù)是以性能為代價(jià)的,而且由于 MongoDB 支持豐富的分層文檔,如果你的模式設(shè)計(jì)正確,就沒有必要經(jīng)常跨多個(gè)文檔更新數(shù)據(jù)。

5

迷思 4:MongoDB 不支持關(guān)系

關(guān)于 MongoDB 另一個(gè)過時(shí)的說法是,你不能在集合或文檔之間建立關(guān)系。你可以使用聚合管道來連接文檔,它們非常強(qiáng)大,你可以使用直觀的查詢模型來查詢和轉(zhuǎn)換來自多個(gè)集合的數(shù)據(jù)。

MongoDB 從 2.2 開始就支持查找(連接)。

下面的示例文檔演示了將訂單集合和庫(kù)存集合連接之后,在返回的訂單文檔中包含了嵌入到數(shù)組的庫(kù)存文檔。

我認(rèn)為,能夠在返回的主文檔中嵌入相關(guān)文檔比在關(guān)系連接中為每個(gè)關(guān)系復(fù)制行更直觀。

6

迷思 5:MongoDB 完全是關(guān)于分片

你可能聽人說過分片是 MongoDB 的一個(gè)很酷的特性。這絕對(duì)是 MongoDB 的一個(gè)很酷的核心特性。

分片是指將數(shù)據(jù)分成片段,并將每個(gè)片段放到不同的復(fù)制集或集群中。這是一種處理龐大數(shù)據(jù)集的技術(shù)。MongoDB 可以自動(dòng)將數(shù)據(jù)和請(qǐng)求發(fā)送到正確的副本集,并將來自多個(gè)分片的結(jié)果合并起來。

但分片存在一個(gè)很根本的問題。

我在前面提到過,副本集的最小節(jié)點(diǎn)數(shù)是 3,這樣才能實(shí)現(xiàn)仲裁。在進(jìn)行分片時(shí),至少需要兩個(gè)副本集,因此至少需要 6 臺(tái)服務(wù)器。除此之外,你還需要運(yùn)行多個(gè) mongos 實(shí)例。mongos 是分片集群的代理,負(fù)責(zé)路由請(qǐng)求和響應(yīng)。要實(shí)現(xiàn)高可用性,至少需要兩個(gè) mongos 實(shí)例。

因此,這意味著一個(gè)分片集群最少需要 8 臺(tái)服務(wù)器,每增加一個(gè)分片,就會(huì)增加至少 3 臺(tái)服務(wù)器。

分片集群還會(huì)使數(shù)據(jù)變得難以管理,并且會(huì)限制可執(zhí)行的查詢類型。如果你確實(shí)需要進(jìn)行分片,那么分片對(duì)你來說確實(shí)是有用的,但更簡(jiǎn)單的辦法是直接升級(jí)硬件,通常這樣更便宜、更容易。

數(shù)據(jù)的伸縮主要與 RAM 有關(guān),所以如果可以的話,請(qǐng)購(gòu)買更多的 RAM。如果 CPU 是瓶頸,那就升級(jí) CPU。如果磁盤容量是個(gè)問題,那就買一個(gè)更大的磁盤。

MongoDB 的分片功能一直都在,如果對(duì)內(nèi)存的需求超過了一臺(tái)計(jì)算機(jī)的容量,可以使用分片。你還可以使用分片功能做一些有趣的事情,比如地理位置固定,可以將用戶數(shù)據(jù)存儲(chǔ)在離用戶位置更近的地方,從而減少延遲。

在決定使用分片進(jìn)行數(shù)據(jù)伸縮時(shí),應(yīng)該先考慮一下硬件升級(jí)是否是一個(gè)更有效的選擇。

你可以看看 MongoDB Atlas,MongoDB 的托管數(shù)據(jù)庫(kù)即服務(wù)(DBaaS)產(chǎn)品。MongoDB Atlas 不僅可以在你選擇的云平臺(tái)上托管數(shù)據(jù)庫(kù),還可以根據(jù)需要伸縮數(shù)據(jù)庫(kù),保持可用性,同時(shí)保持較低的成本。它將負(fù)責(zé)處理備份和冗余,還提供了額外的功能,如圖表、文本搜索、無服務(wù)器功能等等。

7

迷思 6:MongoDB 不安全

關(guān)于 MongoDB 的另一個(gè)誤解,是說它不安全。我個(gè)人認(rèn)為,這對(duì) MongoDB 來說是一種不公平的評(píng)判,但不可否認(rèn)的是,在互聯(lián)網(wǎng)上有很多不安全的 MongoDB 實(shí)例,而且發(fā)生了幾起涉及數(shù)據(jù)泄露的事故。

從歷史上看,這是由于 MongoDB 的發(fā)行方式導(dǎo)致的。一些 linux 發(fā)行版曾經(jīng)在發(fā)行 MongoDB 時(shí)啟用網(wǎng)絡(luò)并禁用身份驗(yàn)證。

因此,如果你沒有防火墻,或者打開了防火墻上的 MongoDB 端口,那么你的數(shù)據(jù)就有可能被竊取?,F(xiàn)如今,機(jī)器人很可能會(huì)找到你的數(shù)據(jù),把你的數(shù)據(jù)加密,然后再加上一個(gè)文檔向你勒索比特幣。

我想說的是,如果你將一個(gè)不受保護(hù)的數(shù)據(jù)庫(kù)服務(wù)器放到互聯(lián)網(wǎng)上,那就是你的錯(cuò)——這種情況肯定已經(jīng)發(fā)生過很多次了,而且肯定有辦法不讓事態(tài)變得如此糟糕。

我們對(duì) MongoDB 3.6 的一些默認(rèn)設(shè)置進(jìn)行了修復(fù)。MongoDB 不會(huì)連接到網(wǎng)絡(luò),除非啟用身份驗(yàn)證,或者你給服務(wù)器設(shè)置了一個(gè)特定標(biāo)志來覆蓋這個(gè)行為。所以,如果使用不當(dāng),仍然可能不安全。不管怎樣,你至少要先閱讀一下手冊(cè)。

除此之外,在安全方面,MongoDB 還使用了行業(yè)標(biāo)準(zhǔn),例如使用 TLS 對(duì)傳輸中的數(shù)據(jù)進(jìn)行加密,使用 SCRAM-SHA-256 對(duì)用戶進(jìn)行安全認(rèn)證。

MongoDB 還提供了客戶端字段級(jí)加密(FLE)功能,數(shù)據(jù)在客戶端和傳輸過程中都是經(jīng)過加密的。也就是說,如果第三方拿到數(shù)據(jù)庫(kù)服務(wù)器的訪問權(quán)限,但沒有客戶端訪問權(quán)限,也無法讀取加密的數(shù)據(jù)。

8

迷思 7:MongoDB 會(huì)丟失數(shù)據(jù)

這在 Hacker News 上是一個(gè)很經(jīng)典的問題。有人發(fā)帖子分享他們?nèi)绾纬晒Φ赜?MongoDB 開發(fā)了一些東西,然后立刻有人評(píng)論說:“我知道這個(gè)人曾經(jīng)把 MongoDB 里所有的數(shù)據(jù)都弄丟了,所以請(qǐng)避免同樣的事情發(fā)生。”

如果你繼續(xù)聯(lián)系這些用戶,并讓他們提交問題,他們就消失了。

MongoDB 被廣泛應(yīng)用于那些非常關(guān)心數(shù)據(jù)保存問題的行業(yè),從摩根士丹利、巴克萊和匯豐等大型銀行,到福布斯等大型出版品牌。我們從未收到過有關(guān)大規(guī)模數(shù)據(jù)丟失的報(bào)告。如果你確實(shí)有關(guān)于數(shù)據(jù)丟失的第一手故事要講,請(qǐng)向我們反饋,無論你是付費(fèi)企業(yè)用戶還是開源用戶,我們都會(huì)認(rèn)真對(duì)待。

9

迷思 8:MongoDB 只是一個(gè)玩具

看到這里,你就已經(jīng)知道這是一個(gè)迷思了。

MongoDB 是一個(gè)用于存儲(chǔ)文檔的通用數(shù)據(jù)庫(kù),它可以安全、原子地更新數(shù)據(jù),可以與其他文檔連接,提供了豐富、強(qiáng)大和直觀的查詢語言。當(dāng)你的數(shù)據(jù)規(guī)模大到一臺(tái)機(jī)器裝不下,可以進(jìn)行分片,它還支持高級(jí)功能,例如用于保護(hù)敏感數(shù)據(jù)的客戶端字段級(jí)別加密、可以讓應(yīng)用程序立即響應(yīng)變更數(shù)據(jù)的變更流。

https://developer.mongodb.com/article/everything-you-know-is-wrong

分享到:
標(biāo)簽:MongoDB
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定