<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                >[info] MongoDB 簡介 **為什么學習mongodb:** mongodb在項目中很有用,可用于像商品詳情中的數據聚合緩存。BSON 是一種類似 JSON 的二進制形式的存儲格式,是 Binary JSON 的簡稱。 * MongoDB 更類似 MySQL,**支持字段索引、游標操作**,其優勢在于**查詢功能比較強大**,**擅長查詢 JSON 數據**,**能存儲海量數據**,**但是不支持事務**。 * MySQL 在大數據量時**效率**顯著**下降**,MongoDB 更多時候作為關系數據庫的一種替代。 * Redis 是一個**開源**(BSD許可)的,內存中的數據結構存儲系統,它可以用作數據庫、**緩存**和**消息中間件**。它支持**多種類型的數據結構**,如 字符串(strings), 散列(hashes),列表(lists), 集合(sets), 有序集合(sorted sets) 與范圍查詢, bitmaps, hyperloglogs 和 地理空間(geospatial) 索引半徑查詢。 Redis 內置了 復制(replication),LUA腳本(Lua scripting), LRU驅動事件(LRU eviction),事務(transactions) 和不同級別的 磁盤持久化(persistence),并通過 Redis哨兵(Sentinel)和自動 分區(Cluster)提供高可用性(high availability) MongoDB 將數據存儲為一個**文檔**,數據結構由鍵值(key=>value)對組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。 >[info] MongoDB概念解析 ![](https://img.kancloud.cn/32/56/32566086c08f5cca39933cea3bf07879_1007x392.png) #### **1. MongoDB 關鍵術語** #### **1.1 數據庫** 一個mongodb中可以建立多個數據庫。 MongoDB的默認數據庫為"db",該數據庫存儲在data目錄中。 MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中。 * **"show dbs"** 命令可以顯示所有數據的列表。 * **"db"** 命令可以顯示當前數據庫對象或集合。 * **"use"** 命令,可以連接到一個指定的數據庫。 * 數據庫名是有保留。 如下: * **admin**:從權限的角度來看,這是"root"數據庫。要是將一個用戶添加到這個數據庫,這個用戶自動繼承所有數據庫的權限。 * **local:** 這個數據永遠不會被復制,可以用來存儲限于本地單臺服務器的任意集合 * **config**: 當Mongo用于分片設置時,config數據庫在內部使用,用于保存分片的相關信息 #### **1.2 集合** 集合就是 MongoDB 文檔組,類似于 RDBMS (關系數據庫管理系統:Relational Database Management System)中的表格。 集合存在于數據庫中,集合沒有固定的結構,這意味著你在對集合可以插入**不同格式和類型的數據**,但通常情況下我們插入集合的數據都會有一定的關聯性。 #### **1.3 文檔(Document)** 文檔是一組鍵值(key-value)對(即 BSON)。MongoDB 的文檔不需要設置相同的字段,并且相同的字段不需要相同的數據類型,這與關系型數據庫有很大的區別, ~~~ {"site":"www.sixstaredu.com", "name":"winner"} ~~~ #### **1.4 元數據** 數據庫的信息是存儲在集合中。它們使用了系統的命名空間:`dbname.system.*` ![](https://img.kancloud.cn/31/f9/31f9302d97a008e1a3f9616a1e5ba5f3_1001x295.png) #### **1.5 MongoDB 數據類型** ![](https://img.kancloud.cn/d3/4f/d34f0376d7249a24b31310ca506f49b6_1208x840.png) MongoDB 中存儲的文檔必須有一個 \_id 鍵。這個鍵的值可以是任何類型的,默認是個 ObjectId 對象 由于 ObjectId 中保存了創建的時間戳,所以你不需要為你的文檔保存時間戳字段,你可以通過 getTimestamp 函數來獲取文檔的創建時間: ~~~ > var newObject = ObjectId() > newObject.getTimestamp() ISODate("2017-11-25T07:21:10Z") ~~~ #### **1.6 連接** 語法: ~~~ mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]] ~~~ * **mongodb://** 這是固定的格式,必須要指定。 * **username:password@** 可選項,如果設置,在連接數據庫服務器之后,驅動都會嘗試登錄這個數據庫 * **host1** 必須的指定至少一個host, host1 是這個URI唯一要填寫的。它指定了要連接服務器的地址。如果要連接復制集,請指定多個主機地址。 * **portX** 可選的指定端口,如果不填,默認為27017 * **/database** 如果指定username:password@,連接并驗證登錄指定數據庫。若不指定,默認打開 test 數據庫。 * **?options** 是連接選項。如果不使用/database,則前面需要加上/。所有連接選項都是鍵值對name=value,鍵值對之間通過&或;(分號)隔開 標準的連接格式包含了多個選項(options): ![](https://img.kancloud.cn/3a/24/3a24d369e28880f008fb6ebf2dcceb14_1009x744.png) 以安全模式連接到replica set,并且等待至少兩個復制服務器成功寫入,超時時間設置為2秒。 ~~~ mongodb://host1,host2,host3/?safe=true;w=2;wtimeoutMS=2000 ~~~ #### **1.7 創建數據庫&集合** 1. 如果數據庫不存在,則創建數據庫,否則切換到指定數據庫: ~~~ use DATABASE_NAME ~~~ 2. MongoDB 中使用 **createCollection()** 方法來創建集合: ~~~ db.createCollection(name, options) ~~~ * name: 要創建的集合名稱 * options: 可選參數, 指定有關內存大小及索引的選 ![](https://img.kancloud.cn/08/a1/08a1fbd5dc811b34de9751dbd7998fc9_1002x404.png) #### **1.8 刪除數據庫&集合** 1. 刪除數據庫: ~~~ db.dropDatabase() -- 刪除當前數據庫,默認為 test,你可以使用 db 命令查看當前數據庫名 ~~~ 2. 刪除集合: ~~~ db.collection.drop() # show collections 命令查看已存在的集合 >show collections mycol mycol2 system.indexes runoob > #刪除集合 mycol2 >db.mycol2.drop() true > ~~~ >[info] Redis和MongoDB的區別(面試受用) 之前也用過redis,當時是用來存儲一些熱數據,量也不大,但是操作很頻繁。現在項目中用的是MongoDB,目前是百萬級的數據,將來會有千萬級、億級。 就Redis和MongoDB來說,大家一般稱之為Redis緩存、MongoDB數據庫。這也是有道有理有根據的, Redis主要把數據存儲在內存中,其“緩存”的性質遠大于其 **“數據存儲“** 的性質,其中數據的增刪改查也只是像變量操作一樣簡單; MongoDB卻是一個 **“存儲數據”** 的系統,增刪改查可以添加很多where條件,就像SQL數據庫一樣靈活,這一點在面試的時候很受用。 ##### **1. 內存管理機制** Redis 數據全部存在內存,定期寫入磁盤,當內存不夠時,可以選擇指定的 LRU 算法刪除數據。 MongoDB 數據存在內存,由 linux系統 mmap 實現,當內存不夠時,只將熱點數據放入內存,其他數據存在磁盤。 #### **2. 支持的數據結構** Redis 支持的數據結構豐富,包括hash、set、list等。 MongoDB 數據結構比較單一,但是支持豐富的數據表達,索引,最類似關系型數據庫,支持的查詢語言非常豐富。 #### **3. 數據量和性能** 當物理內存夠用的時候,redis>mongodb>mysql 當物理內存不夠用的時候,redis和mongodb都會使用虛擬內存。 實際上如果redis要開始虛擬內存,那很明顯要么加內存條,要么你換個數據庫了。 但是,mongodb不一樣,只要,業務上能保證,冷熱數據的讀寫比,使得熱數據在物理內存中,mmap的交換較少。 mongodb還是能夠保證性能。 #### **4. 性能** mongodb依賴內存,TPS較高;Redis依賴內存,TPS非常高。性能上Redis優于MongoDB。 #### **5. 可靠性** mongodb從1.8版本后,采用binlog方式(MySQL同樣采用該方式)支持持久化,增加可靠性; Redis依賴快照進行持久化;AOF增強可靠性;增強可靠性的同時,影響訪問性能。 可靠性上MongoDB優于Redis。 #### **6. 數據分析** mongodb內置數據分析功能(mapreduce);而Redis不支持。 #### **7. 事務** Redis 事務支持比較弱,只能保證事務中的每個操作連續執行;mongodb不支持事務。 #### **8. 集群** MongoDB 集群技術比較成熟,Redis從3.0開始支持集群。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看