2017-01-03 5 views
9

Ich versuche, eine Social-Networking-Android-Anwendung zu entwickeln, die riesige Datenbank von Benutzern enthält. Ich bin sehr neu in der Android App Entwicklung und versuche die Konzepte hinter der App Entwicklung zu verstehen. Ich verwende folgende Technik:Wo werden komplexe Algorithmen ausgeführt? Serverseite oder Clientseite?

1) MYSQL + PHP (RESTful Web Services) 2) Android Studio (Java)

In der Anwendung muss ich für das Ranking Benutzer das Sammeln von Daten von einige komplexe Algorithmen laufen verschiedene Tabellen aus der Datenbank im Cloud-Server.

Meine Frage ist "wo diese Algorithmen laufen?". Sollte ich Code in PHP schreiben, um die Algorithmen serverseitig laufen zu lassen und dann diese Daten an den Client senden (oder) Sollte ich den Code in JAVA (Android Studio) schreiben mit Daten vom Server gesammelt.

Wie wird sich die Leistung meiner App in beiden Fällen unterscheiden?

Bearbeiten: Vielen Dank für Ihre Antworten.

Ich habe eine Idee auf Async Tasks und Multi Threading.

Dieser Zweifel kam zu mir als Ranking ist für alle meine Benutzer üblich, es gibt einen Unterschied. Wenn ich den Rechenalgorithmus auf der Serverseite einstelle, obwohl die Ergebnisse für alle Benutzer gleich sind, muss derselbe Algorithmus mehrmals ausgeführt werden (sagen wir, wenn es 10000 Benutzer gibt, läuft derselbe Algorithmus 10000 mal auf der Serverseite). Aber wenn ich auf die Kundenseite setze, kann ich das vielleicht übertreffen. Aber brauchen Expertenlösung zu diesem Thema.

+3

Da Ihre Algorithmen komplex sind, wäre es besser, auf dem Server zu laufen und nur das Ergebnis an den Client weiterzugeben, da es die App reaktionsfähiger macht – Prabu

+0

Hängt von Ihren Ressourcen, Ihrem Budget und Ihrer Monetarisierung ab. Wenn Ihre Kunden zahlen, um diesen Algorithmus zu erledigen, können Sie serverseitige Lösungen bereitstellen, andernfalls müssen Sie auf Ihr mobiles Gerät zurückgreifen. Es hängt auch davon ab, wie schnell es auf dem mobilen Gerät läuft. Dauert es weniger als 100ms, dann sollte es Ihnen egal sein, wenn es etwas ist, auf das der Benutzer explizit warten möchte, kann es sogar bis zu 8-10 Sekunden dauern. – HopefullyHelpful

+1

Wenn Ihr Algorithmus ein Geschäftsgeheimnis ist, das viel Zeit und Geld in Anspruch nimmt, sollte er auch niemals in der App ausgeführt oder gespeichert werden, da er reverse engineered sein kann. – HopefullyHelpful

Antwort

5

Diese Frage etwas meinungs basieren, aber ich denke, ein paar Design-Regeln gibt, die Sie als Richtlinien verwenden können:

  • Wenn eine Berechnung viele Daten benötigt, tun es auf die Daten so nah wie möglich. Dies ist oft in der Datenbank selbst. Das Übertragen großer Datenmengen ist ressourcenintensiv und keine gute Idee über eine langsame Verbindung (z. B. zwischen dem Server und dem Client).
  • Wenn die Berechnung mit privaten Daten umgehen muss, werden auch die Grenzen festgelegt, wie weit die Daten für Berechnungszwecke zurückgelegt werden können. Das Nicht-Anzeigen der Daten im Client ist kein Schutz privater Daten!
  • Wenn eine Berechnung ist ressourcenintensiv kann zwischengespeichert werden, ist für viele Benutzer gültig, und vielleicht sogar im Voraus berechenbar, tun Sie es auf dem Server und das Ergebnis zwischenspeichern.
  • Wenn die Berechnung wenig Daten erfordert, aber rechenintensiv ist, sollten Sie sich fragen, ob der Server gut genug skalieren kann, um alle Clients zu unterstützen, die gleichzeitig Anfragen stellen. Wenn der Client solche Operationen berechnet, kann dies insgesamt zu einer stabileren Leistung führen, trotz der begrenzten Ressourcen des Clients (die heutzutage immer noch ziemlich brauchbar sind!).
+0

@ChaitanyaChikkala Ihre Bearbeitung zeigt an, dass Ihre Berechnung in Punkte 1, 2 und 3 fällt. Berechnen Sie so das Ranking in der Datenbank und cache das Ergebnis. – Lucero

+0

Danke @Lucero, Danke für Ihre Designrichtlinien. Sehr nützlich für mich. –

+0

