MongDB

1.什麼是MongoDB

MongoDB是一個文檔數據庫,提供好的性能,領先的非關係型數據庫。採用BSON存儲文檔數據。
BSON()是一種類json的一種二進制形式的存儲格式,簡稱Binary JSON.
相對於json多了date類型和二進制數組。

 

2.MongoDB的優點有哪些

  • 面向文檔的存儲:以 JSON 格式的文檔保存數據。
  • 任何屬性均可以創建索引。
  • 複製以及高可擴展性。
  • 自動分片。
  • 豐富的查詢功能。
  • 快速的即時更新。

 

3 什麼是數據庫

  數據庫能夠當作是一個電子化的文件櫃,用戶能夠對文件中的數據運行新增、檢索、更新、刪除等操做。數據庫是一個
全部集合的容器,在文件系統中每個數據庫都有一個相關的物理文件。

 

4.什麼是集合(表)

    集合就是一組 MongoDB 文檔。它至關於關係型數據庫(RDBMS)中的表這種概念。集合位於單獨的一個數據庫中。
一個集合內的多個文檔能夠有多個不一樣的字段。通常來講,集合中的文檔都有着相同或相關的目的。

 

5 什麼是文檔(記錄)

  文檔由一組key value組成。文檔是動態模式,這意味着同一集合裏的文檔不須要有相同的字段和結構。在關係型
數據庫中table中的每一條記錄至關於MongoDB中的一個文

 

6 MongoDB和關係型數據庫術語對比圖

 

7.什麼是非關係型數據庫

  非關係型數據庫的顯著特色是不使用SQL做爲查詢語言,數據存儲不須要特定的表格模式。

 

8 爲何用MOngoDB?

  • 架構簡單
  • 沒有複雜的鏈接
  • 深度查詢能力,MongoDB支持動態查詢。
  • 容易調試
  • 容易擴展
  • 不須要轉化/映射應用對象到數據庫對象
  • 使用內部內存做爲存儲工做區,以便更快的存取數據。

 

9 在哪些場景使用MongoDB

  • 大數據
  • 內容管理系統
  • 移動端Apps
  • 數據管理

 10 MongoDB中的命名空間是什麼意思?

mongodb存儲bson對象在叢集(collection)中.數據庫名字和叢集名字以句點連結起來叫作名字空間(namespace).

  一個集合命名空間又有多個數據域(extent),集合命名空間裏存儲着集合的元數據,好比集合名稱,集合的
第一個數據域和最後一個數據域的位置等等。而一個數據域由若干條文檔(document)組成,每一個數據域都有一個
頭部,記錄着第一條文檔和最後一條文檔的爲知,以及該數據域的一些元數據。extent之間,document之間經過
雙向鏈表鏈接。 索引的存儲數據結構是B樹,索引命名空間存儲着對B樹的根節點的指針。

 

11 monogodb 中的分片什麼意思

  分片是將數據水平切分到不一樣的物理節點。當應用數據愈來愈大的時候,數據量也會愈來愈大。當數據量增加
時,單臺機器有可能沒法存儲數據或可接受的讀取寫入吞吐量。利用分片技術能夠添加更多的機器來應對數據量增長
以及讀寫操做的要求。

 

12 爲何要在MongoDB中使用分析器

  mongodb中包括了一個能夠顯示數據庫中每一個操做性能特色的數據庫分析器.經過這個分析器你能夠找到比預期慢
的查詢(或寫操做);利用這一信息,好比,能夠肯定是否須要添加索引.

 

13 .MongoDB支持主鍵外鍵關係嗎

  默認MongoDB不支持主鍵和外鍵關係。 用Mongodb自己的API須要硬編碼才能實現外鍵關聯,不夠直觀且難度
較大

 

 14 MongoDB支持哪些數據類型

    • String
    • Integer
    • Double
    • Boolean
    • Object
    • Object ID
    • Arrays
    • Min/Max Keys
    • Datetime
    • Code
    • Regular Expression等

 

15 爲何要在MongoDB中用"Code"數據類型

"Code"類型用於在文檔中存儲 JavaScript 代碼。

 

16 爲何要在MongoDB中用"Regular Expression"數據類型

