2016-08-21 2 views
1

Ich möchte nur einen Ansatz zum Erstellen einer Datenbank mit Live-Aufzeichnungen, also nicht nur Downvote. Ich erwarte keinen Code.Erstellen einer Live-Datenbank (Ansatz)

Im Moment habe ich eine MySql-Datenbank mit etwa zweitausend Benutzern, sie werden aber mehr. Jeder Spieler/Benutzer hat mehrere Punkte, die durch bestimmte Aktionen zu- oder abnehmen.

Mein Ziel ist es, dass diese Datenbank in jeder Sekunde und den Benutzer mit mehr Punkten nach oben und andere nach unten zu bewegen ... und so weiter

Meine Frage ist, aufgefrischt über bekommt, was ist der beste Ansatz für diese „live Datenbank ", wo Datensätze jede Sekunde aktualisiert werden müssen. In MySql kann ich zeitbasierte Aktionen ausführen, die einen SQL-Befehl ausführen, aber das ist nicht der beste Weg, denke ich. Kann jemand einen guten Weg vorschlagen, damit umzugehen? Z.B. andere Datenbankanbieter wie MongoDB oder irgendetwas anderes?

EDIT

Dies gilt nicht Client-Seite arbeiten, so kann ich es in die databse aufgrund einiger Zeit basierte Ereignisse nicht einfach drücken/schreiben. Zur Erklärung: Ein Benutzer trainiert seinen Charakter in der Anwendung. Dieses Training (um 1 Level zu erreichen) dauert 12 Stunden. Nach Ablauf der Zeit sollte der Datensatz AUTOMATISCH in der Datenbank aktualisiert werden. Auch wenn der Benutzer keine Beitragsanfrage von sich selbst sendet (wenn der Benutzer nicht angemeldet ist), sollten andere Benutzer die aktualisierten Daten in seinem Profil sehen.

+0

Wenn eine Aktion eines Spielers auftritt, speichern Sie sie in Ihrer Tabelle. Um eine Live-Ansicht Ihrer Daten zu erhalten, führen Sie jedes Mal eine spezifische Abfrage durch, wenn Sie Ihre GUI aktualisieren möchten. –

+0

Nein, das ist nicht so einfach, da bestimmte Aufgaben etwa 1 oder mehr Tage benötigen. Ich kann sie nur auf den Server pushen/posten, wenn sich der Benutzer anmeldet und es kann sein, dass ein Ereignis einen Tag dauert, aber er meldet sich nach einer Woche an und in dieser Zeit gibt es keine Aktualisierung des Datensatzes. @juergend – Anokrize

+0

Sie können jquery ajax für diesen Zweck verwenden –

Antwort

1

Sie müssen die Tatsache akzeptieren, dass die Rankings in gewissem Maße abgestanden sind. Ihr Dilemma unterscheidet sich nicht von anderen Gaming-Plattformen (oder SO-Rankings). Geschäftsentscheidungen wurden getroffen und ständig auf das Niveau der Verjährung überprüft. Nehmen wir zum Beispiel die Bestenlisten der Tags. Oder die letzte Änderung, bei der Profilseiten häufiger aktualisiert wurden, als gegen 4 Uhr GMT.

Betrachten Sie die Verwendung von MySQL-Ereignissen. Es ist eine integrierte Funktionalität, die die Notwendigkeit von Cron-Aufgaben ersetzt. Bei Interesse habe ich 3 ereignisbezogene Links von meiner Profilseite. Sie könnten Ränge nach einem Zeitplan berechnen (Ihre Toleranz für Veralterung) und die Anfragen der Benutzer nach ihnen wären schnell (schneller als die unten von Gordon). Auf der anderen Seite sind sie abgestanden.

Berücksichtigen Sie, dass Sie die Ranking-Informationen nicht speichern (schreiben), sondern konzentrieren Sie sich nur auf das Ausfüllen der Slots Ihrer anderen Daten. Und holen Sie sich Ihre Rangliste im Handumdrehen. Als Beispiel, siehe diese Rangliste Antwort here von Gordon. Es ist dynamisch, läuft auf Anfrage mit mindestens in diesem Moment non-staleness und würde keine Ereignisse erfordern.

Wissen, dass nur Sie entscheiden sollten, was für die UX tolerierbar ist.

+0

Danke für die sehr detaillierte Antwort.Also würden Sie mir vorschlagen, Ereignisse in MySQL zu verwenden? Wie berechnet man die Rangliste alle 10 Sekunden oder so? Ist es möglich, damit Tausende von Datensätzen zu berechnen oder ist das sehr langsam? Wenn ja, gibt es eine andere Lösung? – Anokrize

+0

Sehen Sie meine Bearbeitung, wenn ich einige wichtige Fakten verpasst habe. – Anokrize

Verwandte Themen