Website-Ausweissystem [geschlossen]

8

Ich arbeite gerade an einer Widget-basierten Website, die vollständig auf der Sozialisation der Nutzer basiert. Da sich ein Reputationssystem auszahlt, um Nutzer anzulocken, habe ich beschlossen, eines davon zu implementieren.

Nun möchte ich einige Lösungen dazu hören, wie dies richtig umgesetzt werden soll (z. B. das Badgesystem von Foursquare).

Grundsätzlich muss ich Folgendes tun können:

  • habe eine Badges-Tabelle, wo ich Badges hinzufügen, bearbeiten und löschen kann;
  • kann ein Badge aktivieren und deaktivieren;
  • in der Lage sein, ein neues Abzeichen einzuführen, aber ohne neuen Code zu schreiben - geben Sie einfach dem Formular zum Hinzufügen von Abzeichen einige Parameter in Bezug darauf, was zu befolgen ist, damit ein Benutzer ein Abzeichen erhält;
  • in der Lage sein, Badges in Echtzeit zu geben - das bedeutet, dass, wann immer ein Benutzer alles leistet, was er braucht, um ein Badge zu erhalten, das System sofort wissen sollte, um ihm das Badge zu geben;
  • Außerdem sollte das System nicht mit "Badge-Listenern" überlastet werden - ich glaube, dass das Abfragen jeder Benutzeranfrage mit allen Ausweisanforderungen zeitaufwendig ist;

Wenn ich das sage, würde ich gerne Ihre Meinung darüber hören, wie man ein Badge-System (Logik, Datenbankschema, Methoden usw.) richtig umsetzen kann.

    
linkyndy 27.12.2010, 22:50
quelle

4 Antworten

2
___ answer4700748 ___

Datenbank & amp; Live-Aktualisierung:
Erstellen Sie eine Tabelle mit Spalten als Bedingungen
Ex: Antworten - Stimmen - featured answer usw.

Jedes Mal, wenn ein Benutzer eine Eingabe vornimmt oder wenn Benutzer abstimmen (clientseitige Skripte für Senden), erhalten sie einen Punkt / Punkte (numerische Inkremente in Tabellenspalten).


bei Rückgabewert (clientseitige Skripterstellung für Abruf), basierend auf bedingten Anweisungen, die den Tabellenspalten zugeordnet sind, wird ein Badge verdient.
zB:
wenn votes = 50, erreiche heplful badge
Wenn featured = 10, erreiche bester Beitragender -Button


Bei clientseitigem Scripting meine ich Ajax oder JSON. Ich bin mir nicht sicher, wie Sie eine Live-Feed-Anwendung scripten würden

    
___ qstntxt ___

Ich arbeite gerade an einer Widget-basierten Website, die vollständig auf der Sozialisation der Nutzer basiert. Da sich ein Reputationssystem auszahlt, um Nutzer anzulocken, habe ich beschlossen, eines davon zu implementieren.

Nun möchte ich einige Lösungen dazu hören, wie dies richtig umgesetzt werden soll (z. B. das Badgesystem von Foursquare).

Grundsätzlich muss ich Folgendes tun können:

  • habe eine Badges-Tabelle, wo ich Badges hinzufügen, bearbeiten und löschen kann;
  • kann ein Badge aktivieren und deaktivieren;
  • in der Lage sein, ein neues Abzeichen einzuführen, aber ohne neuen Code zu schreiben - geben Sie einfach dem Formular zum Hinzufügen von Abzeichen einige Parameter in Bezug darauf, was zu befolgen ist, damit ein Benutzer ein Abzeichen erhält;
  • in der Lage sein, Badges in Echtzeit zu geben - das bedeutet, dass, wann immer ein Benutzer alles leistet, was er braucht, um ein Badge zu erhalten, das System sofort wissen sollte, um ihm das Badge zu geben;
  • Außerdem sollte das System nicht mit "Badge-Listenern" überlastet werden - ich glaube, dass das Abfragen jeder Benutzeranfrage mit allen Ausweisanforderungen zeitaufwendig ist;

Wenn ich das sage, würde ich gerne Ihre Meinung darüber hören, wie man ein Badge-System (Logik, Datenbankschema, Methoden usw.) richtig umsetzen kann.

    
___ antwort22887590 ___

Das klingt nach einem massiven Projekt. Die Komplexität wird ziemlich schnell steigen, egal ob du es willst oder nicht.

Als Erstes würde ich mit der Erstellung der Dokumentation für die API beginnen.

Wenn Sie Dokumentation haben, können Sie die Anforderungen für Ihr Projekt grafisch darstellen. Die Dinge, die du in Frage stellst, sind eine Art von Anforderungen, aber zu abstrakt, zu groß wie Bilder.

Wenn Sie Anforderungen haben, denken Sie über Softwareentwicklung und -struktur nach.

In diesem Schritt ist es meiner Meinung nach die Trennung der Dinge der Weg zu gehen. Dies erleichtert die Verwaltung. Engpässe finden und so weiter.

Ich weiß nicht, was der Auslöser in Ihrem System sein wird, wenn der Benutzer ein Abzeichen erhalten soll. Also nehme ich eine viereckige Analogie.

Um fair zu sein, die Jungs machen erstaunliche Arbeit, um all diese Anfragen in Echtzeit zu bearbeiten. Ich meine, es sieht so aus, als würden sie prüfen, ob ich bei jeder Anfrage ein Abzeichen bekommen soll. Also löst mein Check-In einen Algorithmus auf der Serverseite aus, um meine Checkin- und Badges-Geschichte, Badge-Regeln zu überprüfen, sie zusammenzumachen, mein verdientes Badge zu erstellen und mein neues Badge als Antwort zu zeigen. Klingt viel richtig? Nun, ist es!

