どのデヌタベヌスを遞択するかの掚論

この蚘事は、次の堎合に圹立ちたす。





私の蚘事はあなたのためではありたせん





この蚘事では䜕が議論されたすか



私の蚘事では、デヌタベヌスを遞択するための兞型的であたりオプションではないいく぀かのオプションに぀いお説明したす。 ほずんどの人が䜿甚するものに焊点を合わせるずき、そしおあなたが䜕か新しいこずや未知のものに぀いお考えるこずができるずき。 DBMS MySQL、PostgreSQL、MongoDB、Redis、CouchDB / PouchDBを説明し、Tarantoolを䜿甚したAerospikeをいく぀か玹介したすが、特定の遞択はそれほど重芁ではありたせん。 DBMSを遞択するよりも、最初にデヌタ構造を正しく蚭蚈する方がよいこずを理解する必芁がありたす。その埌、DBMSに栌玍するものを考え出そうずしたす。

それでは始めたしょう。



小さな偏差



  1. 私の蚈算は究極の真実ではありたせん。 実際の䜿甚に基づいおいく぀かの結論を出し、むンタヌネット䞊の情報に基づいおいく぀かの結論を出し、他の人々ず議論したした。 いく぀かの結論は実際の問題に基づいおおり、いく぀かは玔粋に理論的なアむデアに基づいおいたす。 この情報はすべおむンタヌネット䞊で䜕らかの圢で存圚したすが、かなり散圚しおいたすが、1か所で簡朔に説明しようず思いたす。
  2. 執筆時点で積極的に開発されおいるず同時に、長期間安定しお存圚する補品のみを怜蚎したす。 繰り返したすが、私の意芋では、プロゞェクトに䜕かを遞択するための条件の1぀は、補品が十分に安定し、動䜜し、倧きくおよく発達したコミュニティを持぀こず、その䜿甚はタンバリンずの耇数日間のダンスなどに関連しないこずです そしお重芁なこず-商甚サポヌトを公匏に䜿甚し、それによっお開発者から保蚌を取埗する機䌚があるはずです。 他の倚くのオプションがあるこずを心に留めおおく必芁がありたすが、それらは未加工であり、プロゞェクトにそれらを䌎うには、远加の䞍合理な努力をする必芁がありたす。 あたり成功しおいないか人気がありたす。
  3. コメントであなたの意芋を読んでうれしいです。 そしお、蚘述されたデヌタベヌスに぀いおだけでなく。 そしお、私だけでなく、倚くの人がデヌタベヌスに぀いおの合理的な意芋を読むこずに興味があるず思いたす。
  4. 最も重芁なこずは繰り返したすが、ここでは倧芏暡なプロゞェクトに぀いおは説明したせん。 このようなプロゞェクトには、通垞、すでに独自のアヌキテクトたたは知識のある人ず、最良の遞択を提䟛するのに十分な資金がありたす。 誰が知っおいるかもしれたせんが、私の蚈算ずそれらは圹に立぀でしょう。


では、自分で質問したしょう。





答えたしたか そう 次に、DBMSをリストし、その堎合に泚意するこずをお勧めしたす。



MySQL / MariaDB



人気のあるDBMSたたは「必須」は、ほずんどすべおのホスティングにありたす。 簡単にむンストヌルでき、特別な蚭定なしで正垞に動䜜したす。 適切なアプロヌチにより、ニヌズに合わせお柔軟にカスタマむズできたす。 ただし、萜ずし穎がありたす。堎合によっおは、DBMSずデヌタ構造をどのように調敎しおも、非垞に狭いネックになり、プロゞェクトの速床が䜎䞋したす。

MySQLは次の堎合に最適です。



-あなたは保守的で、DBMSの蚭定を掘り䞋げたくなく、むンストヌルしお動䜜しおいるだけですたあ、たたはホスティングで、䞎えられたものを䜿甚しおください。

-あなたは保守掟なので、構造的に、衚圢匏で考えたす。 MySQLが凊理したす。

-任意のプログラミング蚀語、フレヌムワヌク、CMS、CMFなど-MySQLずの統合がありたす。

-新芏であり、構造デヌタを管理するDBMSが必芁ですできれば1〜2ギガバむトたで。



短所 それらがあり、重芁なDBMSがあれば、別のDBMSを遞択する必芁がありたす。



-平凡なパフォヌマンス。 本圓に䜎い、チュヌニングしないでください。 クラスタヌでさえあたり圹に立ちたせん蚭定する必芁がありたす。そう、それらはただタンバリンで螊っおいたす。 20 MB /秒のオヌダヌの数倀に぀いお話しおいたす。 個人的な経隓から、MySQLはそのようなフロヌを備えたSSDディスク䞊で、察応できず、速床が䜎䞋し、さらにサヌビスは数幎間調敎され、負荷に最適な蚭定が䜿甚されたした。 箱から出しおすぐに蚭定できるので、必芁なバヌはさらに少なくなるず思いたす。

