3

次のようなソーシャル アプリでユーザーの関係を追跡する必要があります。

UserA follow UserC, UserD, and UserE
UserZ follow UserC, UserD, and UserE
UserC follow UserA, UserD, and UserE

等々。

まず、MySQL とその兄弟がゲームに参加できないように、パーティション トレラント データベースが必要です。

私はcouchdbを見ましたが、変更ごとにリビジョンが作成されるため、ドキュメントが次のような場合:

{
  uuid: uuid
  name: name,
  lastName: lastName
  follows: [ uuid1, uuid2, uuid3 ]
}

データベースにこの他のリビジョンがあります

(rev 1)
{
  uuid: uuid
  name: name,
  lastName: lastName
  follows: [ uuid1, uuid2 ]
}
(rev 2)
{
  uuid: uuid
  name: name,
  lastName: lastName
  follows: [ uuid1 ]
}

これは多くのスペースです。手作業でこれを解放できることはわかっていますが、問題は解決しません。

私は Cassandra を調べましたが、これは良い解決策のように思えます。couchdb のような余分なスペースの問題なしに挿入できます。次のように、キー スペース、列、ストア リレーションを作成できます。

keyspace:{
  column:{
    ...
    uuidT:{ uuidA: timestamp, uuidB: timestamp, uuidZ }
    uuidF:{ uuidA: timestamp, uuidB: timestamp, uuidZ }
    uuidH:{ uuidA: timestamp, uuidB: timestamp, uuidZ }
    ...
  }
}

しかし、これにはグラフィカルデータベースが最適かどうか疑問に思っています。

編集:

答えを探した後、DBの選択に役立つこのページを見つけました。http://nosql.findthebest.com/

4

2 に答える 2

2

CouchDB はオフライン DB として意図されています。

グラフDBを調べることをお勧めします.neo4jが思い浮かびます。私は数週間前にトロントの Mozilla ラボを介して紹介されました。そこの人々は、実行するのに最も苦労しないグラフDBであると言いました (apt-get/brew できます)。任意の関係を作成できますが、分割はしません。信頼できる DB が必要で、任意の関係を作成したい場合は、Titanを検討する価値があるかもしれません。

于 2012-07-21T18:33:39.817 に答える
1

FWIW、CouchDB では、ID の配列だけでなく、常にオブジェクトの配列を使用します。例えば。

{
  uuid: uuid
  name: name,
  lastName: lastName
  follows: [ { _id: uuid1 }, { _id: uuid2 }, { _id: uuid3 } ]
}

これには 2 つの理由があります。

  1. 必要に応じて、そのオブジェクトに他の結合データを簡単に追加できます。例えば。{ _id: uuid1, followed_on: "2011-10-22" }
  2. include_docs=trueこれは、ビュー クエリで関連するドキュメントを取得するためのオプションにうまく適合します。

アップデート

ねえ、チェックしてみてください。DB に保持されるリビジョンの数を制限できます

于 2012-07-20T23:51:33.023 に答える