J'essaie de développer une application Android de réseautage social qui contient une énorme base de données d'utilisateurs. Je suis très nouveau au développement d'applications Android et j'essaie de comprendre les concepts derrière le développement de l'application. J'utilise la technologie suivante: p>
1) MySQL + PHP (services Web reposants) 2) Studio Android (Java) P>
Dans l'application, je dois exécuter des algorithmes complexes pour le classement des utilisateurs de collecter des données à partir de différentes tables à partir de la base de données stockée sur Cloud Server. P>
Ma question est "Où exécuter ces algorithmes?". Devrais-je écrire du code dans PHP pour que les algorithmes fonctionnent sous le serveur, puis envoyez ces données au client (ou) Devrais-je écrire le code dans Java (Android Studio) à l'aide des données collectées à partir de serveur. P>
Comment la performance de mon application diffère-t-elle dans les deux cas? P>
Edit: Merci pour toutes vos réponses. p>
J'ai une idée sur les tâches asynchronisées et multi-threading. p>
Ce doute est venu à moi alors que le classement est courant pour tous mes utilisateurs, il y a une différence. Si je mettais l'algorithme de ratisser du côté serveur, même si les résultats sont identiques pour tous les utilisateurs, le même algorithme doit fonctionner plusieurs fois (par exemple s'il ya 10000 utilisateurs, le même algorithme fonctionne 10000 fois sur le côté serveur). Mais si je fais du côté du client, je pourrais finir de venir ceci. Mais besoin d'une solution experte à ce sujet. P>
6 Réponses :
Exécuter des algorithmes sur le serveur pour obtenir de meilleurs résultats sinon il dégradera les performances de votre application. p>
Tout en exécutant des calculs longs sur l'application, l'application est gelée et se bloque finalement. p>
Avez-vous déjà entendu parler des tâches asynchronisées?
Il est nouveau à Android .. Je ne pense pas qu'il avait même considéré plusieurs filtres. Ou en utilisant des calculs ASYNC.
@Juergenda Bien que AsyncTask vous fournit un moyen de faire des choses en arrière-plan (pas sur le fil principal), les applications Android ne doivent pas exécuter des algorithmes complexes avec des loooots de données. N'oubliez pas que les ressources du côté mobile sont vraiment limitées!
@Todorkostov: et faire des calculs lourds de milliers d'utilisateurs d'applications sur le serveur n'est pas problématique?
Comme la question - la réponse est basée sur l'opinion. Personnellement, je n'aime pas ces applications qui doivent être en ligne tout le temps sans raison.
Sur le serveur 1. Vous pouvez réduire les ressources à tout moment, 2. Vous gérez 10-15 ou 100 utilisateurs à la fois. Considérant la question .. il est nouveau à Android.
@ Juergend Vous avez raison! Ce n'est pas une tâche facile, à coup sûr! Mais il est préférable d'exécuter cela sur un serveur à la place d'un appareil mobile.
Il est toujours recommandé d'exécuter des algorithmes du côté du serveur, car la logique de votre entreprise dans l'application côté client crée une menace pour la sécurité de l'application. De l'autre, il diminue les performances de la demande en raison de la tâche de course longue, qui n'est pas acceptable pour une bonne expérience utilisateur et, si plus tard, créez-vous pour plusieurs plateformes Web, iOS, etc., vous devez écrire la même logique totalement gaspillée. Mettez aux algorithmes au côté serveur et appelez l'utilisation des API de repos. P>
Merci pour votre réponse. J'ai édité la question. S'il vous plaît lire et conseiller.
Pour votre situation, exécutez-la sur le côté du serveur, alors vous n'en avez pas besoin de la totalité de la date à votre client, mais avec le résultat de l'échantillon. Cela réduisait non seulement la bande passante et non seulement le sentiment d'utilisation. Du côté du serveur, exécutez-le sur le Bachground pour que la demande puisse répondre en une très peu de temps. Lorsque la finition de calcul, rafraîchissez l'état du client. Vous utilisez également la file d'attente pour stocker les tâches de calcul, effectuez le calcul à chaque fois. P>
@Chaïyachikkala bien que ses 1000 fois, mais ce n'est pas en même temps. S'il y en a trop pour calculer en même temps, mettez ensuite dans une file d'attente, calculez-les par exemple à chaque fois.
Merci pour votre avantage @ kris-toit
Cette question peut être un peu d'opinion, mais je pense que quelques règles de conception que vous pouvez utiliser en tant que directives: P>
@Chaïyachikkala Votre édition indique que votre calcul tombe dans les points 1, 2 et 3. Donc, calculez donc le classement sur la base de données et cache le résultat.
Merci @LUCERO, merci pour vos directives de conception. Très utile pour moi.
De plus, le calcul du côté serveur entraînera une clientèle de manière lâche et donc à l'avenir, vous pouvez avoir choisi d'avoir une application iOS / Windows et vous n'avez pas besoin de reproduire la logique de calcul.
Cela dépend vraiment de ce que vous entendez par complexe fort>. p>
Si Je pourrais le faire sur le client. Le déplacement des processus de calcul-affamés sur vos clients pourrait considérablement améliorer votre réactivité globale. Vous utilisez efficacement vos clients en tant que moteur de calcul et qui peut souvent être une bonne chose. P>
Si Vous devez garder la distance de grandes quantités de données se déplace au minimum. Manipulez-le aussi près que possible de votre serveur DB. Si vous le pouvez, mettez-le dans la base de données elle-même. P>
Merci pour votre réponse. Un complexe signifie une manipulation de nombreuses données avec 2-3 algorithmes de tri et ne concernent pas beaucoup de mathématiques, mais implique tant de boucles. De toute façon j'ai édité la question. S'il vous plaît lire et conseiller.
Nous développons également un type d'application Web similaire à l'aide de Java Springs. Pour effectuer le classement des utilisateurs basé sur les métriques de performance, vous l'avez exécuté sur Back-end (PHP), car elle affecte vos performances de l'application. Cela dit, il est conseillé de savoir si vous savez que vous avez exécuté ces algorithmes périodiquement (par exemple mensuellement / hebdomadaire / quotidiennement), il est préférable d'attribuer un travail cron qui exécute les opérations et stocke les résultats sans avoir à interférer avec votre application. p>
Merci pour votre réponse @ barak_332
Étant donné que vos algorithmes sont complexes, il serait préférable d'exécuter sur le serveur et de transmettre simplement le résultat au client car il rendra l'application plus réactive
Dépend de vos ressources, budget et monétisation. Si vos clients paient pour obtenir cet algorithme terminé, vous pouvez fournir des solutions latérales du serveur, sinon vous devrez recourir à votre appareil mobile. Cela dépend également de la rapidité avec laquelle il fonctionnera sur le périphérique mobile? Cela prend-il moins de 100 ms alors vous ne devez pas vous soucier, si c'est une chose que l'utilisateur est explicitement disposé à attendre qu'il puisse même prendre jusqu'à 8-10 secondes.
Si votre algorithme est un secret d'affaires qui a pris beaucoup de temps et d'argent pour développer, il ne doit également jamais être exécuté ni stocké dans l'application, car il peut être inverse ingénieur.