国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MongoDB 使用經(jīng)驗

maybe_009 / 1559人閱讀

摘要:不過對于大多數(shù)應(yīng)用,這種不安全已經(jīng)足夠安全了。當(dāng)故障的節(jié)點(diǎn)恢復(fù)后,會向其他節(jié)點(diǎn)同步到最新的數(shù)據(jù),然后成為一個從節(jié)點(diǎn)。分片可以與副本集同時使用,此時,每個分片都是一個副本級,這樣可以提供非常高的可用率和擴(kuò)展性。

最初聽說 MongoDB 的時候,我總是覺得它的穩(wěn)定性堪憂,后來用了差不多一年的時間,其實(shí)也沒有遇到過什么問題,反而是 MySQL 出現(xiàn)過幾次丟失數(shù)據(jù)的情況。配合 Node.js 使用 MongoDB 是一件非常舒暢的事情,從前端,到后端,再到數(shù)據(jù)庫,統(tǒng)統(tǒng)全是 JSON.

本文的定位是一篇對 MongoDB 的一個概覽性的介紹,告訴你 MongoDB 的特點(diǎn)和功能,以及如果需要了解某個功能,應(yīng)當(dāng)搜索什么關(guān)鍵詞,并不直接涉及技術(shù)細(xì)節(jié)。

特點(diǎn)

無模式

MongoDB 中的每一條文檔,都是一個 JSON 對象,因此你無需預(yù)定義一個集合的結(jié)構(gòu),集合中的每個文檔也可以有不同的結(jié)構(gòu)。

異步寫入

MongoDB 默認(rèn)所有的寫操作都是『不安全』的,即當(dāng)請求被 MongoDB 收到時,不等寫入操作完成,就返回一個『成功』的響應(yīng)。
這是默認(rèn)的行為,當(dāng)然你設(shè)置一些選項,讓操作等待等待寫入完成后再返回響應(yīng)。不過對于大多數(shù)應(yīng)用,這種『不安全』已經(jīng)足夠安全了。

簡單查詢

MongoDB 只支持簡單的查詢,MongoDB 只儲存數(shù)據(jù),更多的邏輯應(yīng)該在應(yīng)用中解決。因此 MongoDB 有著簡單的且在各編程語言下高度一致的 API 接口。

無需運(yùn)維

MongoDB 幾乎沒有什么選項可以設(shè)置,集群也是設(shè)置一次之后就可以自動地解決故障,極少需要維護(hù)。

安裝和備份

MongoDB 的安裝很簡單,直接在官網(wǎng)下載二進(jìn)制版本,運(yùn)行其中的 mongod 即可啟動數(shù)據(jù)庫,運(yùn)行 mongo 即可啟動客戶端 Shell, 或者你也可以從軟件源中安裝。
MongoDB 被設(shè)計運(yùn)行于 64bit 的操作系統(tǒng),在 32bit 的情況下,數(shù)據(jù)文件最大限制為 2GiB.

MongoDB 在運(yùn)行時并不會實(shí)時地將修改寫入磁盤,因此在關(guān)閉服務(wù)器時需要給 MongoDB 時間將所有數(shù)據(jù)寫入磁盤。當(dāng)出現(xiàn)服務(wù)器突然掉電的情況時,MongoDB 的數(shù)據(jù)庫文件會損壞,需要進(jìn)行修復(fù)才能重新運(yùn)行,這個過程中會丟失掉電時正在進(jìn)行的寫入操作。在對運(yùn)行中的 MongoDB 進(jìn)行備份時,需要使用自帶的 mongodump 工具,不能直接復(fù)制其數(shù)據(jù)庫文件。

設(shè)計文檔結(jié)構(gòu)

ObjectID

MongoDB 會為每一個文檔默認(rèn)添加一個名為 _id, 類型為 Object 的字段,這個字段用來唯一地標(biāo)識每一個文檔。這個 ID 通過時間,服務(wù)器,進(jìn)程號被生成,甚至可以認(rèn)為是全世界唯一的。
除了 MongoDB 默認(rèn)為 _id 添加 ObjectID, 你也可以自己在文檔中創(chuàng)建 ObjectID, 來起到唯一地標(biāo)識某個對象的功能。

引用關(guān)系

例如我們有一個 topic 集合,topic 都是 account 創(chuàng)建的,所以 topics 中要引用來自 accounts 中的 account.

// accounts
{
    _id: ,
    name: "jysperm"
}

// topics
{
    _id: ,
    account_id: 
}
嵌入關(guān)系

每個 topic 會有一些 reply, 所以在 topic 中可以嵌入 reply.

// topics
{
    _id: ,
    account_id: 

    replies: [
        {
            _id: ,
            content: "xxoo"
        }
    ]
}
引用 Vs 嵌入

在上面第一個例子中,topic 其實(shí)也可以嵌入 account 中;而第二個例子中,reply 也可以使用一個新的集合,然后來引用 topic, 那么應(yīng)該如何選擇這兩種關(guān)系呢。

我們主要從幾個出發(fā)點(diǎn)來考慮:

查詢

