Mysql
 sql >> Datenbank >  >> RDS >> Mysql

socket.io-Leistung eine Ausgabe pro Datenbankzeile

Überdenken Sie die Benutzeroberfläche

Zunächst einmal ist ein Benutzeroberflächendesign, das 50-100.000 Zeilen auf einem Client anzeigt, wahrscheinlich überhaupt nicht die beste Benutzeroberfläche. Das ist nicht nur eine große Datenmenge, die an den Client gesendet und vom Client verwaltet werden muss, was auf einigen Mobilgeräten möglicherweise unpraktisch ist, sondern es sind offensichtlich viel mehr Zeilen, als ein einzelner Benutzer bei einer bestimmten Interaktion tatsächlich lesen kann die Seite. Der erste Auftrag könnte also darin bestehen, das Design der Benutzeroberfläche zu überdenken und eine Art bedarfsgesteuertere Oberfläche zu erstellen (seitenweise, virtuelles Scrollen, Tasteneingabe nach Buchstaben usw.). Es gibt viele verschiedene Möglichkeiten für ein anderes (und hoffentlich besseres) Design der Benutzeroberfläche, das die Datenübertragungsmenge verringert. Welches Design am besten wäre, hängt ganz von den Daten und den wahrscheinlichen Nutzungsmodellen des Benutzers ab.

Daten in Blöcken senden

Wenn Sie jedoch so viele Daten an den Client übertragen möchten, möchten Sie sie wahrscheinlich in Blöcken (Gruppen von Zeilen gleichzeitig) senden. Die Idee mit Chunks ist, dass Sie eine verbrauchbare Datenmenge in einem Chunk senden, sodass der Client sie parsen, verarbeiten, die Ergebnisse anzeigen und dann für den nächsten Chunk bereit sein kann. Der Client kann die ganze Zeit aktiv bleiben, da er zwischen den Chunks Zyklen zur Verfügung hat, um andere Benutzerereignisse zu verarbeiten. Das Senden in Blöcken reduziert jedoch den Aufwand für das Senden einer separaten Nachricht für jede einzelne Zeile. Wenn Ihr Server Komprimierung verwendet, bieten Chunks auch eine größere Chance für die Komprimierungseffizienz. Wie groß ein Chunk sein sollte (z. B. wie viele Datenzeilen er enthalten sollte), hängt von einer Reihe von Faktoren ab und wird wahrscheinlich am besten durch Experimentieren mit wahrscheinlichen Clients oder dem Client mit der niedrigsten erwarteten Leistung bestimmt. Beispielsweise möchten Sie vielleicht 100 Zeilen pro Nachricht senden.

Verwenden Sie ein effizientes Übertragungsformat für die Daten

Und wenn Sie socket.io verwenden, um große Datenmengen zu übertragen, sollten Sie sich vielleicht noch einmal ansehen, wie Sie das JSON-Format verwenden. Beispielsweise ist das Senden von 100.000 Objekten, die alle genau dieselben Eigenschaftsnamen wiederholen, nicht sehr effizient. Sie können oft Ihre eigenen Optimierungen erfinden, die vermeiden, Eigenschaftsnamen zu wiederholen, die in jedem Objekt genau gleich sind. Anstatt beispielsweise 100.000 davon zu senden:

 {"firstname": "John", "lastname": "Bundy", "state": "Az", "country": "US"}

Wenn jedes einzelne Objekt genau die gleichen Eigenschaften hat, können Sie entweder die Eigenschaftsnamen in Ihren eigenen Code codieren oder die Eigenschaftsnamen einmal senden und dann einfach eine durch Kommas getrennte Liste von Werten in einem Array senden, das der empfangende Code in ein Objekt einfügen kann mit den entsprechenden Eigenschaftsnamen:

 ["John", "Bundy", "Az", "US"]

Die Datengröße kann manchmal um das 2-3-fache reduziert werden, indem einfach redundante Informationen entfernt werden.