議論のために、FourSquareシナリオを考えてみましょう。
エンティティ:
関係:
これらにはエラーがある可能性が高いため、指摘してください。
テーブル:
長所:
短所:
オブジェクト:
エッジ:
長所:
短所:
3つの別個のデータベース?
長所:
短所:
記録のために、彼らは最終的にMongoDBを使用しました。上記のすべての疑問符に加えて:
あなたの質問は、学期が長い大学のコースのトピックかもしれません。それを扱いやすいチャンクに分解する必要があります。そのため、私はいくつかの部分的な答えを捨てます。
使用するデータベースの種類を決定する際に最初に確認することの1つは、実行するクエリの種類と、データベースを作成する前にそれらをすべて知っているかどうかです。 SQLデータベースには、データベース内のすべてのデータにわたる強力で柔軟なクエリの利点があります。グラフデータベースには高度に特殊化されたクエリ機能があり、グラフデータに最適であり、非グラフデータには非常に適していません(ただし、グラフデータベースはSQLデータベースのコンポーネントである場合があります)。 NoSQLデータベースは、データを取得して操作する機能がはるかに制限されています。
次は、ACIDプロパティについての感じ方です。原子性、一貫性、分離、および耐久性です。 SQLデータベースは、4つすべてについて強力な保証を提供します。NoSQLデータベースは通常4つすべてを約束するものではなく、それらがどのように出発するかは、さまざまなNoSQLデータベース実装を区別する主な違いの1つです。一方、パーティションに直面しても一貫性と可用性を保証することはできません( BrewerのCAP thorem を参照)。したがって、完全な可用性に直面してもSQLデータベースは機能しません。パーティション。個人的には、データベース内のデータの耐久性に多くの注意を払っています。0.0001%のデータ損失さえ許容できないデータを処理し、データセットはパーティションについて心配する必要がないほど小さいので、 SQLデータベースを非常に支持します。
もう1つの非常に実用的な考慮事項は、サーバーコードの品質、データベース管理者とプログラマの可用性、発生した問題に利用できるサポートの品質、アプリケーションをデータベースに接続するためのインターフェイスライブラリの品質と可用性などです。 MySQLは約20年前から存在しており、バグの大部分が解決され、非常に広く使用されているため、優れたサポートと人員の可用性があり、今後10年間サポートされる可能性があります。 Riakについてこれらのことを言うことはできません。
Googleは実質的にNoSQLデータベースを発明して、ワールドワイドウェブ全体のキャッシュされたインデックス付きバージョンを保存できるようにしましたが、MySQLをまだいくつか使用しています。