Mongodbデータベースベース(バージョン3.6.20)

38470 ワード

文書ディレクトリ
  • 一、Mongodb概要
  • 1.1概要
  • 1.2特徴
  • 1.3適用シーン
  • 1.4 redisとmongodbの比較
  • 二、mongodb
  • をインストールする
  • 三、マルチインスタンス
  • の構成方法
  • 四、基本操作
  • 4.1添削改ざん操作例
  • 4.2同じインスタンスでデータベースをコピー
  • 4.3プロセス管理
  • 五、エクスポート、インポート操作
  • 六、データベースのバックアップとリカバリ
  • 7、インスタンス間クローン集合動作
  • 一、Mongodbの概要
    1.1概要
    ●MongoDBは、分散ファイルに基づいて格納されるデータベースです.C++言語で作成されます.WEBアプリケーションに拡張性の高い高性能データストレージソリューションを提供することを目的としています.
    ●MongoDBは、プラットフォーム間でドキュメント向けのデータベースです.高性能、高可用性を実現し、容易に拡張できる分散ファイルストレージベースのオープンソースデータベースシステムであり、高負荷の場合、より多くのノードを追加することでサーバのパフォーマンスを保証します.
    ●ビッグデータ時代において、ビッグデータ量の処理はデータベースを考慮する最も重要な原因の一つとなっている.MongoDBの主な目標は、できるだけデータベースのパフォーマンスを向上させることであり、MongoDBの設計を大きく決定します.MongoDBは、メモリ・リソースをキャッシュとして使用して最大限のパフォーマンスを選択し、クエリーのために最も高速なインデックスを自動的に選択します.MongoDBは、データベースをできるだけ簡素化し、クライアントにできるだけ多くの操作を渡すことで、MongoDBが優れたパフォーマンスを維持できる理由の一つです.
    ●MongoDBは非関係データベース(NoSQL)の中で最も機能が豊富で、最も関係データベースに似ている.リレーショナル・モデルを使用しないのは、より良い拡張性を得るためであり、MongoDBには「行」の概念はありません.その実行方法は主に2つの概念に基づいています.集合(collection)とドキュメント(document)です.
    1.2特徴
    ●Mongoは高性能で、オープンソースで、モードのないドキュメント型データベースであり、多くのシーンで従来のリレーショナル型データベースまたはキー/値格納方式の代わりに使用することができる.
    ●1、集合向けの記憶:対象及びJSON形式のデータを記憶するのに適している.
    ●2、MongoDBはインストールが簡単で、ドキュメント向けの記憶機能を提供しており、操作が容易である.
    ●3、MongoDBはレプリケーション、高可用性、自動スライス機能を提供する.負荷が増加すると(より多くのストレージスペースとより強い処理能力が必要)、コンピュータネットワーク内の他のノードに分散することができます.これがいわゆるスライスです.
    ●4、MongoDBは豊富なクエリー式をサポートする.
    ●5、効率的な従来の記憶方式:バイナリデータ及び大型オブジェクト(例えば写真或いは画像)をサポートする.
    1.3適用シーン
    ●MongoDBはWebアプリケーションに拡張性の高い高性能データストレージソリューションを提供することができる.MongoDBの主な適用分野は、Webサイトデータ、分散シーン、データキャッシュ、JSONドキュメントフォーマットストレージです.大きなデータ量、高い同時性、弱いトランザクションに適したインターネットアプリケーションは、数百万から10億レベルのデータ処理能力を提供し、Web 2をよく満たすことができるレベル拡張メカニズムを内蔵している.0およびモバイルインターネットアプリケーションのデータストレージの要件.
    1.4 redisとmongodbの比較
    ●Redisは完全にメモリにデータを保存するデータベースであり、ディスクを使用するのは永続性の目的のためだけであり、Redisデータはすべてメモリに存在し、定期的にディスクに書き込まれ、メモリが足りない場合、指定されたLRUアルゴリズムを選択してデータを削除することができ、永続化はRDB方式またはaof方式を使用する.
    ●mongodbはドキュメント型の非関係型データベースであり、MongoDBはMySQLに似ており、フィールドインデックス、カーソル操作をサポートしている.その利点は、クエリー機能が比較的強く、JSONデータのクエリーが得意で、大量のデータを格納できるが、トランザクションはサポートされていないことである.
    ●mongodbのすべてのデータは実際にはハードディスクに格納され、操作するすべてのデータはmmapによってメモリのある領域にマッピングされる.●その後、mongodbはこの領域でデータの修正を行い、こまごましたハードディスクの操作を回避します.
    ●mmapの内容flushからハードディスクに至るのはオペレーティングシステムのことなので、mongodbがメモリでデータを修正すると、mmapデータflushがハードディスクに届く前にシステムがダウンし、データが失われます.
    二、mongodbのインストール
    1.公式yumソースインストールmongodbの構成
    [root@localhost yum.repos.d]# cd /etc/yum.repos.d/
    [root@localhost yum.repos.d]# vim mongodb-org.repo
    [mongodb]
    name=mongodb
    baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
    [root@localhost yum.repos.d]# yum list
    [root@localhost yum.repos.d]# yum -y install mongodb-org
    

    2.プロファイルリスニングアドレスの変更
    [root@localhost ~]# vim /etc/mongod.conf
    ...    
    net: 
      port: 27017       #    
      bindIp: 0.0.0.0  #    ,   127.0.0.1,      ,  0.0.0.0

    3.サービスを開始する.service
    [root@localhost ~]# systemctl start mongod.service
    [root@localhost ~]# systemctl stop firewalld.service
    [root@localhost ~]# setenforce 0
    [root@localhost ~]# mongo   #  mongo       
    ...    
    > show dbs    #       
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    

    三、マルチインスタンスの構成方法
    1.構成ファイルをコピーして新しいインスタンスを作成する
    [root@localhost ~]# cd /etc/
    [root@localhost etc]# cp -p mongod.conf mongod2.conf
    [root@localhost etc]# vim mongod2.conf
    ...    
    path: /data/mongodb/mongod2.log
    dbPath: /data/mongodb/mongo
    port: 27018
    [root@localhost etc]# mkdir -p /data/mongodb
    [root@localhost etc]# cd /data/mongodb/
    [root@localhost mongodb]# touch mongod2.log
    [root@localhost mongodb]# mkdir mongo
    

    2.新規作成したインスタンスをロード
    [root@localhost mongodb]# mongod -f /etc/mongod2.conf   
    about to fork child process, waiting until server is ready for connections.
    forked process: 14751
    child process started successfully, parent exiting
    [root@localhost mongodb]# mongo --port 27018     #       27018    
    > db.version()    #      
    3.6.20
    

    四、基本操作
    4.1削除・変更操作例
    > use school      'mongodb     ,    (        show dbs    )'
    switched to db school
    > db.createCollection('info')   ' school      info'
    {
          "ok" : 1 }
    > db.info.insert({
         "id":1,"name":"zhangsan","score":78,"hobby":["game","sport","talk"]})  '        '
    WriteResult({
          "nInserted" : 1 })
    > db.info.find()
    {
          "_id" : ObjectId("5f5dc4f3f03df9c767569daf"), "id" : 1, "name" : "zhangsan", "score" : 88, "hobby" : [ "game", "sport", "talk" ] }
    > for(var i=2;i<=100;i++)db.info.insert({
         "id":i,"name":"jack"+i})  '             '
    WriteResult({
          "nInserted" : 1 })
    > db.info.find()
    {
          "_id" : ObjectId("5f56e212cd5781b1ba9d5426"), "id" : 1, "name" : "zhangsan", "score" : 78, "hobby" : [ "game", "sport" ] }
    {
          "_id" : ObjectId("5f56e319cd5781b1ba9d5427"), "id" : 2, "name" : "jack2" }
    {
          "_id" : ObjectId("5f56e319cd5781b1ba9d5428"), "id" : 3, "name" : "jack3" }
    {
          "_id" : ObjectId("5f56e319cd5781b1ba9d5429"), "id" : 4, "name" : "jack4" }
    ...    
    Type "it" for more
    
    
    > db.info.findOne({
         "id":3})     #           
    {
          "_id" : ObjectId("5f56e319cd5781b1ba9d5428"), "id" : 3, "name" : "jack3" }
    > a=db.info.findOne({
         "id":2})
    {
          "_id" : ObjectId("5f56e319cd5781b1ba9d5427"), "id" : 2, "name" : "jack2" }
    > typeof(a.id)
    number
    > typeof(a.name)     '         '
    string
    > db.info.update({
         "id":10},{
         $set:{
         "name":"tom"}})   ' id=10       '
    WriteResult({
          "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
    > a=db.info.findOne({
         "id":10})
    {
          "_id" : ObjectId("5f56e319cd5781b1ba9d542f"), "id" : 10, "name" : "tom" }
    > db.createCollection('test')
    {
          "ok" : 1 }
    > show collections
    info
    test
    > db.test.drop()       '    '
    true
    > show collections   '    ;  show tables'
    info
    > use myscool
    switched to db myscool
    > db.createCollection('test')
    {
          "ok" : 1 }
    > show dbs
    admin    0.000GB
    config   0.000GB
    local    0.000GB
    myscool  0.000GB
    school   0.000GB
    > db.dropDatabase()     '   myschool,  use myschool'
    {
          "dropped" : "myscool", "ok" : 1 }
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    school  0.000GB
    

    4.2同じインスタンスでのデータベースのコピー
    > db.copyDatabase("school","share")   #  school ,     share
    {
          "ok" : 1 }
    

    4.3プロセス管理
    > db.currentOp()
    ...    
     "opid" : 880,     #     
    > db.killOp(880)
    

    五、エクスポート、インポート操作
    [root@localhost mongodb]# mongoexport -d school -c info -o /opt/school.json
    2020-09-08T10:10:38.155+0800    connected to: localhost
    2020-09-08T10:10:38.156+0800    exported 100 records
    -d:     
    -c:         
         .json  
    
        :
    [root@localhost mongodb]# mongoimport -d school -c test --file /opt/school.json 
    2020-09-08T10:11:56.382+0800    connected to: localhost
    2020-09-08T10:11:56.388+0800    imported 100 documents
    
          :
    [root@localhost mongodb]# mongoexport -d school -c info -q '{"id":{"$eq":10}}' -o /opt/test.json
      :
    -d:     
    -c:    
    

    六、データベースのバックアップとリカバリ
    バックアップライブラリschool
    [root@localhost mongodb]# mongodump -d school -o /backup/     
    2020-09-08T10:16:47.324+0800    writing school.info to
    2020-09-08T10:16:47.324+0800    writing school.test to
    2020-09-08T10:16:47.325+0800    done dumping school.test (100 documents)
    2020-09-08T10:16:47.325+0800    done dumping school.info (100 documents)
    [root@localhost mongodb]# cd /backup/
    [root@localhost backup]# ls
    school
    [root@localhost backup]# cd school/
    [root@localhost school]# ls
    info.bson  info.metadata.json  test.bson  test.metadata.json
    

    ライブラリをabcライブラリに復元(ライブラリが存在しない場合は直接新規)
    [root@localhost school]# mongorestore -d abc --dir /backup/school/   
    

    七、インスタンス間クローン集合操作
    ●27018ポートのインスタンスを作成した後、クローン集合操作を行う
    ●27018ポートのインスタンスクローン2701ポートのインスタンスschoolライブラリ内のinfoセット
    [root@localhost etc]# mongo --port 27018
    > show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    > db.runCommand({
         "cloneCollection":"school.info","from":"14.0.0.10: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