MongoDBデータベース関連のknowledgeOne

作者:
Neteaseの帆の数リンク:https://www.zhihu.com/question/32071167/answer/516706817
出典:
作者がほぼ著作権を所有していることを知っています。商用の再版については、承認を得るために作者に連絡してください。非商用の再版については、出典を示してください。
 

MongoDBは非常に有望なデータベースです。MongoDBは公式にそれ自体を一般的なデータベースとして位置付けています。実際、この位置付けはMySQLにいくぶん似ています。その人気はMySQLのレベルに達するにはほど遠いですが、不適切な比較が考えられます。MongoDBはN年前のMySQLに似ています。時間が経つにつれて、ますます強力になります。人気。MongoDBのいくつかの主要な機能と組み合わせて、MongoDBの適用可能なシナリオについて説明しましょう。

 

まず、MongoDBはドキュメントストアNoSQLデータベースです。データはドキュメントの形式でMongoDBに保存されます(リレーショナルデータベースのレコードに対応し、この記事で混合されることもあります)。ドキュメントは実際にはJSON文字列です。私はJSONに精通しているので、詳細には触れません。JSONを使用する利点は非常に直感的です。データは、私たちの読書習慣に沿った一連のキーと値のペアで表されます。次の図は、JSONで表されるユーザー情報ドキュメントを示しています。

 

JSONは、JavaやPythonなどの主流のコンピューター言語で十分にサポートされています。データがMongoDBから読み取られた後、変換せずに直接使用できます。MongoDBドキュメントのもう1つの機能は、キーと値のキーと値のペアが豊富なデータをサポートすることです。構造、値は、通常の整数、文字列、配列、またはネストされたサブドキュメントにすることができます。ネストを使用する利点は、MongoDBの1つの簡単なクエリで必要なデータを取得できることです。 。例としてeコマース分野を取り上げます。NetEaseが販売するために厳密に選択するトップとズボンには、原産地、価格、素材、色などの共通の属性と、トップの一意性などのさまざまな属性セットがあります。属性は、肩幅、バスト、袖の長さなどです。ズボンのユニークな属性は、ヒップの周囲、足の開口部、パンツの長さです。

 

これらの一意の属性は、JSONサブドキュメントの形式で製品ドキュメントに直接埋め込むことができ、マルチテーブル結合を必要とせずに、コンテンツ全体を1つのクエリで直接取得できます。MongoDBドキュメントのもう1つの主要な機能は、フレキシブルモードです。異なるドキュメントが同じキーを持ちます。値のタイプは、プラスチックまたは文字列などのタイプにすることができます。ドキュメントごとにキーを変えることができます。たとえば、一部の製品には割引フィールドがあり、メンバーシップレベルごとに異なる割引を定義できます。eコマースをサポートするロジスティクス分野では、クーリエのロジスティクス情報を製品IDを一意のインデックスとしてドキュメントに直接ネストでき、1回のクエリで完全なクーリエフロー情報を取得できます。MongoDBクエリは、非常に豊富な演算子も提供します。これにより、クエリでの併用の効率が2倍になります。

 

柔軟なドキュメントベースのデータモデルは、MongoDBの主な利点です。MySQLなどのデータベースと比較して、多様または変更可能なデータモデルを使用するビジネスシナリオでは、テーブル構造を変更するためにDDLステートメントを使用する必要はありません。他のKey-Valueデータベースと比較して、 MongoDBのValueフィールドはMongoDBに対して不透明であるため、インデックスを作成して全文検索を実行できます。これにより、クエリの効率が向上します。このモードは、ゲーム、eコマース、ソーシャルネットワーキング、ライブビデオ、ロジスティクスなどの分野に非常に適しています。ユーザーや商品のさまざまな目的でサブドキュメントをネストすることで、迅速なクエリを実現できます。さまざまな監視データ、ログレコード、およびキャプチャされたデータに含まれるフィールドは異なる場合が多く、ある程度は制御できないため、監視、ログデータの保存、サードパーティの情報キャプチャなどのシナリオも適用できます。同時に、柔軟なモデルは、ゲーム市場の活動やモバイルアプリなど、迅速な開発と立ち上げが必要であるが、需要の変化が大きい(データモデルが大きくなる)製品やシナリオにも適しています。

 

