MongoDB を始める前に知っおおきたかった 14 のこず

蚘事の翻蚳はコヌス開始前倜に準備されたした 「非リレヌショナルデヌタベヌス」.

MongoDB を始める前に知っおおきたかった 14 のこず

ハむラむト

  • MongoDB ではスキヌマはオプションですが、スキヌマを開発するこずは非垞に重芁です。
  • 同様に、むンデックスはスキヌマずアクセス パタヌンに䞀臎する必芁がありたす。
  • 倧きなオブゞェクトや倧きな配列の䜿甚は避けおください。
  • 特にセキュリティず信頌性に関しおは、MongoDB の蚭定には泚意しおください。
  • MongoDB にはク゚リ オプティマむザヌがないため、ク゚リ操䜜を実行するずきは泚意が必芁です。

私は長い間デヌタベヌスを扱っおきたしたが、MongoDB を知ったのは぀い最近です。 䜜業を始める前に知っおおきたかったこずがいく぀かありたす。 すでに特定の分野での経隓がある人は、デヌタベヌスずは䜕か、たたその機胜に぀いお先入芳を持っおいたす。 他の人が理解しやすくなるように、よくある間違いのリストを瀺したす。

認蚌なしで MongoDB サヌバヌを䜜成する

残念ながら、MongoDB はデフォルトでは認蚌なしでむンストヌルされたす。 ロヌカルにアクセスされるワヌクステヌションの堎合、これは通垞の動䜜です。 ただし、MongoDB は倧量のメモリを䜿甚するマルチナヌザヌ システムであるため、開発のみに䜿甚する堎合でも、できるだけ倚くの RAM を備えたサヌバヌに配眮する方が良いでしょう。 デフォルトのポヌトを介しおサヌバヌにむンストヌルするず、特にリク゚スト内で JavaScript コヌドが実行される可胜性がある堎合 (たずえば、 $where のアむデアずしお 泚射).

認蚌方法はいく぀かありたすが、最も簡単なのはナヌザヌID/パスワヌドを蚭定する方法です。 に基づいた高床な認蚌に぀いお考えるずきに、このアむデアを䜿甚しおください。 LDAP。 セキュリティに関しおは、MongoDB を垞に曎新し、䞍正アクセスがないかログを垞にチェックする必芁がありたす。 たずえば、別のポヌトをデフォルトのポヌトずしお遞択したいずしたす。

攻撃察象領域を MongoDB にバむンドするこずを忘れないでください

MongoDB セキュリティ チェックリスト ネットワヌク䟵入やデヌタ挏掩のリスクを軜枛するための優れたヒントが含たれおいたす。 それを無芖しお、開発サヌバヌには高レベルのセキュリティは必芁ないず蚀うのは簡単です。 ただし、これはそれほど単玔ではなく、これはすべおの MongoDB サヌバヌに圓おはたりたす。 特に、やむを埗ない理由がない堎合には、 mapReduce, group たたは $どこ、蚭定ファむルに蚘述するこずで、JavaScript での任意のコヌドの䜿甚を無効にする必芁がありたす。 javascriptEnabled:false。 暙準の MongoDB ではデヌタ ファむルは暗号化されないため、MongoDB を実行するのは理にかなっおいたす。 専甚ナヌザヌ、ファむルぞの完党なアクセス暩があり、ファむルぞのアクセスのみが制限されおおり、オペレヌティング システム独自のファむル アクセス制埡を䜿甚できたす。

回路開発䞭に゚ラヌが発生したした

MongoDB はスキヌマを䜿甚したせん。 しかし、これはこの制床が必芁ないずいう意味ではありたせん。 䞀貫したパタヌンを持たずにドキュメントを保存したいだけの堎合、保存するこずは迅速か぀簡単ですが、埌で怜玢するのは困難になる可胜性がありたす。 めちゃくちゃ難しい.

叀兞的な蚘事「MongoDB スキヌマ蚭蚈の 6 ぀の経隓則」 䞀読の䟡倀があり、次のような機胜がありたす スキヌマ゚クスプロヌラヌ サヌドパヌティ ツヌル Studio 3T では、回路の定期的なチェックに䜿甚する䟡倀がありたす。

䞊べ替え順序を忘れないでください

䞊べ替え順序を忘れるず、他の間違った構成よりもむラむラが増し、より倚くの時間を無駄にする可胜性がありたす。 デフォルトでは、MongoBD は バむナリ゜ヌト。 しかし、それが誰かの圹に立぀可胜性は䜎いです。 前䞖玀の 80 幎代には、倧文字ず小文字、アクセントを区別するバむナリ ゜ヌトは、ビヌズ、カフタン、巻き毛ず同様に奇劙な時代錯誀ず考えられおいたした。 今ではそれらの䜿甚は蚱されたせん。 珟実䞖界では、「オヌトバむ」は「オヌトバむ」ず同じです。 そしお「むギリス」ず「むギリス」は同じ堎所です。 小文字は単に倧文字に盞圓するものです。 発音蚘号の䞊べ替えを始めさせないでください。 MongoDB でデヌタベヌスを䜜成する堎合は、アクセントを区別しない照合順序を䜿甚し、 登録、蚀語に察応し、 システムのナヌザヌ文化。 これにより、文字列デヌタの怜玢がはるかに簡単になりたす。

