乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      MongoDB

       印度阿三17 2021-01-30

      面試問(wèn)題

      介紹

      mongoDB 是一種文檔性的數(shù)據(jù)庫(kù)。文檔的數(shù)據(jù)庫(kù),即可以存放xml、json、bson類型系列的數(shù)據(jù)。

      這些數(shù)據(jù)具備自述性(self-describing),呈現(xiàn)分層的樹(shù)狀數(shù)據(jù)結(jié)構(gòu)。redis可以用hash存放簡(jiǎn)單關(guān)系型數(shù)據(jù)。

      mongoDB 存放json格式數(shù)據(jù)。沒(méi)有事務(wù)控制。數(shù)據(jù)庫(kù)(數(shù)據(jù)庫(kù))-----》集合(表)—>文檔(記錄行)—》(域)字段—》索引—》不支持表鏈接查(不能表與表之間鏈接查詢)

      適合場(chǎng)景:事件記錄、內(nèi)容管理或者博客平臺(tái),比如評(píng)論系統(tǒng)。

      mongodb持久化原理

      mongodb啟動(dòng)時(shí)會(huì)創(chuàng)建一個(gè)線程不斷循環(huán)用于從defer隊(duì)列中獲取持久化的數(shù)據(jù)寫(xiě)入到磁盤(pán)中。系統(tǒng)時(shí)間為90毫秒

      MongoDB的特點(diǎn)是什么?

      (1)面向文檔(2)高性能(3)高可用(4)易擴(kuò)展(5)豐富的查詢語(yǔ)言

      在哪些情況下使用和不使用NoSQL數(shù)據(jù)庫(kù)

      NoSQL是非關(guān)系型數(shù)據(jù)庫(kù),NoSQL = Not Only SQL。

      關(guān)系型數(shù)據(jù)庫(kù)采用的結(jié)構(gòu)化的數(shù)據(jù),NoSQL采用的是鍵值對(duì)的方式存儲(chǔ)數(shù)據(jù)。

      在處理非結(jié)構(gòu)化/半結(jié)構(gòu)化的大數(shù)據(jù)時(shí);在水平方向上進(jìn)行擴(kuò)展時(shí);隨時(shí)應(yīng)對(duì)動(dòng)態(tài)增加的數(shù)據(jù)項(xiàng)時(shí)可以優(yōu)先考慮使用NoSQL數(shù)據(jù)庫(kù)。

      在考慮數(shù)據(jù)庫(kù)的成熟度;支持;分析和商業(yè)智能;管理及專業(yè)性等問(wèn)題時(shí),應(yīng)優(yōu)先考慮關(guān)系型數(shù)據(jù)庫(kù)。

      對(duì)redis、memcache、mongoDB 對(duì)比

      1. 性能
        都比較高,性能對(duì)我們來(lái)說(shuō)應(yīng)該都不是瓶頸
        總體來(lái)講,TPS(每秒事務(wù)處理量)方面redis和memcache差不多,要大于mongodb

      2. 操作的便利性
        memcache數(shù)據(jù)結(jié)構(gòu)單一
        redis豐富一些,數(shù)據(jù)操作方面,redis更好一些,較少的網(wǎng)絡(luò)IO次數(shù)
        mongodb支持豐富的數(shù)據(jù)表達(dá),索引,最類似關(guān)系型數(shù)據(jù)庫(kù),支持的查詢語(yǔ)言非常豐富

      3. 內(nèi)存空間的大小和數(shù)據(jù)量的大小
        redis在2.0版本后增加了自己的VM特性,突破物理內(nèi)存的限制;可以對(duì)key value設(shè)置過(guò)期時(shí)間(類似memcache)
        memcache可以修改最大可用內(nèi)存,采用LRU算法
        mongoDB適合大數(shù)據(jù)量的存儲(chǔ),依賴操作系統(tǒng)VM做內(nèi)存管理,吃內(nèi)存也比較厲害,服務(wù)不要和別的服務(wù)在一起

      4. 可用性(單點(diǎn)問(wèn)題)
        對(duì)于單點(diǎn)問(wèn)題,
        redis,依賴客戶端來(lái)實(shí)現(xiàn)分布式讀寫(xiě);主從復(fù)制時(shí),每次從節(jié)點(diǎn)重新連接主節(jié)點(diǎn)都要依賴整個(gè)快照,無(wú)增量復(fù)制,因性能和效率問(wèn)題,
        所以單點(diǎn)問(wèn)題比較復(fù)雜;不支持自動(dòng)sharding,需要依賴程序設(shè)定一致hash 機(jī)制。
        一種替代方案是,不用redis本身的復(fù)制機(jī)制,采用自己做主動(dòng)復(fù)制(多份存儲(chǔ)),或者改成增量復(fù)制的方式(需要自己實(shí)現(xiàn)),一致性問(wèn)題和性能的權(quán)衡
        Memcache本身沒(méi)有數(shù)據(jù)冗余機(jī)制,也沒(méi)必要;對(duì)于故障預(yù)防,采用依賴成熟的hash或者環(huán)狀的算法,解決單點(diǎn)故障引起的抖動(dòng)問(wèn)題。
        mongoDB支持master-slave,replicaset(內(nèi)部采用paxos選舉算法,自動(dòng)故障恢復(fù)),auto sharding機(jī)制,對(duì)客戶端屏蔽了故障轉(zhuǎn)移和切分機(jī)制。

      5. 可靠性(持久化)
        對(duì)于數(shù)據(jù)持久化和數(shù)據(jù)恢復(fù)
        redis支持(快照、AOF):依賴快照進(jìn)行持久化,aof增強(qiáng)了可靠性的同時(shí),對(duì)性能有所影響
        memcache不支持,通常用在做緩存,提升性能;
        MongoDB從1.8版本開(kāi)始采用binlog方式支持持久化的可靠性

      6. 數(shù)據(jù)一致性(事務(wù)支持)
        Memcache 在并發(fā)場(chǎng)景下,用cas保證一致性
        redis事務(wù)支持比較弱,只能保證事務(wù)中的每個(gè)操作連續(xù)執(zhí)行
        mongoDB不支持事務(wù)

      7. 、應(yīng)用場(chǎng)景
        redis:數(shù)據(jù)量較小的更性能操作和運(yùn)算上
        memcache:用于在動(dòng)態(tài)系統(tǒng)中減少數(shù)據(jù)庫(kù)負(fù)載,提升性能;做緩存,提高性能(適合讀多寫(xiě)少,對(duì)于數(shù)據(jù)量比較大,可以采用sharding)
        MongoDB:主要解決海量數(shù)據(jù)的訪問(wèn)效率問(wèn)題

      開(kāi)發(fā)問(wèn)題

      安裝配置

      1. 安裝mongodbdb,不要安裝有中文的目錄。
      2. 配置存儲(chǔ)數(shù)據(jù)的目錄data和日志文件夾log(需要手動(dòng)設(shè)置)。
      3. 在mongo。conf文件中配置上面創(chuàng)建的文件夾
      4. 點(diǎn)擊mongod.exe啟動(dòng)數(shù)據(jù)庫(kù)(正常安裝之后就會(huì)在電腦上注冊(cè)啟動(dòng)了)

      連接mongodb

      mongodb的使用方式是客戶服務(wù)器模式,即使用一個(gè)客戶端連接mongodb數(shù)據(jù)庫(kù)(服務(wù)端)。
      1、 命令格式

      mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?
      

      options]]

      mongodb:// 固定前綴
      username:賬號(hào),可不填
      password:密碼,可不填
      host:主機(jī)名或ip地址,只有host主機(jī)名為必填項(xiàng)。
      port:端口,可不填,默認(rèn)27017
      /database:連接某一個(gè)數(shù)據(jù)庫(kù)
      ?options:連接參數(shù),key/value對(duì)
      例子:

      mongodb://localhost 連接本地?cái)?shù)據(jù)庫(kù)27017端口 
      mongodb://root:itcast@localhost 使用用戶名root密碼為itcast連接本地?cái)?shù)據(jù)庫(kù)27017端口
      mongodb://localhost,localhost:27018,localhost:27019,連接三臺(tái)主從服務(wù)器,端口為27017、27018、27019
      

      2、使用mongodb自帶的javascript shell(mongo.exe)連接
      3、使用studio3T連接
      4、使用java程序連接
      詳細(xì)參數(shù):http://mongodb./mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/
      添加依賴:

      <dependency>
          <groupId>org.mongodb</groupId>
          <artifactId>mongo‐java‐driver</artifactId>
          <version>3.4.3</version>
      </dependency>
      

      @Test
      public void testConnection(){
          //創(chuàng)建mongodb 客戶端
          MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
          //或者采用連接字符串
          //MongoClientURI connectionString = new    MongoClientURI("mongodb://root:root@localhost:27017");
          //MongoClient mongoClient = new MongoClient(connectionString);    
         //連接數(shù)據(jù)庫(kù)
          MongoDatabase database = mongoClient.getDatabase("test");
          // 連接collection
          MongoCollection<Document> collection = database.getCollection("student");
          //查詢第一個(gè)文檔
          Document myDoc = collection.find().first();
          //得到文件內(nèi)容 json串
          String json = myDoc.toJson();
          System.out.println(json);
      }
      

      數(shù)據(jù)庫(kù)操作語(yǔ)句

      查詢數(shù)據(jù)庫(kù)

      show dbs 查詢?nèi)繑?shù)據(jù)庫(kù)
      db 顯示當(dāng)前數(shù)據(jù)庫(kù)

      創(chuàng)建數(shù)據(jù)庫(kù)

      命令格式:use DATABASE_NAME

      例子:
      use test02
      有test02數(shù)據(jù)庫(kù)則切換到此數(shù)據(jù)庫(kù),沒(méi)有則創(chuàng)建。
      注意:
      新創(chuàng)建的數(shù)據(jù)庫(kù)不顯示,需要至少包括一個(gè)集合。

      刪除數(shù)據(jù)庫(kù)(慎用?。。。?/h4>

      命令格式:db.dropDatabase()
      例子:
      刪除test02數(shù)據(jù)庫(kù)
      先切換數(shù)據(jù)庫(kù):use test02
      再執(zhí)行刪除:db.dropDatabase()

      創(chuàng)建集合

      db.createCollection(name, options)
      name: 新創(chuàng)建的集合名稱
      options: 創(chuàng)建參數(shù)
      

      刪除集合

       db.collection.drop()
       例子:db.student.drop() 刪除student集合
      

      插入文檔

      mongodb中文檔的格式是json格式,下邊就是一個(gè)文檔,包括兩個(gè)key:_id主鍵和name

       {
          "_id" : ObjectId("5b2cc4bfa6a44812707739b5"),
      "name" : "黑馬程序員"
       }
      

      插入命令:

       db.COLLECTION_NAME.insert(document)
      

      每個(gè)文檔默認(rèn)以_id作為主鍵,主鍵默認(rèn)類型為ObjectId(對(duì)象類型),mongodb會(huì)自動(dòng)生成主鍵值。
      例子:

       db.student.insert({"name":"黑馬程序員","age":10})
      

      注意:同一個(gè)集合中的文檔的key可以不相同!但是建議設(shè)置為相同的。

      更新文檔

      db.collection.update(
         <query>,
         <update>,
         <options>
      )
      query:查詢條件,相當(dāng)于sql語(yǔ)句的where
      update:更新文檔內(nèi)容
      options:選項(xiàng)
      

      1、替換文檔
      將符合條件 “name”:"北京黑馬程序"的第一個(gè)文檔替換為{“name”:“北京黑馬程序員”,“age”:10}。

       db.student.update({"name":"黑馬程序員"},{"name":"北京黑馬程序員","age":10})
      

      2、 s e t 修 改 器 使 用 set修改器 使用 set修改器使用set修改器指定要更新的key,key不存在則創(chuàng)建,存在則更新。
      將符合條件 “name”:"北京黑馬程序"的所有文檔更新name和age的值。

       db.student.update({"name":"黑馬程序員"},{$set:{"name":"北京黑馬程序員","age":10}},{multi:true})
      

      multi:false表示更新第一個(gè)匹配的文檔,true表示更新所有匹配的文檔。

      刪除文檔

       db.student.remove(<query>)
       query:刪除條件,相當(dāng)于sql語(yǔ)句中的where
      

      1、刪除所有文檔
      db.student.remove({})
      2、刪除符合條件的文檔
      db.student.remove({“name”:“黑馬程序員”})

      查詢文檔

      db.collection.find(query, projection)
      query:查詢條件,可不填
      projection:投影查詢key,可不填
      

      查詢?nèi)?/p>

       db.student.find()
      

      查詢符合條件的記錄
      查詢name等為"黑馬程序員"的文檔。

       db.student.find({"name":"黑馬程序員"})
      

      投影查詢
      只顯示name和age兩個(gè)key,_id主鍵不顯示

       db.student.find({"name":"黑馬程序員"},{name:1,age:1,_id:0})
      

      數(shù)據(jù)庫(kù)操作用戶

      創(chuàng)建用戶

      創(chuàng)建root用戶,角色為root

      use admin
      db.createUser(
           {
             user:"root",
             pwd:"123",
             roles:[{role:"root",db:"admin"}]
           }
        )
      

      內(nèi)置角色如下:

      1. 數(shù)據(jù)庫(kù)用戶角色:read、readWrite;
      2. 數(shù)據(jù)庫(kù)管理角色:dbAdmin、dbOwner、userAdmin;
      3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
      4. 備份恢復(fù)角色:backup、restore;
      5. 所有數(shù)據(jù)庫(kù)角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、
        dbAdminAnyDatabase
      6. 超級(jí)用戶角色:root

      查詢用戶

      show users

      刪除用戶

      刪除test1用戶
      db.dropUser(“test1”)

      修改用戶

      先創(chuàng)建test1用戶:

      db.createUser(
           {
             user:"test1",
             pwd:"test1",
             roles:[{role:"root",db:"admin"}]
           }
        )
      

      修改test1用戶的角色為readWriteAnyDatabase

      use admin
      db.updateUser("test1",{roles:[{role:"readWriteAnyDatabase",db:"admin"}]})
      

      修改密碼

      修改 test1用戶的密碼為123

      use admin 
      db.changeUserPassword("test1","123")
      

      Spring Data MongoDB使用

      1. 根據(jù)mongo集合類型創(chuàng)建實(shí)體類
      2. 創(chuàng)建dao層繼承MongoRepository<實(shí)體類名,id類型(String)>
      3. 在service中注入使用。。。。如果使用分頁(yè)查詢需要?jiǎng)?chuàng)建pageable對(duì)象,通過(guò)Resquest。of()方法創(chuàng)建。
      來(lái)源:https://www./content-2-839451.html

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多