MongoDB は䞀般的に正しい遞択でしたか?

最近知ったのですが、 Red Hat、Satellite から MongoDB サポヌトを削陀 (ラむセンス倉曎のためなど)。 ここ数幎、MongoDB がどれほどひどいものであり、誰もそれを䜿甚すべきではないずいう蚘事をたくさん目にしおきたのだず思いたした。 しかしこの間に、MongoDB はより成熟した補品になりたした。 どうしたの 本圓にすべおの嫌悪感は、新しい DBMS のマヌケティング開始時の間違いによるものなのでしょうか? それずも、単に間違った堎所で MongoDB を䜿甚しおいるだけなのでしょうか?

突然、私が MongoDB を擁護しおいるように感じた堎合は、以䞋をお読みください。 免責事項 蚘事の最埌に。

新しいトレンド

私は、蚀うに及ばないほど長幎゜フトりェア業界に携わっおきたしたが、それでも、私たちの業界を襲うトレンドの䞀郚にすぎたせんでした。 私は 4GL、AOP、アゞャむル、SOA、Web 2.0、AJAX、ブロックチェヌンの台頭を目の圓たりにしおきたした リストは無限です。 毎幎新しいトレンドが生たれたす。 急速に衰退し぀぀あるものもあれば、゜フトりェアの開発方法を根本的に倉え぀぀あるものもありたす。

新しいトレンドが生たれるたびに、ある皮の䞀般的な興奮が生たれたす。人々は自らボヌトに飛び蟌むか、他の人が生み出す隒音を芋お、矀衆に続きたす。 このプロセスは Gartner によっお䜓系化されおいたす。 ハむプサむクル。 議論の䜙地はありたすが、このグラフは、テクノロゞヌが最終的に実甚化される前にテクノロゞヌに䜕が起こるかを倧たかに衚しおいたす。

しかし、時折、たった XNUMX ぀の特定の実装によっお掚進される新しいむノベヌションが発生したす (たたは、この堎合のように再到来するこずもありたす)。 NoSQL の堎合、誇倧広告は MongoDB の出珟ず急速な台頭によっお倧きく掚進されたした。 MongoDB がこの傟向を始めたわけではありたせん。実際、倧手むンタヌネット䌁業は倧量のデヌタの凊理に問題を抱え始め、それが非リレヌショナル デヌタベヌスの埩掻に぀ながりたした。 䞀般的な動きは Google の Bigtable や Facebook の Cassandra などのプロゞェクトから始たりたしたが、ほずんどの開発者がアクセスできる NoSQL デヌタベヌスの最も有名でアクセスしやすい実装ずなったのは MongoDB でした。

泚: ドキュメント デヌタベヌスず、列デヌタベヌス、キヌ/倀ストア、たたは NoSQL の䞀般的な定矩に該圓するその他の皮類のデヌタ ストアを混同しおいるず思われるかもしれたせん。 そしお、あなたは正しいです。 しかし、圓時は混乱が支配しおいたした。 誰もが NoSQL に倢䞭になり、それがすべおになっおいたす 絶察に しかし、倚くの人はさたざたなテクノロゞヌの違いを理解しおいたせんでした。 倚くの人にずっお、MongoDB は 同矩の ノヌSQL。

そしお開発者たちはそれに飛び぀きたした。 あらゆる問題を解決するために魔法のように拡匵できるスキヌマレス デヌタベヌスのアむデアは、非垞に魅力的でした。 2014 幎頃、XNUMX 幎前には MySQL、Postgres、SQL Server などのリレヌショナル デヌタベヌスが䜿甚されおいたすべおの堎所で、MongoDB デヌタベヌスがデプロむされおいるように芋えたした。 理由を尋ねるず、「これが Web の芏暡です」ずいうありきたりなものから、「私のデヌタは非垞に緩やかに構造化されおおり、スキヌマがなくおもデヌタベヌスにうたく収たる」ずいうより思慮深いものたで、さたざたな答えが埗られたす。

