Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在哪里运行复杂的算法?服务器端还是客户端?_Java_Php_Android_Mysql_Performance - Fatal编程技术网

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

Java 在哪里运行复杂的算法?服务器端还是客户端?,java,php,android,mysql,performance,Java,Php,Android,Mysql,Performance,我正在尝试开发一个社交网络android应用程序,其中包含巨大的用户数据库。我对Android应用程序开发非常陌生,并试图理解应用程序开发背后的概念。 我正在使用以下技术: 1) MYSQL+PHP(RESTfulWeb服务) 2) Android Studio(Java) 在这个应用程序中,我必须运行一些复杂的算法来对从存储在云服务器中的数据库中的不同表收集数据的用户进行排序 我的问题是“在哪里运行这个算法?”。 我应该用PHP编写代码,使算法在服务器端运行,然后将数据发送到客户端吗 (或)

我正在尝试开发一个社交网络android应用程序,其中包含巨大的用户数据库。我对Android应用程序开发非常陌生,并试图理解应用程序开发背后的概念。 我正在使用以下技术:

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

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

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

在这两种情况下,我的应用程序的性能会有什么不同

编辑:谢谢你的回复

我有异步任务和多线程的想法


我产生了这个疑问,因为排名对我所有的用户来说都很普遍,这是有区别的。如果我把耙算法放在服务器端,即使所有用户的结果都是一样的,同样的算法也要运行几次(比如说,如果有10000个用户,同样的算法在服务器端运行10000次)。但如果我真的加入了客户端,我可能会过来。但需要这方面的专家解决方案。

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


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

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

对于您的情况,在服务器端运行它,然后您不需要将所有日期传输到客户端,而是使用示例结果。这不仅减少了带宽,也提高了用户的感受。在服务器端,在地面上运行它,使请求能够在很短的时间内响应。计算完成后,刷新客户端状态。您还可以使用队列存储计算任务,每次计算几次。

这个问题可能有点基于观点,但我认为有一些设计规则可以作为指导原则:

  • 当计算需要大量数据时,尽可能接近数据。这通常发生在数据库本身上。传输大量数据需要大量资源,通过慢速链路(例如服务器和客户端之间)传输数据不是一个好主意
  • 如果计算需要处理私有数据,还将设置数据为计算目的可以移动的范围。不在客户端显示数据不是对私有数据的保护
  • 当计算是资源密集型的时,可以缓存,对许多用户有效,甚至可以提前计算,在服务器上执行并缓存结果
  • 如果计算只需要很少的数据,但是计算量很大,那么问问自己服务器是否能够扩展到足以支持所有并发请求的客户端。尽管客户端的资源有限(现在仍然非常可用!),但让客户端计算这些操作可以带来更稳定的总体性能

这取决于你所说的“复杂”是什么意思

如果复杂意味着需要大量的数学和计算,而不是大量的数据

我可以在客户机上这样做。将需要计算的流程转移到客户端可以极大地提高总体响应能力。您将客户机有效地用作计算引擎,这通常是一件好事

如果复杂意味着需要分析大量数据,而实际数学却很少涉及


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

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

由于您的算法比较复杂,因此最好在服务器上运行,并将结果传递给客户端,因为这将使应用程序更具响应性,这取决于您的资源,预算和货币化。如果您的客户付费完成该算法,您可以提供服务器端解决方案,否则您将不得不在移动设备上完成。这还取决于它在移动设备上运行的速度?是否需要不到100毫秒的时间,那么你不应该在意,如果这是用户明确愿意等待的事情,它甚至可能需要8-10秒。如果你的算法是商业秘密,需要花费大量时间和金钱来开发,那么它也不应该运行或存储在应用程序中,因为它可以被反向工程。听说过异步任务吗?他是android新手。。我认为他甚至没有考虑多线程。。或者使用异步计算。@juergend虽然AsyncTask为您提供了一种在后台(而不是在主线程上)执行操作的方法,但Android应用程序不应使用大量数据执行复杂的算法。别忘了移动端的资源是非常有限的@托多尔科斯托夫:对t进行大量计算