"Regular Expression"類型用於在文檔中存儲正則表達式

 

17 爲何在MongoDB中使用"Object ID"數據類型

"ObjectID"數據類型用於存儲文檔id

 

18"ObjectID"有哪些部分組成

一共有四部分組成:時間戳、客戶端ID、客戶進程ID、三個字節的增量計數器

 

19 在MongoDb中什麼是索引

    索引用於高效的執行查詢,沒有索引的MongoDB將掃描整個集合中的全部文檔,這種掃描效率很低,須要處理大量
的數據. 索引是一種特殊的數據結構,將一小塊數據集合保存爲容易遍歷的形式.索引可以存儲某種特殊字段或字段集的
值,並按照索引指定的方式將字段值進行排序.

 

20 如何添加索引

使用db.collection.createIndex()在集合中建立一個索引

 

21.如何查詢集合中的文檔

db.collectionName.find({key:value})

 

22用什麼方法能夠格式化輸出結果

db.collectionName.find().pretty()

 

23 如何使用"AND"或"OR"條件循環查詢集合中的文檔

db.mycol.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()

 

24 更新數據

db.collectionName.update({key:value},{$set:{newkey:newValue}})

 

25 如何刪除文檔

db.collectionName.remove({key:value})

 

26 在MongoDB中如何排序

並使用 1 和 -1 來指定排序方式,其中 1 表示升序,而 -1 表示降序。javascript

db.connectionName.find({key:value}).sort({columnName:1})

 

27 什麼是聚合

  聚合操做可以處理數據記錄並返回計算結果。聚合操做能將多個文檔中的值組合起來,對成組數據執行各類操做,返回單一的結果。它至關於 SQL 中的 count(*) 組合 group by。對於 MongoDB 中的聚合操做,應該使用aggregate()方法。java

db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

 

28 在MongoDB中什麼是副本集(避免單點故障)

    在MongoDB中副本集由一組MongoDB實例組成,包括一個主節點多個次節點,MongoDB客戶端的全部數據都
寫入主節點(Primary),副節點從主節點同步寫入數據,以保持全部複製集內存儲相同的數據,提升數據可用性。

 

29 什麼是NoSQL數據庫?NoSQL和RDBMS有什麼區別?在哪些狀況下使用和不使用NoSQL數據庫?

 NoSQL是非關係型數據庫,NoSQL = Not Only SQL。
關係型數據庫採用的結構化的數據,NoSQL採用的是鍵值對的方式存儲數據。 在處理非結構化/半結構化的大數據時;在水平方向上進行擴展時;隨時應對動態增長的數據項時能夠優先考慮
使用NoSQL數據庫。 在考慮數據庫的成熟度;支持;分析和商業智能;管理及專業性等問題時,應優先考慮關係型數據庫。

 

30 MongoDB支持存儲過程嗎?若是支持的話,怎麼用?

MongoDB支持存儲過程,它是javascript寫的,保存在db.system.js表中。

 

31如何理解MongoDB中的GridFS機制,MongoDB爲什麼使用GridFS來存儲文件?

  GridFS是一種將大型文件存儲在MongoDB中的文件規範。使用GridFS能夠將大文件分隔成多個小文檔存放,這樣咱們可以有效的保存大文檔,並且解決了BSON對象有限制的問題。mysql

 

32 爲何MongoDB的數據文件很大?

  MongoDB採用的預分配空間的方式來防止文件碎片。正則表達式

 

33 當更新一個正在被遷移的塊(Chunk)上的文檔時會發生什麼?

  更新操做會當即發生在舊的塊(Chunk)上,而後更改纔會在全部權轉移前複製到新的分片上。sql

 

34 MongoDB在A:{B,C}上創建索引,查詢A:{B,C}和A:{C,B}都會使用索引嗎?

  不會,只會在A:{B,C}上使用索引。mongodb

 

35 mongodb成爲最好nosql數據庫的緣由是什麼?

  面向文件的 高性能 高可用性 易擴展性 豐富的查詢語言數據庫

 

36 若是用戶移除對象的屬性,該屬性是否從存儲層中刪除?

  是的,用戶移除屬性而後對象會從新保存(re-save()).json

 

