この質問はNoSQLと特にmongoDB専門家のためのものです。私はプロジェクトのリレーショナルDBを設計することから始めましたが、クライアントは簡単に拡張できるDBを使用したいと考えています。これを達成するために、mongoDBを使用することに決めました。最近、NoSQLのリレーショナルモデルのマッピングに問題があります。私は、次に示すように、他のテーブルの多くの多対多の関係を持っているユーザーテーブルを持っている:NoSQLデータベースとの関係
MongoDBのためにそれを変換するとき、私はいくつかのオプションがあります:
オプション1(ユーザーが完全な行を持つ):(ユーザーが唯一の外部キーを持つ)
users:{
_id:<user_id>,
battles:{[battle1, battle2, ...]},
items:{[item1, item2, ...]},
locations:{[location1, location2, ...]},
units:{[unit1, unit2, ...]},
}
battles:{
<battle_info>
}
locations:{
<location_info>
}
units:{
<units_info>
}
items:{
<items_info>
}
オプション2:
users:{
_id:<user_id>,
battles:{[battle1_id, battle2_id, ...]},
items:{[item1_id, item2_id, ...]},
locations:{[location1_id, location2_id, ...]},
units:{[unit1_id, unit2_id, ...]},
}
battles:{
<battle_info>
}
locations:{
<location_info>
}
units:{
<units_info>
}
items:{
<items_info>
}
オプション3(他のテーブル内のユーザID):私たちは他のテーブルの完全な行を追加しているよう
users:{
_id:<user_id>,
}
battles:{
<battle_info>,
user:{[user1_id, user2_id, ...]}
}
locations:{
<location_info>,
user:{[user1_id, user2_id, ...]}
}
units:{
<units_info>,
user:{[user1_id, user2_id, ...]}
}
items:{
<items_info>,
user:{[user1_id, user2_id, ...]}
}
オプション1は、重複をたくさん持っています。私が見ている問題の1つは、特定のアイテムやバトルが更新された場合、それをユーザーのテーブルですべて見つけて更新する必要があるということです。しかし、これは、ログイン時にクライアントアプリケーションに渡すことができる完全なユーザーオブジェクトを常に持つという利点をもたらします。
オプション2は、ユーザーテーブル内に他のテーブルのmongoIdsしか持たない場合、よりリレーショナルです。このオプションの利点は、バトルやアイテムの更新には、行がコピーされずに参照されるため、コストがかからないことです。一方、ユーザーがログインすると、完全なユーザーオブジェクトで応答するすべての参照単位、戦闘、アイテム、および場所を見つける必要があります。
オプション3は、ユーザーテーブルのmongoIdsが他のテーブルに保持されているオプション2とは反対です。このオプションは私にはあまり魅力がありません。
私は本当にありがとうと思います。
編集:
基本的にこれは、複数のクライアントアプリケーションがWebサービスを介してサーバーに接続するMMORPGゲームです。私たちはクライアントにデータを保存するためのローカルデータベースを持っています。サーバーが完全なユーザーオブジェクトで応答し、クライアントアプリケーションで変更されたデータを更新または挿入できるモデルが必要です。
"better"は目的の問題です。このデータへのあなたのアクセスパターンは何ですか? –
基本的にこれはmmorpgゲームで、複数のクライアントアプリがwebservicesを介してサーバーに接続します。私たちはクライアントにデータを保存するためのローカルデータベースを持っています。サーバーが完全なユーザーオブジェクトで応答し、クライアントアプリケーション上で変更されたデータを更新または挿入するためのモデルが必要です – umair
リレーショナルデータベースではスケーリングが可能です...違いは、保持することが予想されるデータの種類、 RDBが小規模なデータのためだけであるという誤った先入観ではなく、大きいためのmongodb –