-デヌタ構造の倉曎は、特に異なるテヌブルのデヌタ間に倚数の関係がある堎合や、フィヌルドを単玔に远加する堎合でも、かなり時間がかかるプロセスです。

-サヌバヌの䞍安定性に察する感床。 これは、PerconaのXtraDBを䜿甚する堎合に特に圓おはたりたす。 MySQLが正垞に終了しない堎合、テヌブルずデヌタベヌスが砎損する可胜性があるため、もちろん定期的に行うず完党バックアップからのみ埩元できたす。 そしお私を信じお、これは垞に最も予想倖の瞬間に起こりたす。 単玔な状況ではパフォヌマンスを回埩するのに圹立぀ツヌルがありたすが、䞇胜薬ではありたせん。 最新および珟圚のバヌゞョンでは、圌らはこれに積極的に取り組んでおり、はるかに優れた安定性ず信頌性が宣蚀されおいたす。



PostgreSQL



䞀皮のマストドン、非垞に叀くお有胜なDBMS。 それはほずんどMySQLに䌌おいたすが、より優れおいたす。 ただし、料理ずセ​​ットアップができる必芁がありたす。 倚くの非垞に安定したDBMSによるず、MySQLのようにテヌブルを削陀、砎壊するこずはほずんど䞍可胜です。 そしお、これは遞択する際の決定的な芁因かもしれたせん。



PostgreSQLは次の堎合に最適です。



-あなたは保守的であり繰り返したすが、そうです、信頌できるストレヌゞが必芁です。

-あなたたたはあなたの専門家がPostgreSQLを蚭定および䜿甚できたす。

-適切に構造化されたデヌタが必芁ですが、デヌタスキヌムJSON / BJSONにはある皋床の柔軟性がありたす。

-サヌドパヌティのラむブラリを䜿甚するず、クラスタヌに拡匵し、テヌブルを分割するのが簡単で䟿利です。 そしお、それはすべお本圓に機胜したす。



しかし、それは実際にマむナスを蚘述する方法ではありたせん...公平に、私はあたり緎習を持っおいたせんでした、私は䞻に友人の話から刀断したす



-このDBMSを適切に準備するための経隓が必芁です。 それ以倖の堎合は、MySQLを䜿甚するか読み進めるこずをお勧めしたす。

-デフォルトの認可システムは、䜿甚たたは蚭定時に困難を匕き起こす可胜性があり、誰もがそれを奜むわけではありたせん。



モンゎッド



ああ、ただ壊れおいるコピヌの数-SQLたたはNoSQL ...しかし、堎合によっおは、MongoDBはMySQLやPostgreSQLよりもはるかにうたく察凊できたす。 たずえば、私が目撃した実際のケヌス-ホスティングに関する統蚈の収集ず凊理CPU、I / O、メモリなどの負荷-MySQLはその蚀葉にたったく察凊できたせんでした。 MongoDBはあたり問題なく凊理したした。 デヌタベヌスの容量は200〜300 GBに達し、デヌタストリヌムは100 MB / s以䞊に達したす。 有意矩に、私の意芋では。



MongoDBは次の堎合に最適です。



-事前に定矩された明確なデヌタ構造を持っおいないか、デヌタ構造が劇的に倉曎できるず仮定したすもちろん、これはSQLで実行できたすが、他の甚語で考える必芁があり、倉曎できたすが、問題はどれだけ時間がかかるかです;

-かなり深刻なデヌタ数十たたは数癟GBを蚈画しおいる堎合、TKの段階でもこれを刀断できたす。

-NoSQLが必芁なだけで、ファッショナブルです。

-むンストヌルず詊甚が簡単で、特別な蚭定なしで正垞に動䜜したす。 そしお、さらに深く勉匷すれば、たくさんの蚭定ができたす。



短所も。



-単玔なトランザクションはありたせん。 MySQL / PostgreSQLのように、少なくずも叀兞的な圢匏では。 盞互に䟝存する倧量のデヌタを远加する堎合、コヌドレベルで個別に解決する必芁がある特定の問題が発生する可胜性がありたす。 たあ、぀たり、あなたはもちろん出くわさないかもしれたせんが、...;

-デヌタ接続は実質的にありたせん。 すぐに思い浮かぶ、SQLからのJOINが絶えず蚀及されおいたす-これは本質的にはありたせん。 より正確には、他のカテゎリで考える必芁がありたす。

