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

ビッグデータアプリケーションにMongoDBを選択する際に考慮すべき要素

    テクノロジーの進歩により、最大の利益価値と運用コストの削減のために、ビジネス組織が活用する必要がある以上の利点がもたらされました。データは、特定の目標を達成するための高度な手順が導き出されるこれらの技術的進歩のバックボーンとなっています。技術が進歩するにつれて、システムに持ち込まれるデータが増えます。さらに、ビジネスが成長するにつれて、関連するデータが増え、サービングシステムのセットアップは、高速データ処理、ストレージの信頼性、およびこのデータに最適なセキュリティを提供する必要があります。 MongoDBは、これらの要素を達成する上で信頼できるシステムの1つです。

    ビッグデータとは、変化が速く、すばやくアクセスでき、ニーズに効率的に対応するための高可用性を備えた大量のデータを指します。ビジネス組織は、時間の経過とともに最高のパフォーマンスを提供し、その結果、ビッグデータからある程度の価値を実現する利用可能なデータベース設定を相互に検討する傾向があります。

    たとえば、オンラインマーケットは、クライアントのWebクリック、購買力を観察し、得られたデータを広告の手段として他の商品の提案に使用したり、価格設定に使用したりします。ロボットは機械学習を通じて学習します。ロボットは後で使用するために学習した内容をメモリに保持する必要があるため、プロセスには明らかに大量のデータの収集が含まれます。この種の複雑なデータを従来のデータベースソフトウェアで保持することは非現実的であると考えられています。

    ビッグデータの特徴

    ソフトウェアシステムでは、サイズ、アクセス速度、関連するデータタイプの観点からビッグデータを考慮します。これは、比較的3つのパラメータに減らすことができます。

    1. ボリューム
    2. 速度
    3. バラエティ
    ボリューム

    ボリュームは、関係するビッグデータのサイズであり、ギガバイトからテラバイト以上の範囲です。大企業は毎日、日常業務からテラバイト単位のデータを取り込みます。たとえば、通信会社は、運用開始以降に行われた通話、送信されたメッセージ、および各通話にかかった時間を記録したいと考えています。日常的にこれらの活動が多く行われているため、多くのデータが得られます。データは、統計分析、意思決定、および料金計画に使用できます。

    速度

    接続されているすべてのクライアントマシンをリアルタイムで更新し、新しい証券取引所の更新をリアルタイムで表示する外国為替取引などのプラットフォームを検討してください。これは、サービングデータベースがそのようなデータの処理において非常に高速であり、待ち時間がほとんどないことを念頭に置いておく必要があることを示しています。さまざまな世界の場所のプレーヤーが関与する一部のオンラインゲームは、ユーザーのクリック、ドラッグ、その他のジェスチャーから大量のデータを収集し、マイクロ秒単位で数百万のデバイス間でそれらを中継します。関連するデータベースシステムは、これらすべてをリアルタイムで実行するのに十分な速さである必要があります。

    バラエティ

    データは、数値、文字列、日付、オブジェクト、配列、バイナリデータ、コード、地理空間データ、正規表現など、さまざまな種類に分類できます。最適なデータベースシステムは、クライアント側から追加の手順を実行することなく、このデータの操作を強化するための機能を提供する必要があります。たとえば、MongoDBは、クエリで提供された座標に近い場所をフェッチするときに使用するジオロケーション操作を提供します。この機能は、従来のデータベースでは、小さなデータボリューム構造、少ない更新、およびいくつかの一貫したデータ構造に対応するように設計されているため、実現できません。さらに、従来のデータベースの場合、特定の目標を達成するために追加の操作が必要になります。

    MongoDBは複数のサーバーから実行することもできるため、単一のサーバーでのみ実行するように設計されている従来のデータベースとは異なり、安価で無限になります。

    ビッグデータ用にMongoDBを選択する際に考慮すべき要素

    ビッグデータは、処理能力の向上によって高度に管理されている場合、企業にメリットをもたらします。データベースシステムを選択するときは、処理するデータの種類と、選択するシステムがその機能を提供するかどうかに関するいくつかの要因を考慮する必要があります。このブログでは、場合によっては、Hadoopと比較してMongoDBがビッグデータに提供する利点について説明します。

    • 動的クエリ用の豊富なクエリ言語
    • データの埋め込み
    • 高可用性
    • インデックス作成とスケーラビリティ
    • 効率的なストレージエンジンとメモリ処理
    • データの一貫性と整合性
    動的クエリ用の豊富なクエリ言語

    MongoDBは、結果のデータが目的の出力のためにさらに操作する必要があるビッグデータに最適です。強力なリソースには、CRUD操作、集計フレームワーク、テキスト検索、Map-Reduce機能などがあります。集約フレームワーク内で、MongoDBには、地理空間データで多くのことを実行できるようにする追加の地理位置情報機能があります。たとえば、2Dsphereインデックスを作成すると、緯度と経度の座標を指定するだけで、定義された半径内の場所を取得できます。上記の電気通信の例を参照すると、会社はMap-reduce機能または集約フレームワークを使用して、特定の場所からの通話をグループ化し、ユーザーまたはその他の操作の1日あたりの平均通話時間を計算できます。以下の例を確認してください。

    データを使用して位置情報を収集しましょう

    { name: "KE",loc: { type: "Point", coordinates: [ -73.97, 40.77 ] }, category: "Parks"}
    
    { name: "UG",loc: { type: "Point", coordinates: [ -45.97, 40.57 ] }, category: "Parks"}
    
    { name: "TZ",loc: { type: "Point", coordinates: [ -73.27, 34.43 ] }, category: "Parks"}
    
    { name: "SA",loc: { type: "Point", coordinates: [ -67.97, 40.77 ] }, category: "Parks"}

    次に、集計フレームワークを使用して[-73.00、40.00]の近くにあり、以下のクエリを使用して1KMの距離内にある場所のデータを見つけることができます。

    db.places.aggregate( [
    
       {
    
          $geoNear: {
    
             near: { type: "Point", coordinates: [ -73.00, 40.00 ] },
    
             spherical: true,
    
             query: { category: "Parks" },
    
             distanceField: "calcDistance",
    
       maxDistance: 10000
    
          }
    
       }
    
    ]

    Map-Reduce操作はHadoopでも利用できますが、単純なリクエストに適しています。 HadoopでMap-Reduceを使用するビッグデータの反復プロセスは、MongoDBよりも非常に低速です。背後にある理由は、反復タスクでは、完了する前に多くのマップとリデュースプロセスが必要になるためです。その過程で、マップ間に複数のファイルが生成され、タスクが削減されるため、高度な分析ではまったく使用できなくなります。 MongoDbは、この後退を抑えるために集約パイプラインフレームワークを導入しました。これは、最近最も使用されています。

    データの埋め込み

    MongoDBはドキュメントベースであり、埋め込みと呼ばれる単一のフィールド内により多くのフィールドを配置する機能を備えています。埋め込みには、ドキュメント自体が大量のデータを保持できるため、単一のドキュメントに対して発行されるクエリが最小限であるという利点があります。多くのテーブルが存在する可能性のあるリレーショナルデータベースの場合、同じ目的でデータベースに対して複数のクエリを発行する必要があります。

    高可用性

    レプリケーションが単一のサーバーに制限されているリレーショナルDBMSとは異なり、MongoDBでは複数のホストとサーバー間でのデータのレプリケーションが可能になりました。これは、データがさまざまな場所で高可用性を備え、ユーザーに最も近いサーバーから効率的にサービスを提供できるという点で有利です。さらに、復元または故障のプロセスは、復元プロセスを参照できるチェックポイントを作成するMongoDBのジャーナリング機能を考慮すると簡単に実現できます。

    インデックス作成とスケーラビリティ

    MongoDBのプライマリおよびセカンダリのインデックス作成には、多くのメリットがあります。インデックス付けにより、クエリが最初に実行されます。これは、ビッグデータの速度特性で説明したように、ビッグデータに必要な考慮事項です。インデックスは、シャードの作成にも使用できます。シャードは、シャードキーを使用してグループに分散されたデータを含むサブコレクションとして定義できます。クエリが発行されると、シャードキーを使用して、使用可能なシャードの中からどこを探すかを決定します。シャードがない場合、すべてのドキュメントを調べる必要があり、ユーザーが必要なものを取得する前にプロセスがタイムアウトする可能性があるため、ビッグデータのプロセスにはかなりの時間がかかります。ただし、シャーディングを使用すると、フェッチされるデータの量が減り、その結果、クエリが返されるのを待つ待ち時間が減ります。

    効率的なストレージエンジンとメモリ処理

    最近のMongoDBバージョンでは、WiredTigerが、複数のワークロードを処理するためのエグゼクティブ機能を備えたデフォルトのストレージエンジンとして設定されています。このストレージエンジンには、この記事で説明されているように、ビッグデータに役立つ多くの利点があります。このエンジンには、圧縮、チェックポインティングなどの機能があり、ドキュメントの同時実行性を通じて複数の書き込み操作を促進します。ビッグデータとは、多くのユーザーを意味し、ドキュメントレベルの同時実行機能により、パフォーマンスを低下させることなく、多くのユーザーがデータベースを同時に編集できるようになります。 MongoDBはC++を使用して開発されているため、メモリ処理に適しています。

    データの一貫性と整合性

    JSONバリデーターツールは、データの整合性と一貫性を確保するためにMongoDBで利用できるもう1つの機能です。これは、無効なデータがデータベースに入らないようにするために使用されます。たとえば、ageというフィールドがある場合、常に整数値が必要です。 JSONバリデーターは、文字列またはその他のデータ型がこのフィールドのデータベースに保存するために送信されていないことを常にチェックします。これは、すべてのドキュメントが同じデータ型のこのフィールドの値を持ち、データの一貫性を保つためでもあります。 MongoDBは、障害が発生した場合に目的の状態に戻ることができるように、バックアップおよび復元機能も提供します。

    結論

    MongoDBは、リアルタイムのデータ分析を最も効率的な方法で処理するため、ビッグデータに適しています。たとえば、地理空間インデックスを使用すると、GPSデータをリアルタイムで分析できます。

    基本的なセキュリティ構成に加えて、MongoDBには、有効なデータのみがデータベースに入ることを保証するための追加のJSONデータ検証ツールがあります。データベースはドキュメントベースであり、フィールドが埋め込まれているため、大量のデータをフェッチするためにデータベースに発行できるクエリはごくわずかです。これにより、ビッグデータが懸念される場合の使用に最適です。


    1. PostgreSQLとMongoDBの混合(Djangoバックエンドとして)

    2. Chefを使用したMongoDBデータベース自動化の基本

    3. nginx/uwsgiサーバー用の永続的なメモリ内Pythonオブジェクト

    4. Javaを使用したMongoDBのガイド