Ich glaube nicht, dass sie all diese Arbeit parallel machen. Dies wäre zu viel Arbeit für einen Server. Obwohl mein Vier-Quadrate-Abzeichen mit keinem anderen Benutzer interagiert (viel einfacher), ist eine parallele Verarbeitung nicht ausgeschlossen.

Also erste Idee, wie foursquare funktionieren könnte. Load Balancer leitet meine Anfrage an einen nicht schwer beladenen Server weiter. Und dort wird alles parallel erledigt. Je mehr die Last, desto mehr sind die Server in Betrieb. Führen Sie alle Berechnungen für Badges im laufenden Betrieb mit nur der Slave-Datenbank durch. Präsentieren, um sein Badge zu verwenden und diese Daten an Master-DB zu senden. Dies ist möglich, da Badges nicht zwischen verschiedenen Benutzern interagieren. Ein Badge - eine Benutzerhistorie wird benötigt.

Eine andere Lösung wäre die Verwendung von map - reduce. Verwenden Sie Message Broker, um Plakettenrezensionen parallel zu verarbeiten. Sie erhalten eine Anfrage. Nachricht an Nachrichtenbroker senden. Die Nachricht landet auf mehreren Arbeitern , in denen ein Worker nur eine bestimmte Badge-Regeln für den Benutzer überprüft Geschichte. Am Ende wäre die Berechnung viel schneller.

Über db-Struktur. Ich denke, es gibt keinen Weg durch alle db zu gehen, um herauszufinden, ob der Benutzer ein Abzeichen erhalten sollte oder nicht. Ich würde mit einer einfachen, direkten Art und Weise gehen, dies zu handhaben. Erstellen Sie einfach eine gut strukturierte db mit Fremdschlüsseln, richtigen Spaltentypen, Indizes an den richtigen Stellen und Sie werden es schaffen. Baue stabilen Boden und optimiere nur, wenn es benötigt wird.

Wenn Sie wirklich zu Beginn des Projekts Optimierungen vornehmen wollen (was ich für eine schlechte Idee halte), würde ich alle badgebezogenen Daten in getrennten Tabellen aufbewahren. Eine Tabelle für ein Abzeichen mit allen spezifischen Spalten für dieses Abzeichen.

Beispiel wäre: badge_restaurants (user_id, badge_id, current_level, checkin_count). Um ein neues Restaurant-Badge zu erhalten, müssen Sie nur überprüfen, ob der Benutzer checkin_count + 1 & gt; = needly quity hat und Sie können nicht weiter suchen.

Natürlich ist das keine perfekte Lösung. Es kann mehr Abstraktion hinzugefügt werden, um es auf anspruchsvollere Weise zu erledigen (nicht Hunderte von Tabellen erstellen). Noch komplexere Abzeichen werden Sie dazu bringen, komplexere Lösungen zu erstellen.

    
___ qstnhdr ___ Website-Ausweissystem [geschlossen] ___ tag123php ___ PHP ist eine weit verbreitete, dynamische, objektorientierte und interpretierte Skriptsprache, die primär für die serverseitige Webentwicklung entwickelt wurde. ___ answer4687484 ___

Sie könnten das Drupal-Modul User Badges verwenden oder sogar prüfen, wie es sein Schema einrichtet .

    
___ answer22864897 ___

das erste, was Sie tun sollten, um die richtige Struktur für Ihr Projekt zu haben, dann beginnen Sie es zu entwickeln ... Sie werden sicher viele Fragen haben, aber Sie können jederzeit fragen, weil Ihr Beitrag hier nur allgemein ist und jede Antwort gewonnen hat ' t helfen in Ihrem Fall.

aber deine Idee ist großartig:)

    
___
wormhit 05.04.2014 22:19
quelle
0

Datenbank & amp; Live-Aktualisierung:
Erstellen Sie eine Tabelle mit Spalten als Bedingungen
Ex: Antworten - Stimmen - featured answer usw.

Jedes Mal, wenn ein Benutzer eine Eingabe vornimmt oder wenn Benutzer abstimmen (clientseitige Skripte für Senden), erhalten sie einen Punkt / Punkte (numerische Inkremente in Tabellenspalten).


bei Rückgabewert (clientseitige Skripterstellung für Abruf), basierend auf bedingten Anweisungen, die den Tabellenspalten zugeordnet sind, wird ein Badge verdient.
zB:
wenn votes = 50, erreiche heplful badge
Wenn featured = 10, erreiche bester Beitragender -Button


Bei clientseitigem Scripting meine ich Ajax oder JSON. Ich bin mir nicht sicher, wie Sie eine Live-Feed-Anwendung scripten würden

    
Zebra 15.01.2011 16:39
quelle
0

Sie könnten das Drupal-Modul User Badges verwenden oder sogar prüfen, wie es sein Schema einrichtet .

    
josefnpat 14.01.2011 02:38
quelle
0

das erste, was Sie tun sollten, um die richtige Struktur für Ihr Projekt zu haben, dann beginnen Sie es zu entwickeln ... Sie werden sicher viele Fragen haben, aber Sie können jederzeit fragen, weil Ihr Beitrag hier nur allgemein ist und jede Antwort gewonnen hat ' t helfen in Ihrem Fall.

aber deine Idee ist großartig:)

    
Jassim Rahma 04.04.2014 13:58
quelle

Tags und Links