哪里运行复杂的算法?服务器端还是客户端?

时间:2017-01-03 09:06:49

标签: java php android mysql performance

我正在尝试开发一个社交网络android应用程序,其中包含庞大的用户数据库。我是Android App开发的新手,并试图了解应用程序开发背后的概念。 我正在使用以下技术:

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

在应用程序中,我必须运行一些复杂的算法,用于对从云服务器中存储的数据库中的不同表中收集数据的用户进行排名。

我的问题是“在哪里运行此算法?”。 我应该在PHP中编写代码以使算法在服务器端运行,然后将此数据发送到客户端 (要么)  我应该使用从服务器收集的数据在JAVA(Android Studio)中编写代码。

在这两种情况下,我的应用程序的性能如何不同?

编辑:感谢您的所有回复。

我对异步任务和多线程有所了解。

这个疑问来到我身边,因为排名对我的所有用户来说都很常见,这是有区别的。如果我在服务器端放置raking算法,即使所有用户的结果都相同,同样的算法也要运行几次(比如说有10000个用户,同一算法在服务器端运行10000次)。但如果我确实放在客户端,我可能会过来这个。但需要专家解决方案。

6 个答案:

答案 0 :(得分:5)

这个问题可能有些基于意见,但我认为您可以使用一些设计规则作为指导原则:

  • 当计算需要大量数据时,请尽可能接近数据。这通常在数据库本身。传输大量数据是资源密集型的,而不是通过慢速链接(例如服务器和客户端之间)的好主意。
  • 如果计算需要处理私有数据,则还设置数据为计算目的可以行进多远的界限。不在客户端显示数据不保护私人数据!
  • 当资源密集型计算可以缓存时,对许多用户有效,甚至可以提前计算,在服务器上执行并缓存结果。
  • 如果计算需要的数据很少但是计算量很大,那么问问自己服务器是否可以很好地扩展以维持所有客户端发出并发请求。尽管客户端的资源有限(现在仍然非常有用!),让客户端计算此类操作可以使整体性能更加稳定。

答案 1 :(得分:4)

始终建议在服务器端运行算法,因为将业务逻辑放在客户端应用程序中会对应用程序的安全性造成威胁。另一方面,由于长时间运行任务,它会降低应用程序的性能,对于良好的用户体验是不可接受的,如果稍后您为多个平台创建,例如Web,iOS等,您必须再次编写相同的逻辑完全浪费吧?放入服务器端的算法并调用使用Rest API。

答案 2 :(得分:3)

这实际上取决于复杂的含义。

如果复杂意味着大量的数学和计算等不是很多数据。

我可能会在客户端上执行此操作。将渴望计算的流程移交给您的客户可以极大地提高您的整体响应能力。您正在有效地将您的客户端用作计算引擎,这通常是一件好事。

如果复杂意味着正在分析的大量数据中涉及的实际数学很少。

您应该将大量数据移动的距离保持在最低限度。尽可能靠近数据库服务器处理它。如果可以的话,将其中的一部分放在数据库中。

答案 3 :(得分:2)

在服务器上运行算法以获得最佳效果,否则会降低应用程序的性能。

在应用程序上运行长计算时,应用程序会冻结并最终崩溃。

答案 4 :(得分:1)

我们也在使用Java Springs开发类似的Web应用程序。要根据性能指标对用户进行排名,您必须在后端(php)上运行它,因为它会影响您的应用程序性能。也就是说,如果您知道自己定期运行这些算法(比如每月/每周/每天),那么最好分配一个执行操作的cron作业并存储结果而不必干扰您的应用程序。

答案 5 :(得分:0)

根据您的情况,在服务器端运行它,然后您不需要将所有日期传输给您的客户端,但需要使用示例结果。这不仅减少了带宽,还提高了用户的感觉。在服务器端,在bachground上运行它以使请求可以在很短的时间内响应。计算完成后,刷新客户端状态。您还可以使用队列来存储计算任务,每次都进行计算。