次に、MongoDBには強力なインデックス機能もあり、NoSQLデータベースの中でも最高の一意のインデックス、セカンダリインデックス、TTLインデックス、地理的位置インデックスの作成をサポートします。これに基づいて、MongoDBは実行計画機能も提供します。 Explain()(https://docs.mongodb.com/manual/reference/method/db.collection.explain/#db.collection.explain)およびhint()コマンドは、実行計画を表示し、クエリを特定のインデックスに移動させることができます。これらの機能は、リレーショナルデータベースよりも優れているわけではありません。MongoDBコレクションが作成されると、デフォルトで_idフィールドに基づいて一意のインデックスが作成されます。データが挿入されると、_idフィールドの一意性がチェックされます。MongoDBは、配列のフィールドやネストされたドキュメントのフィールド(通常は)を含むほぼすべてのフィールドにインデックスを作成できます。これはセカンダリインデックスです)。これにより、クエリの効率が大幅に向上し、クロスレコードまたはクロステーブルトランザクションがないが、パフォーマンス要件が非常に高い特定のシナリオでリレーショナルデータベースを置き換えることができます。十分なメモリがある場合、実行されたクエリがインデックスでカバーされていれば、インデックスはキャッシュにロードされます(https://docs.mongodb.com/manual/core/query-optimization/#read-operations-covered-query)、そのパフォーマンスはRedisや他のメモリデータベースにさえ匹敵します。TTLインデックスは、ログの保存やデータの監視などのシナリオで非常に役立ちます。TTLインデックスを作成することにより、期限切れのレコードを自動的に削除する機能が実現されます(MongoDB TTLインデックスを使用する場合、データの有効期限を正確に制御できず、期限切れにできないことに注意する必要があります。つまり、削除することです。大量のデータの場合、特定のパフォーマンスオーバーヘッドと削除遅延が発生します)。

 

ジオロケーションインデックスは、MongoDBが長い間慣れ親しんできた機能です。その2つのモード、SphericalとFlatは、2d、2dsphere、GeoJSONなどのアドレスロケーションの豊富な表現を提供します。マップソフトウェア、タクシーソフトウェア、持ち帰り用ソフトウェア、MongoDBの強力な地理的位置インデックス機能は、それを最良の選択にします(https://www.mongodb.com/blog/post/geospatial-performance-improvements-in-mongodb-3-2) ;さらに、モノのインターネット、スマートシティ、その他の分野では、MongoDBの分野である地理関連の操作も多数必要です。

 

第3に、MongoDBのレプリケーションセットは、データベース分野における主要な高可用性および読み取り/書き込みロードバランシングソリューションであり、自動(非同期/同期)データレプリケーション機能を提供します。新しいノードがレプリケーションセットに追加されると、最初のデータ同期が自動的に実行され、oplogが使用されます。手動による介入なしのインクリメンタルレプリケーション。レプリケーションセットのプライマリノードがダウンすると、MongoDBは自動的にマスターとスレーブを切り替えます。レプリケーションセットのほとんどのノードがオンラインの場合、Raftプロトコルに基づくことができます(MongoDB 3.2以降、以前のバージョンはそうではありません)。 Raft)を使用して、新しいプライマリを自動的にすばやく選択し、手動の介入なしに読み取りおよび書き込みサービスを復元します(プライマリの選択中は書き込み操作を実行できません)。MongoDBの操作および保守担当者は、ダウンノードを再起動するだけで済みます。プライマリノードがダウンしています。再起動後、データは自動的にロールバックされ、最終的にレプリケーションセットのセカンダリノードになります(通常の状況では)。

 

レプリケーションセットメカニズムでは、ノードでローリング処理を行うことにより、オンラインメンテナンスとアップグレードを実行することもできます。したがって、最新のリレーショナルデータベースと比較して、MongoDBレプリカセットは自動レプリケーションとフェイルオーバーを実現します。これにより、運用と保守の複雑さが大幅に軽減され、DBAが解放されます。データの永続性と可用性に対する要件が高い場合は、MongoDBレプリカセットが最適です。さらに、レプリケーションセットは、書き込み懸念、読み取り設定、読み取り懸念、タグセットなどの読み取りおよび書き込み動作制御機能も提供します。さまざまなタイプのビジネスアプリケーションについては、公式マニュアル(https://docs.mongodb.com/manual/applications/replication)を参照してください。 /)データの永続性、データの一貫性、および可用性に関するさまざまな要件に応じた柔軟な設定。

 

最後に、MongoDBはビッグデータ用に誕生し、水平方向のビジネス拡大を実現するためのシャーディングメカニズムを提供します。各シャードはビジネスデータの一部を保存します。シャードは、シャード上のデータの高可用性を確保するためのレプリケーションセットとして構成できます。シャードは、一連の連続したチャンクで構成されます。チャンクは、特定のキー間隔でのデータレコードのコレクションです。mongosが使用されます。ビジネスリクエストのルーティングにより、ビジネス負荷がさまざまなシャードに分散されます。さらに、mongosは、シャード上の特定のサイズを超えるチャンクを分割します。さまざまなシャードのデータ量に応じて、シャードが移行(移行)されます。 )、シャーディングはビジネスデータと負荷レベルの拡張のための完全なメカニズムを提供すると言わなければなりません。モノのインターネット、ログシステム、監視システムなど、テラバイトの大量のデータを含むアプリケーションシナリオでは、MongoDBシャーディングを使用することをお勧めします。

 

実稼働環境では、シャーディングは必要ありません。新しいビジネスがシャーディングクラスターの展開を開始するときではなく、ビジネスのデータ量がサポートできない単一のレプリカセットに達したとき、またはビジネスの負荷がレプリカセットのサービス容量を超えたときのみです。 、シャーディングの展開を検討する前に、結局のところ、レプリカセットと比較して、シャーディングは展開と管理においてはるかに複雑です。MongoDBレプリカセットはシャードにスムーズにアップグレードできるため、シャーディングが本当に必要な場合は、公式ドキュメント(https://docs.mongodb.com/manual/tutorial/convert-replica-set-to-replicated-shard-cluster/)を参照できます。)操作するには、詳細なアップグレード手順がドキュメントに記載されています。

 

興味に関連:興味のある読者は、NetEase Cloud MongoDBサービス無料で体験できます。これにより、開発者は3ノードレプリカセットの高可用性アーキテクチャ、フェイルオーバー、プロフェッショナルバックアップの提供などのワンストップMongoDBクラウドソリューションを利用できます。監視およびパフォーマンス最適化ソリューションは、開発者の運用および保守の問題を完全に排除します。

 

おすすめ

転載: blog.csdn.net/youarenotme/article/details/109096592