我們可以考慮查詢 account 時,是否需要他所有的 topic, 或者查詢 topic 時,是否需要它所有的 reply.
從查詢的角度來考慮,如果需要一同獲得這兩種數(shù)據(jù),那么就應(yīng)該嵌入,如果不需要,就應(yīng)該引用。

數(shù)據(jù)的增長性

我們還可以考慮 account 的 topic 數(shù)量在今后會有怎樣的增長,topic 的 reply 數(shù)量會有怎樣的增長。
如果增長是沒有限度的,那么就應(yīng)該引用,如果增長是有限的,那么就可以嵌入。

對應(yīng)關(guān)系

如果是一對一關(guān)系,或者一對多關(guān)系,那么可以考慮嵌入,如果是多對多關(guān)系,那么應(yīng)該引用。

原子性

MongoDB 僅在文檔層面提供原子性,如果有兩個非常敏感的數(shù)據(jù)需要同時被更新,那么他們有必要存在于同一個文檔中。

查詢和更新

所謂『增刪查改』在 MongoDB 里對應(yīng):

find/findOne: 查詢

update/save: 修改

insert/save: 新增

remove: 刪除

在 MongoDB 中,操作符以 $ 開頭,主要分為三類:查詢操作符,更新操作符,聚合查詢操作符。

查詢操作符

用于 find 和 update 中的查詢器,如 $gt(大于), $ne(不等于), $in(匹配幾個值之一), 邏輯運(yùn)算:$and, $not.

更新操作符

用于 update 中的更新器,如 $inc(對數(shù)字進(jìn)行增量), $set(修改文檔的一部分), $unset(刪除一個字段).
MongoDB 對嵌入式的文檔和數(shù)組有非常好的支持:$addToSet(向集合中添加元素), $push(向數(shù)組添加元素), $pull(從數(shù)組移除元素).

聚合查詢(Aggregation)

類似于 SQL 數(shù)據(jù)庫中的 GROUP, 提供統(tǒng)計和計算的功能,要多強(qiáng)大有多強(qiáng)大,畢竟可以直接在數(shù)據(jù)庫中運(yùn)行 JavaScript 代碼,不過因為性能的關(guān)系,不適合在應(yīng)用中頻繁調(diào)用。

查詢命令還有幾個選項:

limit: 限制返回的結(jié)果數(shù)

skip: 跳過一些結(jié)果

sort: 對結(jié)果進(jìn)行排序

fields: 只返回指定的字段

副本集(Replica Set)和分片(Sharding)

MongoDB 的副本集采用一主多從的的集群方式。副本集中只有主節(jié)點(diǎn)可以寫入,其他節(jié)點(diǎn)從主節(jié)點(diǎn)同步。當(dāng)主節(jié)點(diǎn)故障時,從節(jié)點(diǎn)中會自動推選出一個新的主節(jié)點(diǎn)。當(dāng)故障的節(jié)點(diǎn)恢復(fù)后,會向其他節(jié)點(diǎn)同步到最新的數(shù)據(jù),然后成為一個從節(jié)點(diǎn)。

MongoDB 的分片是指,按照某個字段的值,將數(shù)據(jù)分為多份,儲存在不同的服務(wù)器上。客戶端會運(yùn)行一個 mongos 代替 mongod, mongos 相當(dāng)于一個路由,會根據(jù)請求和分片的設(shè)置,將請求拆分后發(fā)給不同的服務(wù)器,得到結(jié)果后再將結(jié)果組合起來發(fā)給客戶端。

分片可以與副本集同時使用,此時,每個分片都是一個副本級,這樣可以提供非常高的可用率和擴(kuò)展性。

http://jysperm.me/technology/1575

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

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/18711.html

相關(guān)文章

  • Ubuntu 17.10 mongoDB & Robo 3T 安裝經(jīng)驗

    摘要:可以用來在圖形界面中觀察我們對的修改是否生效。如果文件夾沒有上述權(quán)限,則需要按照下面命令執(zhí)行或者問題已經(jīng)在運(yùn)行,并監(jiān)聽端口。打開另外一個,輸入,出現(xiàn)交互式命令,并連接到默認(rèn)服務(wù)器。 學(xué)習(xí)爬蟲的時候需要把爬取的數(shù)據(jù)放入mongoDB數(shù)據(jù)庫進(jìn)行管理,Robo 3T是一個mongoDB數(shù)據(jù)庫可視化工具,它是一個跨平臺的MongoDB管理工具。可以用來在圖形界面中觀察我們對MongoDB的修改...

    宋華 評論0 收藏0
  • 聊聊MongoDB - MongoDB使用感想

    摘要:旨在為應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲解決方案。,是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。目前的最新版本為,最新版本的在我看來更像的數(shù)據(jù)庫,功能更是越發(fā)強(qiáng)大。一些主流的介紹。 簡述 工作中經(jīng)常接觸MongoDB,學(xué)習(xí)上也有對它進(jìn)行一些研究,感覺MongoDB這種Nosql類型的數(shù)據(jù)庫給我在開發(fā)上帶來很多便捷,同時也解決了很多程序開發(fā)過...

    lolomaco 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<