在日常開發(fā)中,我一般用mysql數(shù)據(jù)儲存數(shù)據(jù),memcache儲存緩存,但是我不知道如mongodb這一類的nosql數(shù)據(jù)庫到底相比mysql這種數(shù)據(jù)庫有什么優(yōu)勢,在什么場景下我改選擇mongodb這種數(shù)據(jù)庫?希望各位能用淺顯的語言幫忙解釋下。
認(rèn)證0級講師
例を挙げてください:
mysql: テーブルには 5 つのフィールドがあります。プログラムは作成されています。ここに 2 つのフィールドを追加する必要があります。そのため、まずデータベースにアクセスしてテーブル構(gòu)造を変更し、フィールドを追加してからプログラムに戻り、 SQLコードを修正します。
mongodb: オブジェクトには 5 つの屬性があります。次に、ここに 2 つの屬性 (フィールド) を追加する必要があります。これらはプログラムに直接追加できます。
リレーショナル データベースでは、レコードは行、フィールドは列であり、データは行と列の交差點にあります。複數(shù)の行と列は、同じ 2 次元構(gòu)造に従う必要があります。
非リレーショナル データベース。屬性はオブジェクトのみに屬します。オブジェクトは互いに獨立しています。
長期的なビジネスには mysql+memcache の組み合わせを使用し、統(tǒng)計ログ ビジネスや PM が考慮する必要がある一時的なトランザクションには mongodb+redis の組み合わせを使用します。
mongodb の利點は柔軟性ですが、欠點も柔軟性であり、安定性は mysql ほど良くありません
従來のリレーショナル データベースと比較すると、MongoDB は非リレーショナル データベースの代表的なものの 1 つです。 MongoDB をいつ使用するかを判斷するには、まず MongoDB にどのような機(jī)能があり、何ができるのか、何ができないのかを理解し、次に特定の狀況に基づいて MongoDB を使用するかどうかを決定する必要があります。最初に公式ドキュメントの導(dǎo)入部分を読むことをお勧めします。この部分には、MongoDB の最も重要な機(jī)能がリストされており、他のほぼすべての機(jī)能はこれらの機(jī)能を中心に展開されています。これらの機(jī)能は、多くの場合、MongoDB を採用するかどうかを決定する重要な要素となります。
選び方を簡単かつ大まかに紹介した記事はこちらです。
しかし、テクノロジーの発展に伴い、いわゆる「リレーショナル」と「非リレーショナル」の境界がますます曖昧になってきている一方で、Postgre や MySQL などの従來の RDBMS は非リレーショナルをサポートし始めています。 -JSON などのリレーショナル モデル。一方、MongoDB は JOIN のサポートも開始しており、將來的にはトランザクションもサポートする予定です。境界があいまいになった今、どのテクノロジーをいつ使用するべきかを一概に言えないため、比較した結(jié)果、「あれもこれも使える」という結(jié)果になることがよくあります。しかし、プロジェクトで特定のテクノロジを使用した場合に得られるものと失うものを比較し、得られる利益が損失を補(bǔ)えるかどうかを比較検討し、最終的にこのテクノロジを採用するかどうかを決定することはできます。
データの構(gòu)造が不明な場合は、mongodb を使用するのが最適です。たとえば、SQL データベースでは、最初にすべてのフィールドの型、名前、長さなどを定義する必要があります。これでは、Mongodb は柔軟性に欠ける可能性があります。特定の分野のデータを持っていないだけです。
たとえば、サーバーがシステム イベントをデータベースに保存したいとします。特定のユーザーが何かをしたとき、クエリのために送信した投稿の元の本文の內(nèi)容を記録する必要がある場合と、SQL で文字列を定義する場合に投稿の內(nèi)容を記録する必要がない場合があります。長さが 1000 の場合、このスペースは無駄になりますが、mongodb では無駄になりません。そして、このレコードをフェッチすると、フィールドの 1 つが空であっても、SQL データベースは定義した構(gòu)造を返します。また、mongodb は保存時に空のフィールドを含めず、フェッチするときにも同じことは起こりません。
また、mongodb はさまざまな json 構(gòu)造を非常によくサポートしていますが、これが mongodb を使用する主な目的ではありません。