¿Dónde ejecutar algoritmos complejos? Lado del servidor o lado del cliente?

Estoy tratando de desarrollar una aplicación de redes sociales android que contiene gran base de datos de usuarios. Soy muy nuevo en el desarrollo de aplicaciones para Android y estoy tratando de entender los conceptos detrás del desarrollo de la aplicación. Estoy usando la siguiente tecnología:

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

En la aplicación, tengo que ejecutar algunos algoritmos complejos para los usuarios de clasificación recopilación de datos de diferentes tablas de la base de datos almacenada en el servidor de nube.

Mi pregunta es "¿dónde ejecutar este algoritmos?". ¿Debo escribir código en PHP para hacer que los algoritmos se ejecuten en el lado del servidor y luego enviar estos datos al cliente (o) ¿Debo escribir el código en JAVA (Android Studio) utilizando los datos recogidos del servidor.

¿En qué se diferenciará el rendimiento de mi aplicación en ambos casos?

Edit: Gracias por todas sus respuestas.

Tengo idea en Async Tasks y Multi Threading.

Esta duda vino a mí como el ranking es común para todos mis usuarios, hay una diferencia. Si pongo el algoritmo raking en el lado del servidor, aunque los resultados son los mismos para todos los usuarios, el mismo algoritmo tiene que ejecutarse varias veces (digamos si hay 10000 usuarios, el mismo algoritmo se ejecuta por 10000 veces en el lado del servidor). Pero si lo hago en el lado del cliente, puedo más de venir esto. Pero necesita una solución experta en esto.

Esta pregunta puede ser un poco basada en la opinión, pero creo que hay algunas reglas de diseño que puede utilizar como directrices:

  • Cuando un cálculo necesita muchos datos, hágalo lo más cerca posible de los datos. Esto suele estar en la propia base de datos. La transferencia de grandes cantidades de datos requiere mucho de recursos y no es una buena idea sobre un vínculo lento (por ejemplo, entre el servidor y el cliente).
  • Si el cálculo necesita tratar con datos privados, también se establece el límite de cuánto pueden viajar los datos para fines de cálculo. No mostrar los datos en el cliente no es la protección de los datos privados!
  • Cuando un cálculo es de uso intensivo de recursos se puede almacenar en caché, es válido para muchos usuarios, y tal vez incluso computable de antemano, hacerlo en el servidor y almacenar en caché el resultado.
  • Si el cálculo necesita pocos datos pero es muy intensivo en computación, pregúntese si el servidor puede escalar lo suficiente como para mantener a todos los clientes haciendo solicitudes concurrentes. Tener el cliente de calcular estas operaciones puede conducir a un rendimiento mucho más estable en general, a pesar de los recursos limitados del cliente (que hoy en día sigue siendo bastante útil!).

Siempre se recomienda ejecutar algoritmos en el lado del servidor como poner su lógica de negocio en la aplicación del lado del cliente crear amenaza para la seguridad de la aplicación. Por otro lado, disminuir el rendimiento de la aplicación debido a la tarea de largo plazo, no es aceptable para la experiencia del usuario bueno y si más adelante crear para plataforma múltiple, por ejemplo, web, iOS, etc tiene que escribir la misma lógica de nuevo totalmente desperdicio derecho? Poner a los algoritmos en el lado del servidor y el uso de llamadas Rest APIs.

Realmente depende de lo que quiere decir complejo .

Si Complejo significa un montón de matemáticas y cálculos, etc en no una gran cantidad de datos.

Podría hacer esto en el cliente. Trasladar los procesos de procesamiento de datos a sus clientes podría mejorar en gran medida su capacidad de respuesta global. Está utilizando efectivamente a sus clientes como un motor de cálculo y que a menudo puede ser una buena cosa.

Si Complejo significa muchos datos que se analizan con poco matemáticas reales involucradas.

Usted debe mantener la distancia grandes cantidades de datos se mueve a un mínimo. Manipularlo lo más cerca posible de su servidor DB. Si puede, coloque parte de ella en la propia base de datos.

Ejecute algoritmos en el servidor para obtener los mejores resultados de lo contrario se degradará el rendimiento de su aplicación.

Mientras ejecuta cálculos largos en la aplicación, la aplicación se congela y, en última instancia, se estrelló.

También estamos desarrollando un tipo similar de aplicación web utilizando Java Springs. Para realizar una clasificación de usuarios basada en las métricas de rendimiento, se ha ejecutado en back-end (php), ya que afecta el rendimiento de la aplicación. Dicho esto, es aconsejable si sabe que ha ejecutado estos algoritmos periódicamente (por ejemplo, mensual / semanal / diario), entonces es mejor asignar un trabajo cron que realiza las operaciones y almacena los resultados sin tener que interferir con su aplicación.

Para su situación, ejecútelo en el lado del servidor, entonces usted neednot para transear toda la fecha a usted cliente pero con el resultado de la muestra. Esto no sólo reduce el ancho de banda y también aumenta la sensación del usuario. En el lado del servidor, ejecútelo en el bachground para hacer la respuesta de la solicitud puede en muy poco tiempo. Cuando finalice el cálculo, actualice el estado del cliente. También se utiliza cola para almacenar las tareas de cálculo, hacer el cálculo cada vez unos pocos.

  • Mi aplicación cordova webview es realmente más lento que en el navegador android en el mismo teléfono
  • Android: RunOnUiThread vs AsyncTask
  • Problema de velocidad de Android con la deserialización mediante SimpleXML
  • Android Remote methods (AIDL) vs Intents - rendimiento y uso de la batería
  • Sqlite3 tabla con límite máximo de líneas (por elección) eficiencia
  • Desempeño de Android: "Evita los internos y los setters"
  • ¿Por qué el desarrollo de android con varios proyectos es lento en mi configuración?
  • ¿Cómo aumentar la velocidad del emulador?
  • Reaccionar transiciones androides nativas son muy lentas
  • Cómo capturar clave de retroceso clave en el navegador Android - javascript?
  • Las imágenes de gridview de Android en caché, en las imágenes de desplazamiento se repiten antes de ser reemplazadas
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.