Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.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/8/mysql/56.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
Php 规划、扩展和优化大型Web应用程序_Php_Mysql_Soap_Web - Fatal编程技术网

Php 规划、扩展和优化大型Web应用程序

Php 规划、扩展和优化大型Web应用程序,php,mysql,soap,web,Php,Mysql,Soap,Web,我目前正在设计和开发一个web应用程序,该应用程序具有快速增长的潜力。我将提供一些一般信息,然后继续我的问题。我会说我是一个中级网络程序员 以下是一些规格: MySQL-数据库后端 PHP-用于前端/后端。也用于SOAP客户端 HTML、CSS、JS、jQuery——前端小部件(highcharts、datatables、jQuery ui等) 由于这是一个公司项目,所以我无法深入了解太多细节,但主要目标是构建一个仪表板,供成千上万的用户从各种设备访问 该项目的数据预计每年增长50000项(每周

我目前正在设计和开发一个web应用程序,该应用程序具有快速增长的潜力。我将提供一些一般信息,然后继续我的问题。我会说我是一个中级网络程序员

以下是一些规格: MySQL-数据库后端 PHP-用于前端/后端。也用于SOAP客户端 HTML、CSS、JS、jQuery——前端小部件(highcharts、datatables、jQuery ui等)

由于这是一个公司项目,所以我无法深入了解太多细节,但主要目标是构建一个仪表板,供成千上万的用户从各种设备访问

该项目的数据预计每年增长50000项(每周约1000项)

1项=数据库中的1行

项目还将记录从插入当天开始的每日历史记录

每个项目1天的历史记录=1条记录

每台设备每1年365条记录

365*50000=~18500000[第一年]

之后每年将18500000条记录乘以x

(我的forumla有点不对劲,因为项目将在那一年中定期添加)

所有项目和历史记录都通过连接到API服务的SOAP客户端访问,然后将记录写入数据库

大部分数据将被读取并保持静态(只读)。但某些项目数据可能会更新或更改。数据也将每天更新,并且需要再写入x数量的历史记录

问题:

1) MySQL是处理这些数据需求的好解决方案吗~在某个时刻有1亿条记录

2) 据我所知,我仅限于使用PHP Soap客户端进行同步调用。随着提取更多的项目,这将变得非常耗时。有没有更好的方法来编写SOAP客户机,这样我就可以在不等待响应的情况下发送异步请求


3) 我还应该考虑其他的需求吗?

缩放所涉及的困难几乎总是用户乘以数据的函数。如果你有很多用户,但数据不多,那么扩展并不困难。一个典型的例子是一个流行的博客。同样,如果你有很多数据,但没有很多用户,你也会很好。这表示会计系统或数据仓库情况

任何解决方案的第一步都是对模式进行粗略分析,并在规模上对其进行测试。您将不知道您的应用程序将如何执行,直到您运行它的步伐。没有两个应用程序会遇到完全相同的问题。大多数时候,你需要调整你的模式,去规范化一些数据,或者更积极地缓存一些东西,但这些只是技术,没有标准的食谱来进行扩展

在您的特定情况下,如果
INSERT
活动的速率较低,并且您的索引也不太复杂,那么您不会遇到很多问题。您最终可能要做的是将数亿行拆分成几个相同的表,每个表中的记录集要小得多

如果您在执行查询时遇到问题,请考虑标准方法:索引、优化、然后去格式化、然后缓存。

PHP无法删减,考虑使用Python、Ruby、java/Scala甚至NodeJS等工具来帮助您的数据库调用。如果您正在编写SOAP接口,您有很多选择。

1)MySQL是处理这些数据需求的好解决方案吗~在某个时刻有1亿条记录。

当然。确保所有内容都已正确索引,并且如果达到每秒存储或查询的限制,则有许多选项适用于大多数/所有DBMS。您可以获得更强大的硬件,开始跨服务器分片数据、集群等

2)据我所知,我仅限于使用PHP Soap客户端进行同步调用。随着提取更多的项目,这将变得非常耗时。有没有更好的方法来编写SOAP客户端,这样我就可以在不等待响应的情况下发送异步请求?

PHP5+允许您使用CURL并行执行多个请求。请参阅curl_muli*函数,例如。据我所知,这要求您从请求中分离处理SOAP/XML处理

3)我还应该考虑其他要求吗?


可能吧。但是,如果您从一个正确索引的、规范化的数据库开始,那么您通常走上了正确的道路,对于这个数据库,您至少基本上正确地考虑了您的对象。如果/当您发现反规范化解决了现有或明显的近期效率问题时,开始反规范化。但是,如果土星的卫星对齐,不要优化可能会成为问题的事情。只针对用户经常会注意到的问题进行优化。

在谈到大型应用程序时,所有的努力和功劳都不应该只归功于数据库。然而,它是核心部分,因为我们的数据在任何web应用程序中都是最主要的,而我的应用程序也依赖于代码优化,包括后端和前端脚本。主要是图像和服务器。哦,上帝,影响应用的因素很多

斯维根,谢谢你的反馈。就SOAP而言,我需要有一种方法来发送多个请求并设置回调以将响应推送到MySQL。使用PHP,我发送一个请求并等待直到得到响应。我希望一次发出10-20个请求,并相应地处理响应。soap客户端将是在cron中设置的脚本(除非有更好的方法;))谢谢,我发现了一个扩展soap客户端并使用curl的类!我建议SOAP客户端使用节点js进行异步