Einer meiner Mitspieler und ich hatte ein Gespräch über Ansichten in Couchbase zu schaffen für das Abrufen von Daten.Erstellen bestimmte Ansicht für bestimmte Abrufen von Daten in chouchbase
So war mein Vorschlag Ansicht für bestimmten Abruf von Daten zu schaffen, so es viel schneller sein würde und geradlinig. Zum Beispiel haben wir zwei verschiedene Leiter:
- Admin für spezifische Gruppe
- Super-Administrator
Admin Abrufen von Daten aus ihrer spezifischen Gruppe und Super-Administrator erhält Daten von allen der Gruppen.
Es wäre sinnvoll, admin nur für die Gruppe zu beschränken, um die Daten zu erhalten, die ihnen gehören, anstatt alle Daten zu erhalten, sie dann im Backend zu verarbeiten und zu vergleichen, welche zu einer Gruppe gehören.
Zum Beispiel: Couchbase Ansicht erstellen, die Gruppen-ID akzeptieren und alle seine Daten
Auf der anderen Seite abfragen, sie nur Ansichten erstellen, wenn es komplizierte Sachen wie Berechnung sind und Ansichten erstellen könnte schwierig sein aufrecht erhalten.
Da zur Zeit nur wir eine Ansicht verwenden, die alle Daten bekommen und sobald wir sie haben wir sie verarbeiten, indem spezifische Daten für die eine bestimmte Gruppe in dem Back-End bekommen LINQ verwenden.
Dokumentstruktur:
{
"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"
}
Get Alle Abfrage:
function (doc, meta) {
if (doc.type == "Foo" && !doc.deleted) {
emit(meta.id, null);
}
}
Dies ist die Beispielabfrage ich vorschlagen möchte: Wenn ich es von groupId erhalten möchten , passiere einfach die groupId in emit
function(doc, meta) {
if (doc.type == "Foo" && !doc.deleted) {
emit(doc.groupId, doc);
}
}
Wenn ich externalId
bekommen muss ich nur noch die die externalId
passieren emit
function(doc, meta) {
if (doc.type == "Foo" && !doc.deleted) {
emit(doc.externalId, doc);
}
}
diese Weise können wir verschiedene Abfragen mit unterschiedlichen Rollen zu bekommen Dokumente haben, und wir haben nicht nur um alle das Dokument von seiner id
und verarbeiten sie im Back-End mit LINQ.
Beispiel in dem Prozess sich im Backend:
Abrufen die groupId:
var foos = _fooRepository.GetAll();
foos = foos.Where(s => s.GroupId == group.Id).ToList();
die externalId Anfahrt:
var foos = _fooRepository.GetAll();
foos = foos.Where(s => s.externalId == foo.externalId).ToList();
Hinweis: Irgendwie Leistung ist etwas wichtig für uns besonders beim Rendern von Seiten, die Daten für die Benutzer abrufen.
Also meine Frage ist, was ist der beste Ansatz für diese Art von Szenario?
Um eine Antwort zu geben, müssen wir die Struktur Ihrer Dokumente und die Fragen, die Sie stellen möchten, kennen. Im Allgemeinen definiert eine Ansicht sowohl einen Index, mit dem bestimmte Dokumente effizient abgerufen werden können, als auch die klassische Datenbankansicht, nämlich eine Auswahl und Projektion von Dokumenten. Wenn sich Ihre Abfragen nur durch die Anfangs- und Endschlüsselwerte unterscheiden (z. B. Mitarbeiter nur einer Gruppe oder Mitarbeiter aller Gruppen), können Sie mit einer Ansicht arbeiten. Wenn die Abfragen strukturell unterschiedlich sind (sagen Mitarbeiter einer Gruppe oder Mitarbeiter nach akademischem Abschluss), benötigen Sie mehr. – TAM
@TAM Ich habe meine Frage aktualisiert. kann nicht viel von der Dokumentstruktur bereitstellen, aber so sieht es aus. – rpmansion