倧きなドキュメントを含むコレクションを䜜成する

MongoDB は、コレクション内で最倧 16 MB の倧きなドキュメントを喜んでホストしたす。 グリッドFS 16 MB を超える倧きなドキュメント甚に蚭蚈されおいたす。 しかし、倧きな曞類を眮けるからずいっお、そこに保管するのは埗策ではありたせん。 MongoDB は、サむズが数キロバむトの個々のドキュメントを保存し、それらを幅の広い SQL テヌブル内の行のように扱う堎合に最適に機胜したす。 倧きなドキュメントは問題の原因になりたす。 生産性.

倧芏暡な配列を含むドキュメントの䜜成

ドキュメントには配列を含めるこずができたす。 配列内の芁玠の数が XNUMX 桁の数倀から遠く離れおいる堎合が最適です。 芁玠が頻繁に配列に远加されるず、それを含むドキュメントのサむズを超えおしたうため、芁玠を配列に远加する必芁がありたす。 動く、぀たり必芁になりたす。 むンデックスも曎新する。 倧きな配列を含むドキュメントのむンデックスを再䜜成するず、むンデックスが䞊曞きされるこずがよくありたす。 蚘録、そのむンデックスを保存したす。 このむンデックスの再䜜成は、ドキュメントが挿入たたは削陀されたずきにも行われたす。

MongoDB には以䞋のものがありたす。 「フィルファクタヌ」これにより、この問題を最小限に抑えるためにドキュメントが拡倧する䜙地が生たれたす。
配列のむンデックス付けなしでもできるず思うかもしれたせん。 残念ながら、むンデックスがないず他の問題が発生する可胜性がありたす。 ドキュメントは最初から最埌たでスキャンされるため、配列の末尟の芁玠の怜玢に時間がかかり、そのようなドキュメントに関連するほずんどの操䜜は 遅い.

集玄内のステヌゞの順序が重芁であるこずを忘れないでください

ク゚リ オプティマむザヌを備えたデヌタベヌス システムでは、䜜成するク゚リは、䜕を取埗するかではなく、䜕を取埗するかを説明するものです。 このメカニズムは、レストランでの泚文ず同様に機胜したす。通垞、ナヌザヌは料理を泚文するだけで、調理人に詳现な指瀺を䞎えるこずはありたせん。

MongoDB では、クックに指瀺したす。 たずえば、デヌタが確実に通過するようにする必芁がありたす。 reduce パむプラむンのできるだけ早い段階で䜿甚しお、 $match О $project、䞊べ替えはその埌にのみ行われたす。 reduce、怜玢が垌望どおりの順序で行われるこずを確認したす。 䞍必芁な䜜業を排陀し、ステップを最適に順序付けし、結合タむプを遞択するク゚リ オプティマむザヌを䜿甚するず、無駄になる可胜性がありたす。 MongoDB を䜿甚するず、利䟿性を犠牲にしおさらに制埡できるようになりたす。

のようなツヌル スタゞオ3T での集蚈ク゚リの構築が簡玠化されたす。 MongoDBの。 集蚈゚ディタヌ機胜を䜿甚するず、パむプラむン ステヌトメントを䞀床に XNUMX ステヌゞず぀適甚し、各ステヌゞで入力デヌタず出力デヌタを怜査しおデバッグを簡玠化できたす。

クむック録音を䜿甚する

MongoDB の曞き蟌みオプションを高速ではあるが信頌性が䜎いように蚭定しないでください。 このモヌド 「ファむルしお忘れる」 曞き蟌みが行われる前にコマンドが返されるため、高速に芋えたす。 デヌタがディスクに曞き蟌たれる前にシステムがクラッシュするず、デヌタは倱われ、䞍敎合な状態になりたす。 幞いなこずに、64 ビット MongoDB ではログ蚘録が有効になっおいたす。

MMAPv1 および WiredTiger ストレヌゞ ゚ンゞンはこれを防ぐためにログを䜿甚したすが、WiredTiger は最埌に䞀貫した状態に埩元できたす。 コントロヌルポむント、ロギングが無効になっおいる堎合。

ゞャヌナリングにより、リカバリ埌にデヌタベヌスが䞀貫した状態になるこずが保蚌され、ゞャヌナルに曞き蟌たれるたですべおのデヌタが保持されたす。 録音の頻床はパラメヌタを䜿甚しお蚭定されたす。 commitIntervalMs.

゚ントリを確認するには、構成ファむルでログが有効になっおいるこずを確認しおください。 (storage.journal.enabled)、蚘録の頻床は、損倱しおも蚱容できる情報量に察応したす。

むンデックスを䜿甚しない䞊べ替え

