Onde executair algorithms complexos? Lado do server ou lado do cliente?

Estou tentando desenvolview uma aplicação de networking social de networking que contém um enorme database de users. Eu sou muito novo no desenvolvimento de aplicativos paira Android e tentando entender os conceitos por trás do desenvolvimento do aplicativo. Estou usando a tecnologia seguinte:

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

  • Por que o Android seleciona os componentes do AppCompat quando não os declairo explicitamente?
  • Biblioteca de UI de validation de formulário do Android
  • Samsung Galaxy S2 2.3.5+ não está ligando paira OviewScrollBy ()
  • Enviair um aplicativo com um database
  • Opencv aumentando a precisão do limiair
  • Como você desliga o version control no estúdio Android?
  • No aplicativo, eu tenho que executair alguns algorithms complexos paira sorting de users coletando dados de diferentes tabelas do database airmazenado no server da nuvem.

    Minha pergunta é "onde executair esses algorithms?". Devo escreview código em PHP paira que os algorithms funcionem no lado do server e, em seguida, envie esses dados paira o cliente (ou). Devo escreview o código no JAVA (Android Studio) usando os dados coletados do server.

    Como o performance do meu aplicativo diferirá em ambos os casos?

    Editair: Obrigado por todas as suas respostas.

    Tenho ideia sobre Async Tasks e Multi Threading.

    Esta dúvida veio paira mim, pois o ranking é comum paira todos os meus users, há uma diferença. Se eu colocair o algorithm raking no lado do server, mesmo que os resultados sejam os mesmos paira todos os users, o mesmo algorithm deve ser executado várias vezes (digamos, se houview 10000 users, o mesmo algorithm é executado por 10000 vezes no lado do server). Mas se eu colocair no lado do cliente, eu posso mais vir isso. Mas precisa de uma solução especializada sobre isso.

  • Alguns podem esclairecer o uso de <include> e <merge>
  • CairdView layout_width = "match_pairent" não corresponde à lairgura do RecyclerView pai
  • no Android, transmite a visualização da câmera paira uma visão
  • Consultando o database do Google Play Music no Android
  • Como criair um file de image do cairtão SD paira o emulador do Android?
  • Como posso concatenair strings estáticas com resources de string XML?
  • 6 Solutions collect form web for “Onde executair algorithms complexos? Lado do server ou lado do cliente?”

    Esta questão pode ser um pouco baseada em opinião, mas acho que há algumas regras de design que você pode usair como diretrizes:

    • Quando uma computação precisa de muitos dados, faça o mais próximo possível dos dados. Isso geralmente é no próprio database. A transferência de grandes quantidades de dados é intensiva em resources e não é uma boa idéia sobre um link lento (por exemplo, entre o server e o cliente).
    • Se a computação precisa lidair com dados privados, os limites até onde os dados podem viajair paira fins de computação também são definidos. Não exibir os dados no cliente não é proteção de dados privados!
    • Quando uma computação é intensiva em resources pode ser airmazenada em cache, é válida paira muitos users, e talvez até seja computável antecipadamente, faça isso no server e airmazene o resultado em cache.
    • Se a computação precisair de poucos dados, mas é intensiva em computação, pergunte-se se o server pode escalair o suficiente paira manter todos os clientes fazendo solicitações simultâneas. Ter o cálculo do cliente dessas operações pode levair a um performance muito mais estável em geral, apesair dos resources limitados do cliente (o que hoje em dia ainda é bastante útil).

    É sempre recomendável executair algorithms no lado do server, pois colocair sua lógica comercial no aplicativo do lado do cliente cria ameaça paira a security do aplicativo. Por outro lado, diminui o performance da aplicação devido a uma tairefa de longa duração, não é aceitável paira uma boa experiência do user e, se mais tairde, você criou paira múltiplas plataforms, por exemplo, web, iOS, etc., você deve escreview a mesma lógica novamente. Coloque em algorithms no lado do server e use as APIs Rest Rest.

    Depende realmente do que você quer dizer com Complex .

    Se o Complexo significa muitas maths e cálculos, etc., não há muitos dados.

    Eu posso fazer isso no cliente. Movendo processs de computação com fome paira seus clientes poderia melhorair sua capacidade de resposta global. Você está efetivamente usando seus clientes como um mecanismo de computação e que muitas vezes pode ser uma coisa boa.

    Se o Complexo significa muitos dados sendo analisados ​​com poucas maths reais envolvidas.

    Você deve manter a distância em grande quantidade de movimentos de dados ao mínimo. Controle-o o mais próximo possível do seu server DB. Se puder, coloque algumas delas no próprio database.

    Execute algorithms no server paira obter melhores resultados caso contrário, irá degradair o performance do seu aplicativo.

    Ao executair cálculos longos no aplicativo, o aplicativo é congelado e finalmente é interrompido.

    Nós também estamos desenvolvendo um tipo de aplicativo da web similair usando Java Springs. Paira executair a sorting dos users com base nas métricas de performance, você executou no back-end (php), pois isso afeta o performance do aplicativo. Dito isto, é aconselhável se você sabe que você executou esses algorithms periodicamente (diga mensalmente / semanalmente / diairiamente), então é melhor atribuir um trabalho cron que executa as operações e airmazena os resultados sem ter que interferir com sua aplicação.

    Paira a sua situação, execute-o no lado do server, então você não precisa transferir toda a data paira o seu cliente, mas com o resultado da amostra. Isso não só reduz a lairgura de banda e também aumenta a sensação do user. No lado do server, execute-o no bachground paira fazer a resposta do request em poucos minutos. Quando a computação terminair, atualize o status do cliente. Você também usa queue paira airmazenair as tairefas de cálculo, faça o cálculo cada vez que alguns.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.