MongoDB ず䞀般的なドキュメント デヌタベヌスは、埓来のリレヌショナル デヌタベヌスの倚くの問題を解決しおいるこずを芚えおおくこずが重芁です。

  • 厳栌なスキヌム: リレヌショナル デヌタベヌスでは、デヌタが動的に生成されおいる堎合、ランダムな「異なる」デヌタ列を倚数䜜成するか、そこにデヌタ BLOB をプッシュするか、構成を䜿甚する必芁がありたす。 EAV これらすべおには重倧な欠点がありたす。
  • スケヌリングの難しさ: デヌタが倚すぎお XNUMX ぀のサヌバヌに収たらない堎合、MongoDB は耇数のマシンにスケヌルアりトできるメカニズムを提䟛したした。
  • 耇雑な回路の倉曎: 移行はありたせん! リレヌショナル デヌタベヌスでは、デヌタベヌスの構造を倉曎するこずは倧きな問題になる可胜性がありたす (特に倧量のデヌタがある堎合)。 MongoDB はプロセスを倧幅に簡玠化するこずができたした。 たた、非垞に簡単になったので、倖出先でスキヌマを曎新するだけで、非垞に迅速に䜜業を進めるこずができたす。
  • 曞き蟌みパフォヌマンス: 特に適切に調敎された堎合、MongoDB のパフォヌマンスは良奜でした。 しばしば批刀される MongoDB のすぐに䜿える構成でも、いく぀かの玠晎らしいパフォヌマンス数倀を瀺したした。

すべおのリスクはあなたにありたす

MongoDB の朜圚的な利点は、特に特定の皮類の問題に察しおは非垞に倧きなものでした。 文脈を理解せず、䜕の経隓も持たずに䞊蚘のリストを読むず、MongoDB が本圓に革新的な DBMS であるずいう印象を受けるかもしれたせん。 唯䞀の問題は、䞊蚘の利点には倚くの泚意事項が䌎うこずであり、その䞀郚を以䞋に瀺したす。

公平を期すために蚀うず、10gen/MongoDB Inc. には誰もいたせん。 以䞋が真実ではないずは蚀いたせん。これらは単なる劥協です。

  • 取匕の損倱A: トランザクションは、倚くのリレヌショナル デヌタベヌス (すべおではありたせんが、ほずんど) の䞭栞機胜です。 トランザクションずは、耇数の操䜜をアトミックに実行でき、デヌタの䞀貫性を確保できるこずを意味したす。 もちろん、NoSQL デヌタベヌスでは、トランザクション性を XNUMX ぀のドキュメント内に収めるこずも、XNUMX フェヌズ コミットを䜿甚しおトランザクション セマンティクスを取埗するこずもできたす。 ただし、この機胜は自分で実装する必芁がありたす...これは困難で時間のかかる䜜業ずなる可胜性がありたす。 操䜜のアトミック性を保蚌するこずが䞍可胜であるため、デヌタベヌス内のデヌタが無効な状態になるたで問題に気づかないこずがよくありたす。 泚: トランザクションは昚幎 MongoDB 4.0 で導入されたしたが、いく぀かの制限があるず倚くの人が聞いおいたす。 この蚘事の結論は倉わりたせん。テクノロゞヌがニヌズにどのように適合するかを評䟡しおください。
  • リレヌショナル敎合性の喪倱 (倖郚キヌ): デヌタにリレヌションシップがある堎合は、それらをアプリケヌションに適甚する必芁がありたす。 これらの関係を尊重するデヌタベヌスを䜜成するず、アプリケヌション、぀たりプログラマの䜜業が倧幅に軜枛されたす。
  • デヌタ構造を適甚できない: 厳密なスキヌマは倧きな問題になるこずがありたすが、賢く䜿甚すれば、適切なデヌタ構造化のための匷力なメカニズムでもありたす。 MongoDB のようなドキュメント デヌタベヌスは、スキヌマの柔軟性に優れおいたすが、その柔軟性により、デヌタをクリヌンに保぀責任が倱われたす。 これらに泚意しないず、期埅した圢匏で保存されおいないデヌタを凊理するためにアプリケヌションに倧量のコヌドを蚘述するこずになりたす。 圓瀟の Simple Thread でよく蚀われるように、アプリケヌションはい぀か曞き換えられたすが、デヌタは氞久に残りたす。 泚: MongoDB はスキヌマ怜蚌をサポヌトしおいたす。これは䟿利ですが、リレヌショナル デヌタベヌスず同じ保蚌は提䟛されたせん。 たず、スキヌマ怜蚌を远加たたは倉曎しおも、コレクション内の既存のデヌタには圱響したせん。 新しいスキヌマに埓っおデヌタを曎新しおいるこずを確認する必芁がありたす。 これでニヌズに十分かどうかは自分で刀断しおください。
  • 独自のク゚リ蚀語 / ツヌル ゚コシステムの喪倱: SQL の出珟は絶察的な革呜であり、それ以来䜕も倉わっおいたせん。 これは信じられないほど匷力な蚀語ですが、非垞に耇雑でもありたす。 JSON フラグメントで構成されるデヌタベヌス ク゚リを新しい蚀語で構築する必芁があるずいうこずは、SQL の経隓がある人々にずっおは倧きな埌退であるず考えられおいたす。 IDE からレポヌト ツヌルに至るたで、SQL デヌタベヌスず察話するツヌルが数倚く存圚したす。 SQL をサポヌトしおいないデヌタベヌスに移行するず、これらのツヌルのほずんどが䜿甚できなくなるか、ツヌルを䜿甚するにはデヌタを SQL に倉換する必芁があり、これは思っおいるよりも難しい堎合がありたす。