37 容許空值null嗎?

  對於對象成員而言,是的.然而用戶不可以添加空值(null)到數據庫叢集(collection)由於空值不是對象.然而用戶可以添加空對象{}.數組

 

38 更新操做馬上fsync到磁盤?

  不會,磁盤寫操做默認是延遲執行的.寫操做可能在兩三秒(默認在60秒內)後到達磁盤.例如,若是一秒內數據庫收到一千個對一個對象遞增的操做,僅刷新磁盤一次.服務器

 

39 如何執行事務/加鎖?

  mongodb沒有使用傳統的鎖或者複雜的帶回滾的事務,由於它設計的宗旨是輕量,快速以及可預計的高性能.能夠把它類比成mysql mylsam的自動提交模式.經過精簡對事務的支持,性能獲得了提高,特別是在一個可能會穿過多個服務器的系統裏.

 

40  啓用備份故障恢復須要多久?

  從備份數據庫聲明主數據庫宕機到選出一個備份數據庫做爲新的主數據庫將花費10到30秒時間.這期間在主數據庫上的操做將會失敗–包括寫入和強一致性讀取(strong consistent read)操做.然而,你還能在第二數據庫上執行最終一致性查詢(eventually consistent query)(在slaveok模式下),即便在這段時間裏.

 

41  什麼是master或primary?

  它是當前備份集羣(replica set)中負責處理全部寫入操做的主要節點/成員.在一個備份集羣中,當失效備援(failover)事件發生時,一個另外的成員會變成primary.

 

42  我應該啓動一個集羣分片(sharded)仍是一個非集羣分片的 mongodb 環境?

  (數據量大用集羣分片,數據量小用非集羣)

  爲開發便捷起見,咱們建議以非集羣分片(unsharded)方式開始一個 mongodb 環境,除非一臺服務器不足以存放你的初始數據集.從非集羣分片升級到集羣分片(sharding)是無縫的,因此在你的數據集還不是很大的時候不必考慮集羣分片(sharding).

 

43 分片(sharding)和複製(replication)是怎樣工做的?

  每個分片(shard)是一個分區數據的邏輯集合.分片可能由單一服務器或者集羣組成,咱們推薦爲每個分片(shard)使用集羣.

 

44數據在何時纔會擴展到多個分片(shard)裏?

  mongodb 分片是基於區域(range)的.因此一個集合(collection)中的全部的對象都被存放到一個塊(chunk)中.只有當存在多餘一個塊的時候,纔會有多個分片獲取數據的選項.如今,每一個默認塊的大小是 64mb,因此你須要至少 64 mb 空間才能夠實施一個遷移.

 

45 當我試圖更新一個正在被遷移的塊(chunk)上的文檔時會發生什麼?

  更新操做會當即發生在舊的分片(shard)上,而後更改纔會在全部權轉移(ownership transfers)前複製到新的分片上.

 

46 若是在一個分片(shard)中止或者很慢的時候,我發起一個查詢會怎樣?

  若是一個分片(shard)中止了,除非查詢設置了「partial」選項,不然查詢會返回一個錯誤.若是一個分片(shard)響應很慢,mongodb則會等待它的響應.

 

47 能夠把movechunk目錄裏的舊文件刪除嗎?

  沒問題,這些文件是在分片(shard)進行均衡操做(balancing)的時候產生的臨時文件.一旦這些操做已經完成,相關的臨時文件也應該被刪除掉.但目前清理工做是須要手動的,因此請當心地考慮再釋放這些文件的空間.

 

48 若是塊移動操做(movechunk)失敗了,我須要手動清除部分轉移的文檔嗎?

   不須要,移動操做是一致(consistent)而且是肯定性的(deterministic);一次失敗後,移動操做會不斷重試;當完成後,數據只會出如今新的分片裏(shard).

 

49 mongodb是否支持事務

  MongoDB 4.0的新特性——事務(Transactions):MongoDB 是不支持事務的,所以開發者在須要用到事務的時候,不得不借用其餘工具,在業務代碼層面去彌補數據庫的不足。

  事務和會話(Sessions)關聯,一個會話同一時刻只能開啓一個事務操做,當一個會話斷開,這個會話中的事務也會結束。

相關文章
相關標籤/搜索