怜玢や集蚈を行う堎合、倚くの堎合、デヌタを䞊べ替える必芁がありたす。 ゜ヌトされるデヌタの量を枛らすために結果をフィルタリングした埌、これが最終段階の XNUMX ぀で行われるこずを望みたす。 この堎合でも、䞊べ替えには必芁になりたす むンデックス。 単䞀むンデックスたたは耇合むンデックスを䜿甚できたす。

適切なむンデックスがない堎合、MongoDB はむンデックスなしでも問題ありたせん。 すべおのドキュメントの合蚈サむズには 32 MB のメモリ制限がありたす。 䞊べ替え操䜜MongoDB がこの制限に達するず、゚ラヌがスロヌされるか、返されたす。 空のレコヌドセット.

むンデックスをサポヌトしない怜玢

怜玢ク゚リは、SQL の JOIN 操䜜ず同様の機胜を実行したす。 最適に機胜するには、倖郚キヌずしお䜿甚されるキヌの倀のむンデックスが必芁です。 䜿甚法が反映されおいないため、これは明らかではありたせん。 explain()。 このようなむンデックスは、に曞かれたむンデックスに远加されたす。 explain()、パむプラむン オペレヌタヌによっお䜿甚されたす。 $match О $sort、パむプラむンの先頭で出䌚うずき。 むンデックスであらゆる段階をカバヌできるようになりたした 集玄パむプラむン.

耇数のアップデヌトの䜿甚をオプトアりトする

方法 db.collection.update() 指定したパラメヌタに応じお、既存のドキュメントの䞀郚たたはドキュメント党䜓を倉曎し、完党に眮き換える堎合に䜿甚したす。 update。 それほど明癜ではないのは、オプションを蚭定しない限り、コレクション内のすべおのドキュメントが凊理されるわけではないずいうこずです。 multi リク゚スト基準を満たすすべおのドキュメントを曎新したす。

ハッシュ テヌブル内のキヌの順序の重芁性を忘れないでください。

JSON では、オブゞェクトは、サむズが XNUMX 個以䞊の名前ず倀のペアの順序なしのコレクションで構成されたす。名前は文字列、倀は文字列、数倀、ブヌル倀、null、オブゞェクト、たたは配列です。

残念ながら、BSON は怜玢時に順序を非垞に重芖したす。 MongoDB では、組み蟌みオブゞェクト内のキヌの順序 事項すなわち { firstname: "Phil", surname: "factor" } - これは同じではありたせん { { surname: "factor", firstname: "Phil" }。 ぀たり、名前ず倀のペアを確実に芋぀けたい堎合は、その順序をドキュメントに保存する必芁がありたす。

混同しないでください "ヌル" О "未定矩"

倀 "未定矩" によるず、JSONでは決しお有効ではありたせんでした 公匏芏栌 JSON (ECMA-404 セクション 5) (JavaScript で䜿甚される堎合でも)。 さらに、BSON の堎合は廃止され、次のように倉換されたす。 $null、これは垞に良い解決策であるずは限りたせん。 䜿甚を避ける "未定矩" MongoDB で.

䜿甚 $limit() без $sort()

MongoDB で開発しおいる堎合、ク゚リたたは集蚈から返される結果のサンプルを確認するだけで圹立぀こずがよくありたす。 このタスクには必芁なものがありたす $limit()ただし、事前に䜿甚しない限り、最終コヌドには含めるべきではありたせん。 $sort。 このメカニズムが必芁なのは、そうしないず結果の順序を保蚌できず、デヌタを確実に衚瀺できないためです。 結果の䞊郚には、䞊べ替えに応じお異なる゚ントリが衚瀺されたす。 確実に動䜜するには、ク゚リず集蚈が決定的である必芁がありたす。぀たり、実行されるたびに同じ結果が生成される必芁がありたす。 を含むコヌド $limit()、しかし、いいえ $sort、決定論的ではないため、远跡が困難な゚ラヌが発生する可胜性がありたす。

たずめ

MongoDB に倱望する唯䞀の方法は、MongoDB を DBMS などの別の皮類のデヌタベヌスず盎接比范するか、特定の期埅に基づいお䜿甚するようになるかです。 オレンゞずフォヌクを比范するようなものです。 デヌタベヌス システムは特定の目的に圹立ちたす。 これらの違いを自分自身で理解し、評䟡するこずが最善です。 MongoDB 開発者に DBMS の道を匷制するような圧力をかけるのは残念なこずです。 デヌタの敎合性を確保し、障害や悪意のある攻撃に匷いデヌタ システムを䜜成するなど、叀い問題を解決する新しくお興味深い方法を知りたいず考えおいたす。

MongoDB のバヌゞョン 4.0 での ACID トランザクション性の導入は、革新的な方法で重芁な改善を導入した良い䟋です。 耇数のドキュメントず耇数のステヌトメントのトランザクションがアトミックになりたした。 ロックの取埗やスタックしたトランザクションの終了に必芁な時間を調敎したり、分離レベルを倉曎したりするこずもできたす。

MongoDB を始める前に知っおおきたかった 14 のこず

続きを読む

出所 habr.com

コメントを远加したす