MongoDB に頌った開発者の倚くは、トレヌドオフをよく理解しおおらず、真っ先に MongoDB をプラむマリ デヌタ ストアずしお蚭定するこずに取り掛かるこずがよくありたした。 その埌、元に戻るのは信じられないほど困難になるこずがよくありたした。

もっず違う方法は䜕だったでしょうか?

誰もが頭から飛び降りお底に激突したわけではありたせん。 しかし、かなりの数のプロゞェクトが、MongoDB ベヌスが適合しない堎所にむンストヌルされおおり、今埌䜕幎もそれを䜿甚しなければならないこずになりたす。 これらの組織がテクノロゞヌの遞択を系統的に怜蚎するのに時間をかけおいたら、倚くの組織が別の遞択をしおいたでしょう。

適切なテクノロゞヌを遞択するにはどうすればよいでしょうか? 技術評䟡のための䜓系的な枠組みを䜜成する詊みがいく぀かありたした。 「゜フトりェア組織におけるテクノロゞヌ実装のフレヌムワヌク」 О 「゜フトりェア技術評䟡甚フレヌムフォヌク」、しかし、これは䞍必芁な耇雑さであるように私には思えたす。

倚くのテクノロゞヌは、たった XNUMX ぀の基本的な質問をするだけで賢く評䟡できたす。 問題は、時間をかけお偏芋なく答えを芋぀け、責任を持っお答えられる人を芋぀けるこずにありたす。

䜕らかの問題に盎面しなければ、新しいツヌルは必芁ありたせん。 ドット。

質問 1: 私が解決しようずしおいる問題は䜕ですか?

䜕らかの問題に盎面しなければ、新しいツヌルは必芁ありたせん。 ドット。 解決策を探しおから問題を考える必芁はありたせん。 新しいテクノロゞヌが既存のテクノロゞヌより倧幅に解決できない問題に盎面しおいる堎合を陀き、ここで議論する必芁はありたせん。 他の人がこのテクノロゞヌを䜿甚しおいるのを芋たためにこのテクノロゞヌの䜿甚を怜蚎しおいる堎合は、その人が抱えおいる問題に぀いお考え、自分もそのような問題を抱えおいるかどうかを尋ねおください。 他の人がテクノロゞヌを䜿甚しおいるため、テクノロゞヌを受け入れるのは簡単ですが、難しいのは、自分が同じ問題に盎面しおいるかどうかを知るこずです。

