web-dev-qa-db-ja.com

ドキュメントデータベース、リレーショナルデータベース、グラフデータベースのどちらを使用すればよいですか。

議論のために、FourSquareシナリオを考えてみましょう。

シナリオ

エンティティ:

  • ユーザー
  • 場所

関係:

  • チェックイン:ユーザー<->場所、多対多
  • 友達:ユーザー<->ユーザー、多対多

データベース設計

これらにはエラーがある可能性が高いため、指摘してください。

RDBMS

テーブル:

  • ユーザー
  • 場所
  • チェックイン(ジャンクション)
  • 友達(ジャンクション)

長所:

  • CAP:一貫性、可用性

短所:

  • CAP:パーティション許容度、別名シャーディング
  • スキーム=柔軟性のない構造
  • 不十分なレプリケーション?

グラフ

オブジェクト:

  • ユーザー
  • 場所

エッジ:

  • 友達:ユーザー<->ユーザー
  • チェックイン:ユーザー->場所
    • タイムスタンプを含む

長所:

  • CAP:一貫性、可用性?
  • スキーマレスで簡単に変更可能なオブジェクトとエッジ
  • グラフトラバーサルクエリ。例:
    • クラスタリング
      • 友達のグループを見つける
      • 同じような人が好きなレストランを見つける
    • 他の一般的で便利なクエリはありますか

短所:

  • CAP:パーティショントレランス?

ドキュメント/オブジェクト

3つの別個のデータベース?

  • ユーザー
    • 友達リスト
  • チェックイン
    • タイムスタンプ
    • ユーザー
    • 場所
  • 場所

長所:

  • CAP:可用性、パーティション許容度
  • スキーマレスで簡単に変更可能なオブジェクト

短所:

  • CAP:一貫性

ご質問

記録のために、彼らは最終的にMongoDBを使用しました。上記のすべての疑問符に加えて:

  1. ドキュメントデータベースの実装方法がわかりません。
  2. ドキュメントデータベースはどのようにパーティションの許容範囲を取得しますか?
  3. 1人のユーザーのチェックインを取得するために、この操作ではすべてのチェックインを解析し、ユーザー名のメタデータをフィルター処理すると想定します(マップ+フィルター)。ユーザーごとに1,000,000以上のドキュメントを解析するパフォーマンスは、ひどく劣ります。これは正しい動作ではないと思いますか?
  4. 他にどんな長所/短所がありますか?
29
wting

あなたの質問は、学期が長い大学のコースのトピックかもしれません。それを扱いやすいチャンクに分解する必要があります。そのため、私はいくつかの部分的な答えを捨てます。

使用するデータベースの種類を決定する際に最初に確認することの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をまだいくつか使用しています。

13
Old Pro