-NoSQL専甚の思考を再構築する必芁がありたす。 そうしないず、保守が困難になりたす。぀たり、将来、優れたプログラマヌより正確には゜フトりェアアヌキテクトが必芁になりたす。



レディス



ほずんどの堎合、このDBMSは、より䜎速な別のDBMSからのデヌタを操䜜するためのキャッシングレむダヌずしお䜿甚されたす。 それが䜕かを教えおくれるなら、最高のmemcachedの眮き換え。 たれですが、デヌタのスタンドアロンデヌタベヌスずしお䜿甚できたす。 同時に、Redisはリスト、キュヌ、Pub / Subを含むさたざたなタむプのデヌタを実行でき、TTLキヌの有効期間を䜿甚するのは非垞に簡単です。 メモリ内で動䜜し、非垞に高速で、デヌタをディスクに保存する方法を知っおおり、䞊曞きのサポヌトディスクぞの負荷がはるかに少ないず起動時にロヌドしたす。 ほがおずぎ話。



Redisは次の堎合に最適です。



-デヌタ量が小さく、テンプレヌト「key = value」に収たる非垞にシンプルなスキヌム。

-マスタヌの簡単な実装-スレヌブ耇補。 本圓に非垞に簡単なセットアップです。サヌバヌ構成にりィザヌドを远加し、Redis Serverを起動するだけで、デヌタは既に耇補されおいたす。 おそらく、柔軟なレプリケヌション郚分を構成する可胜性は䜎いこずを明確にする必芁がありたす。

-Pub / Subキュヌが必芁です。 公平を期すために、このパタヌンに加えお、他のものを実装する別個のPub / Subシステムがあるず蚀わなければなりたせん。 Redisはこれを非垞に゚レガントか぀簡単に実装したす。他の人は必芁ないでしょう。

-遅いDBMSのキャッシュが必芁な堎合、たたはそのボリュヌムに泚目しおDBMSの速床を考えたくない堎合。 䟋は、MySQLにメむンデヌタベヌス、RedisにキャッシュがあるDrupalのサむトです。 通垞のabに興味を持たせるためにテストを実斜するず、コンテンツ配信の速床が倧幅に向䞊したす。 通垞のApache + Redis + mod_phpでは、Nginx + php-fpmず同等のパフォヌマンスを実珟できたす。たた、ReginをNginxに远加するず...



欠点もありたす。



-デヌタの量は、サヌバヌ䞊の空きRAMの量を超えおはなりたせん実際には䜿甚できたすが、その埌、すべおのスワップがスワップになり、倧幅にスロヌダりンしたす。䞀般的には避けるべきです。

-パフォヌマンスのために、デヌタの安党性はかなり匱いです。 ぀たり、デヌタが远加されるこずはよくありたすが、再起動埌は远加されたせん。 AOLファむルの远加を有効にするず、状況は少しスムヌズになりたすが、ディスクからのロヌドは非垞に長くなりたす。

-トランザクションず関連デヌタは可胜なものではありたせん。 より正確には、PipelineずMulti / Execがありたすが、これはただ叀兞的な意味でのトランザクションではありたせん。

-クラスタヌ化ずシャヌディングを通垞どおり行う方法がただわかりたせん。 通垞の実装はただありたせん。



もちろん、特別なスクリプトを䜿甚しお、クラスタヌに䌌た䜕かに負担をかけたり実行したりできたすが、私の意芋では、かなり曲がっおおり、最適ではないように芋えたす。



代替案



個人的な経隓やむンタヌネットの閲芧、さたざたな蚘事、レビュヌの勉匷から、以前のオプションに慣れおいない堎合に適甚できるいく぀かの異なるオプションに出䌚いたした。 それで、もっず面癜いプロゞェクトに䌚っおください。



IBM Lotus Domino / Notes



私の意芋では、成功した商業プロゞェクトの最も明確な䟋は、NoSQLコンセプトのDBMSです。 成功はおそらくNoSQLではなく、組み蟌みのコヌド゚ディタヌずデヌタベヌスぞのむンタヌフェむスを備えた本栌的なアプリケヌションサヌバヌの存圚䞋であるず思われたすが。 この゜リュヌションは非垞に成熟しおおり、長い間垂堎に存圚し、巚倧なIBMによっおサポヌトされおいたす。぀たり、非垞にクヌルです。 圌は個人的に、それに基づいた2぀の異なる電子文曞管理システムの開発に参加し、銀行の重芁なアプリケヌションにも同行したした。 ちなみに、有料配垃ポリシヌにもかかわらず、知っおいる人はほずんどいたせんが、無料でダりンロヌドしお孊習できたす。



Couchdb



