sql >> データベース >  >> NoSQL >> MongoDB

NoSQLデータベースの戦い-MongoDBとOracleNoSQLの比較

    現代のITは、ビッグデータ/リアルタイムアプリケーションのサポートを提供するために、非リレーショナルで動的なスキーマ(Joinsステートメントクエリの要件がないことを意味します)を持っている必要があります。 NoSQLデータベースは、データ処理のパフォーマンスを向上させ、複数のホストの概念を使用して分散データベースの負荷を克服するためにスケールアウトする機能に取り組むという概念で作成され、データ処理に対する新世代の需要を獲得しました。

    MongoDBを使用すると、さまざまなデータモデルとスクリプト言語に不可欠なサポートを提供するだけでなく、開発者がプロ​​セスを簡単に開始できます。

    NoSQLデータベースは...への扉を開きます...

    • スクリプト言語(RESTおよび、JSON、BSON)を使用したテキストベースのプロトコル
    • データの生成、保存、転送にかかる最小限のコスト
    • 大量のデータ処理をサポートします。 書き込みパフォーマンスの向上 オブジェクトリレーショナルマッピングおよび正規化プロセスを実行する必要はありません 参照整合性ルールを使用した厳密な制御はありません データベース管理者によるメンテナンスコストの削減 拡張コストの削減 キーと値への高速アクセス 機械学習とインテリジェンスのサポートを強化する

    MongoDB市場での受け入れ

    ビッグデータ分析と最新のアプリケーションに対する最新のニーズは、ハードウェアの拡張やコストの増加を期待せずに、データ処理のライフサイクルを改善する必要性において重要な役割を果たします。

    新しいアプリケーションを計画していて、データベースを選択したい場合、市場にある多くのデータベースオプションを使用して適切な決定を下すのは、複雑なプロセスになる可能性があります。

    DBエンジンの人気ランキングは、MongoDBがOracle NoSQL(74位)と比較して1位であることを示しています。ただし、この傾向は、何かが変化していることを示しています。多くの費用対効果の高い拡張の必要性は、はるかに単純なデータモデリングと密接に関連しており、管理によって、開発者がシステムに最適なものを検討する方法が変わりつつあります。

    これまでのDatanyzeの市場シェア情報によると、Oracle Nosqlで実行されているWebサイトは約289で、市場シェアは11%です。それ以外の場合、MongoDBは完全な12,185のWebサイトで、市場シェアは4.66です。 %。これらの印象的な数字は、MongoDBに明るい未来があることを示しています。

    NoSQLデータモデリング

    データモデリングには...

    の理解が必要です
      現在のデータの種類。
    • 将来期待するデータの種類は何ですか?
    • アプリケーションはどのようにしてシステムから必要なデータにアクセスできますか?
    • アプリケーションは、処理に必要なデータをどのように取得しますか?

    スキーマを作成してからデータを保存するというOracleの方法を常に踏襲している人にとっては、MongoDBを使用すると、ドキュメントと一緒にコレクションを作成できます。つまり、コレクションの作成は、ドキュメントの作成が行われる前に存在する必要はなく、MongoDBの柔軟性が高く評価されています。

    ただし、Oracle NoSQLでは、最初にテーブル定義を作成する必要があります。その後、行の作成を続行できます。

    次の優れた点は、MongoDBがスキーマとリレーションの実装に関する厳密なルールを暗示していないことです。これにより、厳密な回路図設計を保証する必要性をあまり恐れることなく、システムを継続的に改善する自由が得られます。

    MongoDBとOracleNoSQLの比較をいくつか見てみましょう。

    MongoDBとOracleでのNoSQLの概念の比較

    NoSQLの用語

    MongoDB

    Oracle NoSQL

    事実

    コレクション

    テーブル/ビュー

    コレクション/テーブルはストレージコンテナとして機能します。それらは似ていますが同一ではありません。

    ドキュメント

    MongoDBの場合、ドキュメントとフィールドの形式でコレクションに保存されたデータ。

    Oracle NoSQLの場合、テーブルは行のコレクションであり、各行はデータレコードを保持します。各テーブル行は、テーブルの作成時に定義されるキーフィールドとデータフィールドで構成されます。

    フィールド

    インデックス

    インデックス

    どちらのデータベースもインデックスを使用して、データベースで実行される検索の速度を向上させます。

    ドキュメントストアとKey-Valueストア

    Oracle NoSQLは、キーによってインデックス付けされた値を格納するストレージシステムを提供します。データセットはインデックス付きのキー値で構成されているため、この概念は最も複雑でないモデルと見なされます。メジャーキーとマイナーキーを使用して編成されたレコード。

    メジャーキーはオブジェクトポインタとして表示でき、マイナーキーはレコードのフィールドとして表示できます。主キーと同じようにデータにアクセスするメカニズムとしてキーを使用することで、データの効率的な検索が可能になります。

    MongoDBはキーと値のペアを拡張します。各ドキュメントには一意のキーがあり、ドキュメントを取得する目的で使用されます。ドキュメント内のコレクションが同じフィールドのセットを持つ必要がないため、ドキュメントは動的スキーマと呼ばれます。コレクションには、さまざまなタイプのデータを含む共通のフィールドを含めることができます。これらの属性により、ドキュメントデータモデルが直接マッピングされ、最新のオブジェクト指向言語がサポートされます。

    MongoDB

    Oracle NoSQL

    ドキュメントストア

    例:

    キー値ストア

    例:

    BSONとJSON

    Oracle NoSQLは、送信する標準のデータ形式としてJSONを使用します(データ+属性と値のペア)。一方、MongoDBはBSONを使用します。

    MongoDB

    Oracle NoSQL

    BSON

    JSON

    バイナリJSON(バイナリデータ形式)は処理を高速化します

    Javascriptオブジェクト表記-標準形式。 BSONと比較して処理がはるかに遅い。

    特徴:

    特性:

    JSONとは異なり、BSONは人間が読めるテキストではありません。 BSONは、JSONのようなデータのバイナリエンコードされたシリアル化の略で、主にデータストレージとMongoDBでの転送形式に使用されます。 BSONデータ形式は、フィールド名(文字列)、タイプ、および値を含む順序付けられた要素のリストで構成されます。 BSONがサポートするデータ型に関しては、JSONで一般的に見られるすべてのデータ型であり、2つの追加のデータ型(バイナリデータと日付)が含まれています。 16MB未満のバイナリデータまたはBinDataと呼ばれるデータは、MongoDBドキュメントに直接保存できます。 BSONは、JSONデータドキュメントよりも多くのスペースを消費していると言われています。

    MongoDBがOracleNoSQLと比較してより多くのスペースを消費する理由は2つあります。

    • MongoDBは、高速でトラバースできるという目的を達成しました。高速でトラバースするオプションを有効にするには、BSONドキュメントに追加のメタデータ(文字列とサブオブジェクトの長さ)を含める必要があります。
    • BSONデザインは、高速にエンコードおよびデコードできます。たとえば、整数は32(または64)ビット整数として格納され、テキストとの間の解析を排除します。このプロセスは、小さい整数に対してJSONよりも多くのスペースを使用しますが、解析ははるかに高速です。
    データモデルの定義

    MongoDBコレクションステートメント

    コレクションを作成する

    db.createCollection("users")
    自動_idを使用したコレクションの作成

    db.users.insert
    
    ( {
        User_id: "U1",
        First_name: "Mary"                  
        Last_name : "Winslet",  
    
        Age       : 15
    
        Contact   : {
    
                   Phone: "123-456-789"
    
                   Email: "[email protected]"  
    
                    }
    
       access  : {
    
                  Level:5,
    
                  Group:"dev"
    
                 }            
    
    })

    MongoDBを使用すると、同じデータベースレコード内の関連情報を埋め込むことができます。データモデルの設計

    OracleNoSQLテーブルステートメント

    SQL CLIを使用した名前空間の設定:

    Create namespace newns1; 
    名前空間を使用してテーブルと子テーブルを関連付ける

    news1:users
    
    News1:users.access
    以下を使用してIDENTITYを持つテーブルを作成します:

    Create table newns1.user (
    
    idValue INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 MAXVALUE 10000), 
    
    User_id String,
    
    First_name String,
    
    Last_name String, 
    
    Contact Record (Phone string,         
    
                    Email string),
    
    Primary key (idValue));

    SQL JSONを使用してテーブルを作成する:

    Create table newns1.user (
    
    idValue INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 MAXVALUE 10000),
    
    User_profile JSON, 
    
    Primary Key (shard(idValue),User_id));
    
    

    ユーザーテーブルの行:JSONと入力

    {
    
      "id":U1,
    
      "User_profile" : {
    
         "First_name":"Mary",
    
         "Lastname":"Winslet",
    
         "Age":15,
    
         "Contact":{"Phone":"123-456-789",                   
    
         "Email":"[email protected]"
    
                       }
    
    }

    上記のデータ定義に基づいて、MongoDBではスキーマ作成にさまざまな方法を使用できます。コレクションは、明示的に定義することも、データをドキュメントに最初に挿入するときに定義することもできます。コレクションを作成するときに、オブジェクトIDを定義できます。 Objectidは、MongoDBドキュメントの主キーです。 Objectidは12バイトのバイナリBSONタイプであり、MongoDBドライバーとサーバーがデフォルトのアルゴリズムを使用して生成した12バイトが含まれています。 MongoDB objectidは便利で、特定のコレクションで作成されたドキュメントを並べ替える目的に役立ちます。

    Oracle NoSQLには、テーブルの定義を開始する方法がいくつかあります。デフォルトでOracleSQLCLIを使用している場合、新しい表のセットを関連付けるために新しい名前空間を作成することを決定するまで、新しい表の作成はsysdefaultに配置されます。上記の例は、作成された新しい名前空間「ns1」を示しており、ユーザーテーブルは新しい名前空間に関連付けられています。

    Oracle NoSQLは、主キーを識別するだけでなく、IDENTITY列を使用して、行を追加するたびに値を自動インクリメントします。 IDENTITY値は自動生成され、整数、長整数、または数値のデータ型である必要があります。 Oracle NoSQLでは、IDENTITYは、MongoDBのobjectidの概念と同様にSequenceGeneratorに関連付けられます。 Oracle NoSQLでは、IDENTITYキーを主キーとして使用できます。 IDENTITYキーを主キーとして検討している場合、データの挿入と更新プロセスに影響を与える可能性があるため、慎重に検討する必要があります。

    MongoDBとOracleNoSQLのテーブル/コレクションレベルの定義は、追加のスキーマ定義を必要とせずに、「連絡先」情報が同じ単一の構造に埋め込まれる方法を示しています。データセットを埋め込むことの利点は、埋め込まれたデータセットを取得するためにそれ以上のクエリが必要ないことです。

    システムをシンプルな形で維持したい場合、MongoDBは、データドキュメントをより簡単に保持するための最良のオプションを提供します。同時に、MongoDBは、スキーマ検証ツールを使用して、リレーショナルスキーマから既存の複雑なデータモデルを提供する機能を提供します。

    Oracle NoSQLは、DDLやDMLを使用したクエリ言語など、SQLを使用する機能を提供します。これにより、リレーションデータベースシステムの使用経験があるユーザーの労力が大幅に削減されます。

    MongoDBシェルはJavascriptを使用します。言語や、mongoシェルの使用に慣れていない場合は、IDEツールの使用を選択するのがプロセスに最適です。 studio 3T、Robo 3T、NoSQLBooster、MongoDB Compass、Nucleon DatabaseMasterなどの2020年の上位5つのMongoDBIDEツールは、集計機能を使用して複雑なクエリを作成および管理するのに役立ちます。

    パフォーマンスと可用性

    MongoDBデータ構造モデルはドキュメントとコレクションを使用するため、大量のデータを処理するためにBSONデータ形式を使用すると、OracleNoSQLと比較してはるかに高速になります。多くのユーザーにとって、SQLを使用したデータのクエリはより快適な方法であると考える人もいますが、容量が問題になります。サポートする大量のデータがあり、スループットを向上させる必要があり、SQLを使用して複雑なクエリを設計する場合、これらのプロセスでは、サーバーの容量と時間の経過に伴うコストの増加を再検討する必要があります。

    MongoDBとOracleNoSQLはどちらも、シャーディングとレプリケーションの機能を提供します。シャーディングは、データセットと全体的な処理負荷を複数の物理パーティションに分散して、処理(読み取り/書き込み)速度を向上させるプロセスです。 oracleを使用したシャードの実装では、シャーディングキーがどのように機能するかに関する事前情報が必要です。事前計画プロセスの背後にある理由は、スキーマ開始レベルでシャードキーを実装する必要があるためです。

    MongoDBを使用したシャードの実装では、実装前にクエリパターンに基づいて潜在的な正しいシャードキーを特定するために、最初にデータセットで作業する余地があります。シャーディングプロセスにはデータレプリケーションが含まれるため、MongoDBは高速データレプリケーションでも定評があります。レプリケーションは、すべてのデータを単一のサーバーに配置する必要があるというフォールトトレランスを処理します。

    結論

    MongoDBがOracleNoSQLよりも優先される理由は、MongoDBがバイナリ形式であり、軽量でトラバース可能で効率的なという固有の特性であるということです。これにより、機械学習と人工知能の分野で進歩している最新のアプリケーションをサポートできます。

    MongoDBの特性により、開発者はより自信を持って最新のアプリケーションをより速く構築できます。 MongoDBデータモデルを使用すると、Oracle NoSQLと比較して十分に考慮された速度で、大量の非構造化データを処理できます。 Oracle NoSQLは、提供する必要のあるツールと、データモデルを作成するための可能なオプションに関して勝ちます。ただし、開発者と設計者がテクノロジーをすばやく習得して適応できるようにすることが不可欠です。これは、OracleNoSQLの場合とは異なります。


    1. mongodbコレクションから最新のレコードを取得する

    2. MongoDBデータディレクトリ/data/dbが見つかりません

    3. nullを保存する場合とMongoDBにキーをまったく保存しない場合

    4. 外部フィールドがオブジェクトの配列である場合のMongoDBルックアップ