Außerdem führt die Berechnung auf der Serverseite zu einem lose gekoppelten Client, weshalb Sie sich in Zukunft für eine iOS/Windows-App entscheiden und die Berechnungslogik dort nicht replizieren müssen. – Apollo

2

Führen Sie Algorithmen auf dem Server aus, um die besten Ergebnisse zu erzielen. Andernfalls wird die Leistung Ihrer Anwendung beeinträchtigt.

Während lange Berechnungen auf Anwendung ausgeführt werden, wird die Anwendung eingefroren und schließlich abgestürzt.

+2

Haben Sie schon einmal von Async-Aufgaben gehört? –

+0

er ist neu bei Android .. Ich glaube nicht, dass er sogar Multi Threading dachte .. oder Async-Berechnungen verwenden. –

+2

@juergend Obwohl AsyncTask Ihnen eine Möglichkeit bietet, Dinge im Hintergrund (nicht im Hauptthread) auszuführen, sollten Android-Anwendungen keine komplexen Algorithmen mit Datenverlusten ausführen. Vergiss nicht, dass die Ressourcen auf der mobilen Seite wirklich begrenzt sind! –

4

Es wird immer empfohlen, Algorithmen auf der Serverseite auszuführen, da Ihre Geschäftslogik in die clientseitige Anwendung eine Bedrohung für die Sicherheit der Anwendung erzeugt. Auf der anderen Seite verringert es die Leistung der Anwendung aufgrund lang andauernder Aufgabe, nicht akzeptabel für eine gute Benutzererfahrung und wenn Sie später für mehrere Plattform erstellen, z. B. Web, iOS usw. Sie müssen die gleiche Logik wieder schreiben Totally Verschwendung richtig? Setzen Sie die Algorithmen auf Serverseite und rufen Sie Rest-APIs auf.

+0

Danke für Ihre Antwort. Ich habe die Frage bearbeitet. Bitte lesen und beraten. –

0

Für Ihre Situation, führen Sie es auf der Serverseite, dann müssen Sie nicht alle das Datum zu Ihrem Client, aber mit dem Beispiel-Ergebnis. Dies reduziert nicht nur die Bandbreite und erhöht auch das Benutzergefühl. Führen Sie es auf der Server-Seite auf dem Hintergrund aus, damit die Anfrage in sehr kurzer Zeit beantwortet werden kann. Aktualisieren Sie den Clientstatus nach Abschluss der Verarbeitung. Sie verwenden auch die Warteschlange, um die berechneten Aufgaben zu speichern, führen Sie die Berechnung jedes Mal durch.

+0

@ChaitanyaChikkala obwohl es 1000 Mal ist, aber nicht zur gleichen Zeit.Wenn es zu viele gibt, um gleichzeitig zu berechnen, dann in eine Warteschlange zu legen, berechnen Sie jedes Mal zum Beispiel 5. –

+0

Danke für Ihre Beratung @ Kris-Dloune –

3

Es hängt wirklich davon ab, was Sie unter Complex verstehen.

Wenn Komplex bedeutet viel Mathematik und Berechnungen usw. auf nicht viele Daten.

Ich könnte dies auf dem Client tun. Die Verlagerung von rechenintensiven Prozessen auf Ihre Kunden kann Ihre allgemeine Reaktionsfähigkeit erheblich verbessern. Sie nutzen Ihre Kunden effektiv als eine Rechenmaschine und das kann oft eine gute Sache sein.

Wenn Komplex bedeutet viele Daten analysiert mit wenig tatsächlichen Mathematik beteiligt.

Sie sollten die Entfernung von großen Datenmengen auf ein Minimum beschränken. Behandeln Sie es so nah wie möglich an Ihrem DB-Server. Wenn Sie können, legen Sie einen Teil davon in die Datenbank selbst.

+0

Danke für Ihre Antwort. Complex bedeutet eine Menge Daten mit 2-3 Sortieralgorithmen und erfordert nicht viel Mathematik, aber so viele Schleifen. Jedenfalls habe ich die Frage bearbeitet. Bitte lesen und beraten. –

1

Wir entwickeln auch ähnliche Art von Web-App mit Java Springs. Um das Ranking der Benutzer basierend auf den Leistungsmesswerten durchzuführen, haben Sie es auf Back-End (PHP) ausgeführt, da es die Leistung Ihrer Anwendung beeinflusst. Das heißt, es ist ratsam, wenn Sie wissen, dass Sie diese Algorithmen regelmäßig (sagen monatlich/wöchentlich/täglich) ausgeführt haben, dann ist es besser, einen Cron-Job zuzuordnen, der die Operationen durchführt und die Ergebnisse speichert, ohne Ihre Anwendung zu stören.

+0

Danke für deine Antwort @ barak_332 –

Verwandte Themen