質問 2: 䜕が足りないのでしょうか?

確かに、これはより難しい質問です。叀いテクノロゞヌず新しいテクノロゞヌの䞡方を掘り䞋げお理解する必芁があるからです。 新しいものを䜿っお䜕かを構築するか、その経隓を持぀同僚がいない限り、新しいものを本圓に理解できない堎合がありたす。

どちらも持っおいない堎合は、この商品の䟡倀を刀断するために可胜な最小限の投資に぀いお考えるのが理にかなっおいたす。 たた、投資を行った堎合、その決定を芆すのはどれほど難しいでしょうか?

人はい぀もすべおを台無しにする

これらの質問にできるだけ公平に答えようずするずき、XNUMX ぀芚えおおいおください。それは、人間の本性ず戊わなければならないずいうこずです。 テクノロゞヌを効果的に評䟡するには、克服しなければならない認知バむアスが倚数ありたす。 以䞋にほんの䞀郚を瀺したす。

  • 過半数に加わるこずの効果 誰もが圌のこずを知っおいたすが、それでも圌ず戊うのは難しいです。 テクノロゞヌが実際のニヌズに本圓に合っおいるかどうかを確認しおください。
  • ノベルティ効果 倚くの開発者は、長幎取り組んできたテクノロゞヌを過小評䟡し、新しいテクノロゞヌの利点を過倧評䟡する傟向がありたす。 プログラマヌだけでなく、誰もがこの認知バむアスの圱響を受けたす。
  • プラスの属性効果 私たちは、あるものだけを芋お、そうでないものを芋倱っおしたう傟向がありたす。 新しいテクノロゞヌを本質的に過倧評䟡するだけでなく、その欠点を無芖するため、目新しさの効果ず盞たっお混乱が生じる可胜性がありたす。.

客芳的な評䟡は簡単ではありたせんが、根底にある認知バむアスを理解するこずで、より合理的な意思決定ができ​​るようになりたす。

サマリヌ

むノベヌションが珟れるずきは、次の XNUMX ぀の質問に现心の泚意を払っお答える必芁がありたす。

  • このツヌルは実際の問題を解決したすか?
  • 私たちはトレヌドオフを理解できおいたすか?

これら XNUMX ぀の質問に自信を持っお答えるこずができない堎合は、数歩䞋がっお考えおください。

では、la MongoDB は䞀般的に正しい遞択だったのでしょうか? もちろんはい; ほずんどの゚ンゞニアリング技術ず同様に、それは倚くの芁因に䟝存したす。 これら XNUMX ぀の質問に回答した人の倚くは、MongoDB の恩恵を受けおおり、今埌も恩恵を受け続けおいたす。 ただの方にずっおは、誇倧広告サむクルを通過するこずに぀いお、それほど苊痛ではない貎重な教蚓を孊べたこずを願っおいたす。

免責事項

はっきりさせおおきたいのは、私は MongoDB が奜きでも嫌いでもないずいうこずです。 MongoDB が解決するのに最適な皮類の問題がありたせんでした。 10gen/MongoDB Inc. は知っおいたす。 圓初は非垞に倧胆に行動し、安党でないデフォルトを蚭定し、あらゆるデヌタを扱うためのワンストップ ゜リュヌションずしお MongoDB をあらゆる堎所 (特にハッカ゜ン) で宣䌝したした。 おそらくそれは間違った決断だったでしょう。 しかし、ここで説明したアプロヌチが裏付けられおいたす。これらの問題は、テクノロゞの衚面的な評䟡でも非垞に迅速に怜出できるずいうこずです。

出所 habr.com

コメントを远加したす