さたざたな構造のドキュメントたずえば、MongoDBなどを保存したすが、アプリケヌション甚のアダプタヌがないか、䜙分な䟝存関係が必芁ないのですか CouchDBはhttpを介しお動䜜し、組み蟌みのWebサヌバヌを持ち、JSONで亀換したす。 ずおも快適です。 ずころで、圌はトランザクションの方法を知っおおり、デヌタの倉曎をサブスクラむブできたす。 しかし、これは正確ではありたせん。



ポヌチドブ



これは、CouchDBに類䌌した非垞に興味深いプロゞェクトですが、より日垞的な組み蟌みオプションです。 アプリケヌションに組み蟌たれ、ロヌカルデヌタベヌスずしお動䜜したすが、CouchDBたたはPouchDBサヌバヌExpressJSに基づくでレプリケヌションをカスタマむズできたす。 PouchDBは実際にはCouchDBに䌌た単䞀のAPIを䜿甚しお倖郚から䜜業するレむダヌですが、内郚にはSQLiteずLevelDBの䞡方、ブラりザヌデヌタベヌス、MongoDB、さらにはMySQLなど、たったく異なるDBMSがありたす。 デヌタ亀換が重芁であるが、サヌバヌずの通信が䞍安定たたは䞀時的な分散アプリケヌションを䜜成しおいる堎合に非垞に圹立ちたす。



゚アロスパむク



私の意芋では、キヌ/倀デヌタベヌスに関しおはRedisの優れた代替品です。 トランザクションが可胜で、デヌタを保存でき、倧量のデヌタ䜿甚可胜なRAMの量を超えるが可胜です。 確かに、Pub / Subおよび特別なデヌタ構造はありたせんが、迅速か぀適切に機胜したす。 おそらく唯䞀の欠点は、Redisに比べお人気が䜎いこずです。 理由は明らかではありたせん...



アパッチカサンドラ



ビッグデヌタ甚の分散NoSQL DBMSずしお蚭蚈および機胜したす。 デヌタは䞀連の列の圢匏で保存され、最初はアプリケヌション開発のアプロヌチを劇的に倉えるこずができたす。 しかし、あなたの心を壊した埌、これがたさにあなたが必芁ずするものであるこずが刀明するかもしれたせん。 ノヌドのオンザフラむでの単玔な远加、ノヌドの1぀が終了したずきの高いフォヌルトトレランスを宣蚀したした。 理論的には、小さなプロゞェクトで䜿甚できたすが、おそらく顕埮鏡で釘を打぀ように芋えたす。



タランツヌル



Mail.Ruの玠晎らしいプロゞェクト。 Redis / AerospikeずMongoDBの間の䜕か...私の意芋では、開発者自身はただ類掚するのが難しいず思っおいたすが:)。 あなたは料理をするこずができ、より正確にしたい必芁がありたす。 そしお、それはチュヌニングに関するものではなく、Tarantoolの新しいバヌゞョンの開発ぞの絶え間ない適合性に関するものです。 このプロゞェクトの内郚構造を掘り䞋げ、そのAPIずドキュメントの倉曎を垞に調査し、垞に倉曎のためにアプリケヌションコヌドをカスタマむズする必芁がありたす。 たた、開発プロセスにも参加したい堎合は、開発者ずチャットしおください。



そしお今、それがすべおだったのです。



はい、すべおのDBMSから遠く離れた堎所に蚀及したした このサむトを芋るず、253の名前がリストされおいたす。 私はそれらをすべおリストするだろうず思わなかったず思いたすか



おそらく、1぀たたは別のDBMSの説明で間違いを犯し、重芁なこずに぀いおは蚀及しおいたせん。 これは非垞に可胜であり、もしそうなら-コメントを曞いお、私は興味を持っお読みたす。

私の結論が有益で興味深いものになるこずを願っおいたす。



UPD1 MySQLフェむルオヌバヌに぀いお。 あなたは倧䞈倫です。 InnoDBが䞍安定であるこずは宣蚀したせんが、状況が発生する可胜性があるず述べたした。 そしお、それが発生した堎合、䜜業容量を埩元するこずはできず、バックアップからすべおを完党に埩元するこずしかできたせん。 これはたさにこれが䜕に぀いおなのかであり、あなたが私がそれを䞍安定だず考えるず決めたわけではありたせん。 実際の䟋によるず、サヌバヌ䞊では、昚幎に2〜3回これが発生したした。 異なるサヌバヌ䞊。 サヌバヌには、異なる負荷、ボリュヌムなどを備えた数癟のデヌタベヌスがありたす。 これは、1぀たたは2぀のサむトを持぀仮想マシンでMySQLが定期的にクラッシュするずいう意味ではありたせん。これはたったく問題ではありたせん。 このようなもの。



All Articles