Mongodb 4.0 mongodbデータベースベース


mongodbデータベースベース
  • 一、概説
  • 1、mongodb概要
  • 2、MongoDBの特徴
  • 3、MongoDB適用シーン
  • 二、mongodb 4.0
  • をインストールする
  • 1、mongodb
  • を起動する
  • 2、mongodb
  • を閉じる
  • 三、多例
  • 四、データベース基本操作
  • 五、インポートエクスポート
  • 六、バックアップ・リカバリ
  • 七、クローン
  • 1、クローンデータベース
  • 2、クローンセット(表)


  • 一、概説
    1、mongodbの概要
    MongoDBは、プラットフォーム間でドキュメント向けのデータベースです.高性能、高可用性を実現し、容易に拡張できる分散ファイルストレージベースのオープンソースデータベースシステムであり、高負荷の場合、より多くのノードを追加することでサーバのパフォーマンスを保証します.
    ビッグデータ時代において、ビッグデータ量の処理はデータベースを考慮する最も重要な原因の一つとなっている.MongoDBの主な目標は、できるだけデータベースのパフォーマンスを向上させることであり、MongoDBの設計を大きく決定します.MongoDBは、メモリ・リソースをキャッシュとして使用して最大限のパフォーマンスを選択し、クエリーのために最も高速なインデックスを自動的に選択します.MongoDBは、データベースをできるだけ簡素化し、クライアントにできるだけ多くの操作を渡すことで、MongoDBが優れたパフォーマンスを維持できる理由の一つです.
    MongoDBは非リレーショナル・データベース(NoSQL)の中で最も機能が豊富で、最もリレーショナル・データベースに似ています.リレーショナル・モデルを使用しないのは、より良い拡張性を得るためであり、MongoDBには「行」の概念はありません.その実行方法は主に2つの概念に基づいています.集合(collection)とドキュメント(document)です.
    2、MongoDBの特徴
    Mongoは高性能で、オープンソースで、モードのないドキュメント型データベースであり、多くのシーンで従来のリレーショナル型データベースやキー/値格納方式に代わることができます.
    1、集合向けの記憶:対象及びJSON形式のデータを記憶するのに適している.
    2、MongoDBはインストールが簡単で、ドキュメント向けの記憶機能を提供し、操作が容易である.
    3、MongoDBはレプリケーション、高可用性と自動スライス機能を提供する.負荷が増加すると(より多くのストレージスペースとより強い処理能力が必要)、コンピュータネットワーク内の他のノードに分散することができます.これがいわゆるスライスです.
    4、MongoDBは豊富なクエリー式をサポートする.
    5、効率的な伝統的な記憶方式:バイナリデータと大型オブジェクト(写真や画像など)をサポートする.
    3、MongoDB適用シーン
    MongoDBは、Webアプリケーションに拡張性の高い高性能データストレージソリューションを提供します.MongoDBの主な適用分野は、Webサイトデータ、分散シーン、データキャッシュ、JSONドキュメントフォーマットストレージです.ビッグデータ量、高同時性、弱いトランザクションに適したインターネットアプリケーションは、数百万から10億レベルのデータ処理能力を内蔵し、Web 2.0とモバイルインターネットアプリケーションのデータストレージの要求をよく満たすことができます.
    二、mongodb 4.0のインストール
    ローカルyumソースの構成
    [root@mongodb yum.repos.d]# vim /etc/yum.repos.d/mongodb-org-4.0.repo
    
    [mongodb-org-4.0]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/4.0/x86_64/
    gpgcheck=0
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-4.0.asc
    

    yumインストール
    [root@mongodb yum.repos.d]# yum -y install mongodb-org
    
    [root@mongodb yum.repos.d]# whereis mongod   <-----  mongodb       
    mongod: /usr/bin/mongod /etc/mongod.conf /usr/share/man/man1/mongod.1
    

    プロファイルの変更
    [root@mongodb yum.repos.d]# vim /etc/mongod.conf
    
    systemLog:
      destination: file
      logAppend: true
      path: /var/log/mongodb/mongod.log    <----      
    storage:
      dbPath: /var/lib/mongo   <---        
      journal:
        enabled: true   <-----   true,      ,               ,  dbpath     journal  。
    processManagement:
      fork: true  # fork and run in background    //true                 
      pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
      timeZoneInfo: /usr/share/zoneinfo
    net:
      port: 27017
      bindIp: 0.0.0.0  //      ,      ,127.0.0.1        ,                IP  
    

    1、mongodbを起動する
    mongodbの起動
    [root@mongodb yum.repos.d]# systemctl start mongod
    
    [root@mongodb yum.repos.d]# netstat -anpt | grep 27017
    tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      20265/mongod 
    

    直接mongoはmongo shellに入ります:
    [root@mongodb ~]# mongo
    MongoDB shell version v4.0.20
    connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
    Implicit session: session {
          "id" : UUID("760a7212-96f3-4d9b-b426-94b331ad2b10") }
    MongoDB server version: 4.0.20
    Welcome to the MongoDB shell.
    For interactive help, type "help".
    For more comprehensive documentation, see
    	http://docs.mongodb.org/
    Questions? Try the support group
    	http://groups.google.com/group/mongodb-user
    Server has startup warnings: 
    ……      
    
    > show dbs    <-----     
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    > exit   <-----  ,   ctrl+c  
    bye
    [root@mongodb ~]# 
    

    2、mongodbを閉じる
    [root@mongodb ~]# systemctl stop mongod   <----    
    
    > db.shutdownServer();
    
    [root@mongodb ~]# mongod  --shutdown  --dbpath /data/mongodb/mongo
    

    備考:mongodコマンドのshutdownオプションは、MongoDBサービスをきれいに閉じることができます.以前にMongoDBサービスを開始した場合、「Crtl+C」サービスを使用するとクローズされ、現在進行中の操作が完了するのを待つため、依然としてクリーンなクローズ方式です.
    三、多実例
    デフォルトのプロファイルをコピーし、mongod 2.confと名付け、プロファイルを変更します.ログファイルとデータファイル、ポートも変更します.
    [root@mongodb etc]# cp -p mongod.conf mongod2.conf 
    
    [root@mongodb etc]# vim mongod2.conf 
    systemLog:
      path: /data/mongodb/mongod2.log
    storage:
      dbPath: /data/mongodb/mongo2
    net:
      port: 27018
    
    [root@mongodb etc]# 
    [root@mongodb etc]# mkdir -p /data/mongodb   <----      
    [root@mongodb etc]# cd /data/mongodb/
    [root@mongodb mongodb]# mkdir mongo
    [root@mongodb mongodb]# ls
    mongo
    [root@mongodb mongodb]# touch mongod2.log
    [root@mongodb mongodb]# chmod 777 mongod2.log  <----          
    [root@mongodb mongodb]# ls
    mongo  mongod2.log
    [root@mongodb mongodb]# which mongod
    /usr/bin/mongod
    [root@mongodb mongodb]# mongod -f /etc/mongod2.conf <---        
    about to fork child process, waiting until server is ready for connections.
    forked process: 20510
    child process started successfully, parent exiting
    

    起動後、次のコマンドで2番目のインスタンスに進みます.
    [root@mongodb mongodb]# mongo --port 27018    <-----        
    

    四、データベースの基本操作
    データベース・バージョンの表示
    > db.version() 
    4.0.20
    
    > use school;   //
    switched to db school
    

    現在のデータベースの表示
    > db 
    school
    

    データベースの表示
    > show dbs;   //                 
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    

    新規infoコレクション(テーブル)
    > db.createCollection('info')   //  info ,         ;                  ,          
    {
          "ok" : 1 }
    
    > show dbs;   //         school    
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    school  0.000GB
    

    表を表示する2つの方法
    > show collections   //   
    info
    > show tables;   //   
    info
    

    infoテーブルのデータの表示
    > db.info.find()   //               
    

    データを挿入
    > db.info.insert({
         "id":1,"name":"zhangsan","score":90,"hobby":["game","music","sport"]})
    WriteResult({
          "nInserted" : 1 }) 
    

    infoテーブルのデータの表示
    > db.info.find()
    {
          "_id" : ObjectId("5f56eafbbb50f14e91ed31e0"), "id" : 1, "name" : "zhangsan", "score" : 90, "hobby" : [ "game", "music", "sport" ] }
    

    別名の定義
    > a=db.info.find()  //           a
    {
          "_id" : ObjectId("5f56eafbbb50f14e91ed31e0"), "id" : 1, "name" : "zhangsan", "score" : 90, "hobby" : [ "game", "music", "sport" ] }
    

    id=1のレコードの詳細を表示
    > db.info.findOne({
         "id":1})   
    {
         
    	"_id" : ObjectId("5f56eafbbb50f14e91ed31e0"),
    	"id" : 1,
    	"name" : "zhangsan",
    	"score" : 90,
    	"hobby" : [
    		"game",
    		"music",
    		"sport"
    	]
    }
    

    データ型の表示
    > typeof(a.id)   
    number
    > typeof(a.name)
    string
    > typeof(a.score)
    number
    > typeof(a.hobby)
    object
    

    id=1のレコードのnameをtomに変更
    > db.info.update({
         "id":1},{
         $set:{
         "name":"tom"}})  
    WriteResult({
          "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    
    > a=db.info.find()
    {
          "_id" : ObjectId("5f56eafbbb50f14e91ed31e0"), "id" : 1, "name" : "tom", "score" : 90, "hobby" : [ "game", "music", "sport" ] }
    

    テーブルの削除
    > db.createCollection('test')  //  test 
    {
          "ok" : 1 }
    
    > show tables;
    info
    test
    
    > db.test.drop()  //  test 
    true
    > show tables;
    info
    

    データベースの削除
    > use myschool   //  myschool   
    switched to db myschool
    > db.createCollection('a')
    {
          "ok" : 1 }
    > show dbs
    admin     0.000GB
    config    0.000GB
    local     0.000GB
    myschool  0.000GB
    school    0.000GB
    > db.dropDatabase()      //     ,   use
    {
          "dropped" : "myschool", "ok" : 1 }
    > show dbs;
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    school  0.000GB
    

    infoテーブルのレコードを表示
    > use school
    switched to db school
    > show tables
    info
    > db.info.count()   
    1
    

    infoテーブルのレコードを100に追加(forループが必要)
    > for(var i=2;i<=100;i++)db.info.insert({
         "id":i,"name":"jack"+i}})
    WriteResult({
          "nInserted" : 1 })
    //   for           var
    > db.info.find()
    {
          "_id" : ObjectId("5f56eafbbb50f14e91ed31e0"), "id" : 1, "name" : "tom", "score" : 90, "hobby" : [ "game", "music", "sport" ] }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c4"), "id" : 2, "name" : "jack2" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c5"), "id" : 3, "name" : "jack3" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c6"), "id" : 4, "name" : "jack4" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c7"), "id" : 5, "name" : "jack5" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c8"), "id" : 6, "name" : "jack6" }
    ……
    {
          "_id" : ObjectId("5f570266a1451cb5e42060d6"), "id" : 20, "name" : "jack20" }
    Type "it" for more
    //   20   ,      it    
    > it
    ……      
    {
          "_id" : ObjectId("5f570266a1451cb5e4206126"), "id" : 100, "name" : "jack100" }
    

    五、インポートエクスポート
    -d:データベースの指定-c:テーブルの指定-o:エクスポートファイルの指定–file:どのファイルからインポートするかの指定
    schoolライブラリのinfoテーブルをエクスポートします.
    [root@mongodb ~]# mongoexport -d school -c info -o /opt/school.json
    2020-09-08T11:56:53.466+0800	connected to: localhost
    2020-09-08T11:56:53.467+0800	exported 1 record
    

    エクスポート・ファイルを表示するには、次の手順に従います.
    [root@mongodb ~]# vim /opt/school.json
    
    {
         "_id":{
         "$oid":"5f56eafbbb50f14e91ed31e0"},"id":1.0,"name":"tom","score":90.0,"hobby":["game","music","sport"]}
    

    インポート:(新しいテーブルinfo 2をインポートし、テーブルが存在しない場合、このテーブルを新規作成します)
    [root@mongodb ~]# mongoimport -d school -c info2 --file /opt/school.json
    2020-09-08T11:58:46.720+0800	connected to: localhost
    2020-09-08T11:58:46.732+0800	imported 1 document
    

    データベース検証へのアクセス
    [root@mongodb ~]# mongo
    
    > use school
    switched to db school
    > show tables
    info
    info2
    > db.info2.find()
    {
          "_id" : ObjectId("5f56eafbbb50f14e91ed31e0"), "id" : 1, "name" : "tom", "score" : 90, "hobby" : [ "game", "music", "sport" ] }
    

    条件ベースのエクスポート:(info表裏id=10のレコードをエクスポート)
    [root@mongodb ~]# mongoexport -d school -c info -q '{"id":{"$eq":10}}' -o /opt/top10.json
    2020-09-08T12:12:26.122+0800	connected to: localhost
    2020-09-08T12:12:26.123+0800	exported 1 record
    

    クエリー条件オペレータ:(=)=======================================================================================
    エクスポート・ファイルを表示するには、次の手順に従います.
    [root@mongodb ~]# vim /opt/top10.json 
    
    {
         "_id":{
         "$oid":"5f570266a1451cb5e42060cc"},"id":10.0,"name":"jack10"}
    

    六、バックアップ・リカバリ
    バックアップコマンドmongodumpリカバリコマンドmongorestore
    shellコマンドラインで操作する必要があります
    [root@mongodb ~]# mkdir /bak   //      
    [root@mongodb ~]# mongodump -d school -o /bak   //   /bak  
    2020-09-08T12:15:12.357+0800	writing school.info to 
    2020-09-08T12:15:12.357+0800	writing school.info2 to 
    2020-09-08T12:15:12.359+0800	done dumping school.info2 (1 document)
    2020-09-08T12:15:12.359+0800	done dumping school.info (100 documents)
    [root@mongodb ~]# ls /bak/
    school
    [root@mongodb ~]# cd /bak/school
    [root@mongodb school]# ls
    info2.bson  info2.metadata.json  info.bson  info.metadata.json
    

    バックアップ・ディレクトリからデータベースをリカバリします.データベースが存在しない場合は自動的に作成されます.
    [root@mongodb school]# mongorestore -d school2 --dir=/bak/school
    2020-09-08T12:17:39.469+0800	the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
    2020-09-08T12:17:39.470+0800	building a list of collections to restore from /bak/school dir
    2020-09-08T12:17:39.470+0800	reading metadata for school2.info2 from /bak/school/info2.metadata.json
    2020-09-08T12:17:39.471+0800	reading metadata for school2.info from /bak/school/info.metadata.json
    2020-09-08T12:17:39.477+0800	restoring school2.info2 from /bak/school/info2.bson
    2020-09-08T12:17:39.483+0800	restoring school2.info from /bak/school/info.bson
    2020-09-08T12:17:39.484+0800	no indexes to restore
    2020-09-08T12:17:39.484+0800	finished restoring school2.info2 (1 document)
    2020-09-08T12:17:39.487+0800	no indexes to restore
    2020-09-08T12:17:39.487+0800	finished restoring school2.info (100 documents)
    2020-09-08T12:17:39.487+0800	done
    [root@mongodb school]# 
    //       ,            ,    ,      
    

    データベース検証へのアクセス
    > show dbs;
    admin    0.000GB
    config   0.000GB
    local    0.000GB
    school   0.000GB
    school2  0.000GB
    > use school2
    switched to db school2
    > show tables
    info
    info2
    

    七、クローン
    1、クローンデータベース
    > db.copyDatabase("school","share")   //     ,   share
    WARNING: db.copyDatabase is deprecated. See http://dochub.mongodb.org/core/copydb-clone-deprecation
    {
         
    	"note" : "Support for the copydb command has been deprecated. See http://dochub.mongodb.org/core/copydb-clone-deprecation",
    	"ok" : 1
    }
    > show dbs;
    admin    0.000GB
    config   0.000GB
    local    0.000GB
    school   0.000GB
    school2  0.000GB
    share    0.000GB
    

    db.copyDatabaseは4.0以降は廃止されましたが、依然として成功しています.
    2、クローン集合(表)
    複数インスタンスを作成して複数インスタンスのデータディレクトリを作成するには
    [root@mongodb school]# cd /data/mongodb/
    [root@mongodb mongodb]# touch mongod{
         3,4}.log
    [root@mongodb mongodb]# chmod 777 mongod*.log
    [root@mongodb mongodb]# mkdir mongo{
         2,3,4}
    

    コンフィギュレーションファイルの変更(省略、前述)起動インスタンス3とインスタンス4
    [root@mongodb etc]# mongod -f /etc/mongod3.conf 
    about to fork child process, waiting until server is ready for connections.
    forked process: 81392
    child process started successfully, parent exiting
    
    [root@mongodb etc]# mongod -f /etc/mongod4.conf 
    about to fork child process, waiting until server is ready for connections.
    forked process: 81422
    child process started successfully, parent exiting
    

    リスニングポートを表示すると、mongodbインスタンスが4つ起動していることがわかります.
    [root@mongodb etc]# netstat -anpt
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      20265/mongod        
    tcp        0      0 0.0.0.0:27018           0.0.0.0:*               LISTEN      20510/mongod        
    tcp        0      0 0.0.0.0:27019           0.0.0.0:*               LISTEN      81392/mongod        
    tcp        0      0 0.0.0.0:27020           0.0.0.0:*               LISTEN      81422/mongod   
     
    

    クローンテーブルはインスタンスに入り、データベースに入り、クローンの操作db.runCommandを実行する必要があります.
    [root@mongodb ~]# mongo --port 27018
    > show dbs;
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    
    > db.runCommand({
         "cloneCollection":"school.info","from":"192.168.245.207:27017"})
    {
          "ok" : 1 }
    > 
    > show dbs;
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    school  0.000GB
    > use school
    switched to db school
    > show tables
    info
    > db.info.find()
    {
          "_id" : ObjectId("5f56eafbbb50f14e91ed31e0"), "id" : 1, "name" : "tom", "score" : 90, "hobby" : [ "game", "music", "sport" ] }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c4"), "id" : 2, "name" : "jack2" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c5"), "id" : 3, "name" : "jack3" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c6"), "id" : 4, "name" : "jack4" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c7"), "id" : 5, "name" : "jack5" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c8"), "id" : 6, "name" : "jack6" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060c9"), "id" : 7, "name" : "jack7" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060ca"), "id" : 8, "name" : "jack8" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060cb"), "id" : 9, "name" : "jack9" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060cc"), "id" : 10, "name" : "jack10" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060cd"), "id" : 11, "name" : "jack11" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060ce"), "id" : 12, "name" : "jack12" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060cf"), "id" : 13, "name" : "jack13" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060d0"), "id" : 14, "name" : "jack14" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060d1"), "id" : 15, "name" : "jack15" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060d2"), "id" : 16, "name" : "jack16" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060d3"), "id" : 17, "name" : "jack17" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060d4"), "id" : 18, "name" : "jack18" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060d5"), "id" : 19, "name" : "jack19" }
    {
          "_id" : ObjectId("5f570266a1451cb5e42060d6"), "id" : 20, "name" : "jack20" }
    Type "it" for more
    >