MongoDBの基礎知識

5053 ワード

マイクロサービスが流行して、私もますますMongoDBが好きになりました.MySQLを使う必要がない限り、私はMongoDBに傾いています.
MongoDB
MongoDBとは?
MongoDBはC++言語で作成され、分散ファイルストレージに基づくオープンソースデータベースシステムです.
高負荷の場合、より多くのノードを追加することで、サーバのパフォーマンスを保証できます.
MongoDBは、WEBアプリケーションに拡張性の高い高性能データストレージソリューションを提供することを目的としています.
MongoDBは、キー値(key=>value)のペアからなるデータ構造を持つドキュメントとしてデータを格納します.MongoDBドキュメントはJSONオブジェクトに似ています.フィールド値には、他のドキュメント、配列、およびドキュメント配列を含めることができます.
MongoDBの特徴
  • MongoDBはドキュメントストレージ向けのデータベースで、操作が簡単で簡単です.
  • MongoDBレコードでは、FirstName=「Sameer」、Address=「8 Gandhi Road」などの属性のインデックスを設定して、より高速なソートを実現できます.
  • ローカルまたはネットワークからデータミラーを作成できます.これにより、MongoDBの拡張性が向上します.
  • 負荷が増加すると(より多くの記憶領域とより強い処理能力が必要)、コンピュータネットワーク内の他のノードに分布することができる.これがいわゆるスライスである.
  • Mongoは豊富なクエリー式をサポートします.クエリー命令はJSON形式のタグを使用し、ドキュメントに埋め込まれているオブジェクトや配列を簡単にクエリーできます.
  • MongoDb update()コマンドを使用すると、置換が完了したドキュメント(データ)または指定されたデータフィールドを実装できます.
  • MongodbのMap/reduceは、主にデータの一括処理および集約操作に使用されます.
  • MapとReduce.Map関数はemit(key,value)を呼び出して集合内のすべてのレコードを遍歴し,keyとvalueをReduce関数に渡して処理する.
  • Map関数とReduce関数はJavascriptを用いて記述する、db.runCommandまたはmapreduceコマンドは、MapReduce操作を実行します.
  • GridFSは、大量の小さなファイルを格納するために使用できるMongoDBに組み込まれた機能です.
  • MongoDBはサービス側でスクリプトを実行することを許可し、Javascriptである関数を記述し、直接サービス側で実行することもできるし、関数の定義をサービス側に保存し、次回直接呼び出すこともできる.
  • MongoDBは各種プログラミング言語をサポートしている:RUBY、PYTHON、JAVA、C++、PHP、C#など多種の言語.
  • MongoDBのインストールは簡単です.

  • MongoDBと他のデータベースの比較
    MongoDBとMySQL
    MongoDB独自のデータ処理方式により、ホットスポットデータをメモリにロードできるため、クエリーにとって、同時にBSON方式を採用してデータを保存するため、JSON形式のデータに対して非常に良い支持性と友好的な表構造の修正性を持って、ドキュメント式の記憶方式、データは友好的に見ることができます;データベースのスライスクラスタの負荷は非常に良い拡張性と非常に良い自動フェイルオーバ(大賛)を持っています.
    不足:データベースのクエリーは特有のクエリー方式を採用して、一定の学習コストがあります(高くありません);インデックスはあまり滴りません;ロックはcollectionレベルまで提供することができて、まだ行級のロックができません;事務のメカニズムがありません(ロールバックすることができません);学習資料はきっとMySQLの多くありません.
    MongoDBとHadoopの違い
    MongoDBはデータを操作するアプリケーションシステムに重点を置き,Hadoopはデータを分析統計するアプリケーションに重点を置いている.
    MongoDBはデータベースの読み書き性能に極めて高い要求を持つアプリケーションシーン(memoryを消費する)を満たすことができ、一般的にこれらのアプリケーションの応答遅延は10 ms以下、さらに低く制御されることが要求されるが、Hadoopは毎回の読み書き操作に大量のデータを含む(Hadoopは大量のデータを数回操作するシーンに適しています)集約分析で大量のデータを処理します.この分析は一般的にMapReduceを歩き、高い遅延(数分から数時間)をもたらします.
    MongoDBクエリー
    クエリー構文
    db.collection.find(query, projection).pretty()

    collection:ドキュメント名、またはgetCollection('col_name')と書くことができます
    Query:オプション、クエリーオペレータを使用してクエリー条件を指定
    Projection:オプションで、投影オペレータを使用して返されるキーを指定します.クエリー時にドキュメント内のすべてのキー値を返します.このパラメータを省略するだけです(デフォルトでは省略).
    pretty():読みやすい
    条件構文
    操作
    書式設定

    に等しい{: } db.col.find({"by":" "}).pretty()
    より小さい{:{$lt:}} db.col.find({"likes":{$lt:50}}).pretty()
    以下{:{$lte:}} db.col.find({"likes":{$lte:50}}).pretty()
    より大きい{:{$gt:}} db.col.find({"likes":{$gt:50}}).pretty()
    以上{:{$gte:}} db.col.find({"likes":{$gte:50}}).pretty()
    等しくない{:{$ne:}} db.col.find({"likes":{$ne:50}}).pretty()
    AND構文
    db.col.find({key1:value1, key2:value2}).pretty()

    OR構文
    db.col.find(
       {
          $or: [
             {key1: value1}, {key2:value2}
          ]
       }
    ).pretty()

    ANDとOR
    db.col.find(
        {
            key1: value1, 
            $or: [
                {key2: value2},
                {key3: value3}
            ]
        }
    ).pretty()

    limit()
    このパラメータは、MongoDBから読み出されるレコード数を指定します.
    db.col.find().limit(NUMBER)

    skip()
    指定した数のデータをスキップ
    db.col.find().limit(NUMBER).skip(NUMBER)

    ツールバーの
    db.col.find().sort({KEY:1})

    じゅうごう
    db.col.aggregate(AGGREGATE_OPERATION)

    例:ここでは、aggregate()を使用して、各著者が書いた文章数を上記の集合で計算します.
    db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}])

    sqlと同じ:
    select by_user, count(*) from mycol group by by_user

    パイプ本
    パイプラインはUnixおよびLinuxで、現在のコマンドの出力結果を次のコマンドのパラメータとして一般的に使用します.
    MongoDBの集約パイピングは、MongoDBドキュメントを1つのパイピング処理が完了した後、結果を次のパイピング処理に渡します.パイプ操作は繰り返し可能です.
    式:入力ドキュメントを処理して出力します.式はステータスなしで、現在の集約パイプの計算にのみ使用できるドキュメントであり、他のドキュメントは処理できません.
    ここでは、集約フレームワークでよく使用されるいくつかの操作について説明します.
  • $project:入力ドキュメントの構造を変更します.ドメインの名前の変更、追加、または削除に使用したり、計算結果の作成、ネストされたドキュメントの作成に使用したりできます.
  • $match:データをフィルタリングし、条件を満たすドキュメントのみを出力します.$matchはMongoDBの標準クエリー操作を使用します.
  • $limit:MongoDB集約パイプが返すドキュメントの数を制限します.
  • $skip:指定した数のドキュメントを集約パイプでスキップし、残りのドキュメントを返します.
  • $unwind:ドキュメント内の配列タイプフィールドを複数に分割し、各配列に1つの値が含まれます.
  • $group:コレクション内のドキュメントをグループ化し、統計結果に使用できます.
  • $sort:入力ドキュメントをソートして出力します.
  • $geoNear:ある地理的位置に近い秩序化されたドキュメントを出力します.