私のチームメイトの1人で、データを取得するためのビューをcouchbaseで作成することについての会話がありました。chouchbaseで特定のデータを取得するための特定のビューを作成する
私の提案は、データの特定の検索のためのビューを作成することでした。これは、これがはるかに高速で簡単な方法です。例えば、我々は二つの異なる管理者を持っている:特定のグループの
- 管理
- スーパー管理
管理者は、特定のグループからデータを取得し、スーパー管理者は、すべてのからデータを取得しますグループ。
グループのすべてのデータを取得してバックエンドで処理し、グループに属するデータを比較するのではなく、グループに属するデータを取得するようにadminを制限することは理にかなっています。例えば
: は複雑な演算のようなものと難しいかもしれない複数のビューを作成するがある場合、彼女は唯一のビューを作成し、グループIDを受け入れ、そのデータ
一方のすべてを照会Couchbaseのビューを作成します。維持する。
現在、すべてのデータを取得するビューを1つしか使用していないので、LINQを使用してバックエンドの特定のグループの特定のデータを取得することによってデータを処理します。
文書構造:私はそれがのgroupIdで取得したい場合 :
function (doc, meta) {
if (doc.type == "Foo" && !doc.deleted) {
emit(meta.id, null);
}
}
これは私が提案したいサンプルクエリです:
{
"fooReference": "",
"groupId": 8,
"fooName": "projectTest",
"externalId": "PR572",
"fooDescription": "OG QGpCst vXAuu",
"property5": {
"property1": "124",
"code": "US",
"value": 267206,
"start": "2014-10-01T00:00:00Z",
"end": "2017-09-30T00:00:00Z"
},
"property6": [
"string1",
"string2",
"string14"
],
"property7": [
],
"property8": [
],
"dateAdded": "2016-02-11T07:22:15.2483042Z",
"ownerId": 72,
"dateUpdated": "2016-02-11T07:22:15.2483042Z",
"property9": [
{
"id": 72,
"type": 0
}
],
"property10": false,
"id": "345",
"deleted": false,
"type": "Foo",
"subtype": "Foo"
}
すべてのクエリを取得します。のグループIDを渡すだけです。emit
externalId
を取得したい場合はfunction(doc, meta) {
if (doc.type == "Foo" && !doc.deleted) {
emit(doc.groupId, doc);
}
}
私はちょうどexternalId
emit
function(doc, meta) {
if (doc.type == "Foo" && !doc.deleted) {
emit(doc.externalId, doc);
}
}
に、我々は文書を得るための異なる役割を持つ別のクエリを持ってこの方法を渡すために持っている、と我々はちょうどを取得する必要はありません文書のすべてをid
で処理し、LINQを使用してバックエンドで処理します。バックエンドでのプロセスそれらを
例:
はgroupIdを取得:
var foos = _fooRepository.GetAll();
foos = foos.Where(s => s.GroupId == group.Id).ToList();
を外部IDの取得:
var foos = _fooRepository.GetAll();
foos = foos.Where(s => s.externalId == foo.externalId).ToList();
注:どういうわけか、パフォーマンスが多少あるが特別に私たちにとって重要なユーザーのデータを取得するページをレンダリングするときに使用します。
私の質問は、この種のシナリオに対する最良のアプローチは何ですか?
回答を得るには、文書の構造と質問したいクエリを知る必要があります。一般に、ビューは、特定のドキュメントを効率的に取り出すためのインデックスと、古典的なデータベースビュー、つまりドキュメントの選択と投影を定義します。クエリが開始値と終了値だけ異なる場合(たとえば、1つのグループのスタッフまたはすべてのグループのスタッフ)、1つのビューで実行できます。クエリが構造的に異なる場合(グループのスタッフや学位でスタッフと言う場合)、より多くのクエリが必要になります。 – TAM
@TAM私の質問が更新されました。ドキュメント構造の多くを提供することはできませんが、そのように見えます。 – rpmansion