Meteor - Veröffentlichen Sie eine Sammlung, die nach der persönlichen Bewertung sortiert ist

9

Ich möchte eine Sammlung veröffentlichen, in der Dokumente nach einer Kombination ihrer Felder und des vom Benutzer bestimmten Kontextes bewertet werden; und das zurückgegebene Ergebnis wird basierend auf diesem Ergebnis sortiert und wahrscheinlich auf die besten Ergebnisse beschränkt.

Dies zeigt, wie Sie zum Zeitpunkt der Veröffentlichung einen transform Filter zu einer Sammlung hinzufügen können. Ich bin mir jedoch nicht sicher, dass transform ein effizienter Ansatz zur Berechnung eines Feldes ist, das ich in der Sortierung verwenden möchte.

Schließlich wäre es großartig, Mongo map reduce zu verwenden, um empfohlene Elemente basierend auf der berechneten Punktzahl, die parallel durchgeführt werden kann, schnell zurückzugeben.

@ brett-mclain wies darauf hin , wie manche Karten die Sortierung reduzieren können in reinem Mongo gemacht. Es gibt ein paar Meteor Pakete da draußen um Meteor-Sammlungen zu erweitern, aber ich konnte nicht finden, wie man sie in der Meteor-Veröffentlichung verwendet (vs in einer Methode) Außerdem hier wird die Map-Reduce-Ausgabe an eine andere Sammlung gesendet, die bei jedem Aufruf der Methode überschrieben wird.

Hier ist ungefähr die Logik, die ich erreichen möchte:

%Vor%

wo ich score im Client zugänglich sein soll, ohne dort irgendwelche Berechnungen durchzuführen.

Es scheint einfacher zu sein, benutzerdefinierte Dinge in Meteor.methods zu tun, aber Meteor.publish fühlt sich als der natürliche Ort an, um dies zu tun; weil dort die magische Reaktivität von Meteor stattfindet.

    
Guig 27.01.2016, 19:40
quelle

1 Antwort

0
%Vor%

Dies führt zu einem vollständigen Datenbank-Scan.

Time-Decay-Lösungen, die eigentlich gängige Programmier-Testfragen sind, sind für Ihren Anwendungsfall nicht wirklich geeignet.

Wenn Ihre Skalierung klein ist, berechnen Sie einfach einen vollständigen Satz von

%Vor%

Dokumente in einer separaten Sammlung. Die Indizes für eine Milliarde kleiner Dokumente wie diese passen vollständig in den Arbeitsspeicher eines einzelnen Datenbankservers. dies wird für höchstens z.B. 30.000 Artikel und 30.000 Benutzer.

Wenn Ihre Anforderungen dies überschreiten, müssen Sie darüber nachdenken, welcher Teil der Score-Berechnung zwischen Benutzern geteilt werden kann. Wenn kein Teil der Berechnung freigegeben werden kann, sollten Sie lesen, wie Facebook soziale Grafiken in herkömmlichen Datenbanken implementiert.

    
DoctorPangloss 08.09.2017 03:13
quelle