これはstackoverflowに関する私の最初の質問なので、正しいプロトコルに従っていることを願っています。
CouchDBとNodeJSをベースにした基本的なブラウザゲームを作成しています。私のゲームでは、ユーザーは複数のキャラクターを持つことができます。ユーザーアカウントデータ(メール、本名など)をキャラクターデータに関連付ける必要はほとんどないため、データベース内のキャラクターからプレーヤーを分離することにしました。とにかく、ここに私の問題があります:
プレイヤーが操作するすべてのキャラクターを返すビューを作成できるようにしたいと思います。このドキュメントには「所有者」と呼ばれるプロパティがあります。これを行う最も簡単な方法は、所有者によって分類されたすべての文字のリストを返すビューを作成することだと思います。
これまでの私のコードは次のとおりです。
function(doc){emit(doc.owner、doc); }
私はこのような結果を得ようとしています(これは単純化されています。CouchDBが出力に他のデータを含むことを知っています):
{
"player1":{
"character1":{
"data":{}
},
"character2":{
"data":{}
}
},
"player2":{
"character1":{
"data":{}
},
"character2":{
"data":{}
}
}
}
キーは一意である必要がありますか?私のコードは私に望ましい結果を与えますか?
私はデータを分離するという考えとは結婚していません。代わりに、ユーザードキュメントの下に文字を配置して、2つのビューを作成することもできます。1つはユーザーアカウントデータのみを出力し、もう1つは文字データのみを出力します。文字データとユーザーデータを省略しますが、それは私には少し厄介なようです。キャラクターデータに固有の他のビューを作成する必要があるかもしれないので、データを分離したいのですが、データベース内のプレーヤーからキャラクターを分離した方が整理されているようです。
関連するメモで、2番目のパラメーターを渡すことによって応答をフィルター処理する方法はありますか?これはビューの効率を損なうものであり、この場合はおそらく一時的なビューを使用する必要があると思います。これに関する私の問題は、このビュー(実際にはデータベース全体)によって大量のデータが返される可能性があることです。これは、特にほとんどのデータを必要としないため、HTTP経由で転送すると非常に遅くなる可能性があります。
別の可能な解決策は、ユーザーが制御する各文字の_idをプロパティとしてユーザーアカウントデータベースに保存することです。これは私には十分に理にかなっているように思えますが、別のオプションがある場合、またはあえて「より良い」オプションが利用可能である場合は、それを聞いてみたいと思います。
この問題の最善の解決策は何でしょうか?
よろしくお願いします。