繁体   English   中英

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

[英]Planning, Scaling and Optimizing Large Web Application

我目前正在设计和开发一个Web应用程序,它有可能以非常快的速度增长。 我将提供一些一般信息,然后继续我的问题。 我会说我是中级Web程序员。

以下是一些规范:MySQL-数据库后端PHP-在前端/后端中使用。 也用于SOAP客户端HTML,CSS,JS,jQuery-前端窗口小部件(highcharts,数据表,jquery-ui等)

由于这是一个公司项目,因此我无法介绍太多细节,但主要目的是构建一个仪表板,成千上万的用户将通过各种设备进行访问。

该项目的数据预计每年将增长50,000个项目(每周〜1000个项目)。

1项=数据库中的1行

一个项目还将从插入之日起记录每日历史记录。

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

每台设备每1年365条记录

365 * 50,000 =〜18,500,000 [第一年]

之后每年每年将约18,500,000条记录乘以x。

(我的论坛有点过时,因为在这一年中会定期添加项目)

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

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

问题:

1)MySQL是处理这些数据需求的好解决方案吗? 大约有1亿条记录。

2)据我所知,我只能使用PHP Soap Client进行同步调用。 随着越来越多的项目被提取,这变得越来越耗时。 是否有编写SOAP客户端的更好的选择,以便我可以发送异步请求而无需等待响应?

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

缩放所涉及的困难几乎总是用户乘以数据的函数。 如果您有很多用户,但没有太多数据,那么扩展就不难了。 一个典型的例子是受欢迎的博客。 同样,如果您有大量数据,但用户数量不是很多,那么您也会没事的。 这代表诸如会计系统或数据仓库情况之类的东西。

迈向任何解决方案的第一步是粗略了解模式并进行大规模测试。 您将不知道应用程序将如何运行,直到您逐步运行它。 没有两个应用程序有完全相同的问题。 在大多数情况下,您需要调整架构,对某些数据进行非规范化或更积极地缓存内容,但这只是技术,没有标准的扩展手册。

在您的特定情况下,如果INSERT活动的比率很低并且索引不太复杂,则不会有很多问题。 您可能最终将要完成的工作是将数亿行分成几个相同的表,每个表中的记录要少得多。

如果您在执行查询时遇到麻烦,请考虑标准方法:索引,优化,然后进行非规范化然后进行缓存。

在PHP无法削减的地方,请考虑使用Python,Ruby,Java / Scala甚至NodeJS之类的工具来帮助您进行数据库调用。 如果要编写SOAP接口,则有很多选择。

1)MySQL是处理这些数据需求的好解决方案吗? 大约有1亿条记录。

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

2)据我所知,我只能使用PHP Soap Client进行同步调用。 随着越来越多的项目被提取,这变得越来越耗时。 是否有编写SOAP客户端的更好的选择,以便我可以发送异步请求而无需等待响应?

PHP 5+允许您与CURL并行执行多个请求。 有关此信息,请参见curl_muli *函数,例如curl_multi_exec() 据我所知,这要求您与请求分离地处理SOAP / XML处理。

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

大概。 但是,你通常是在正确的轨道上,如果你以一个适当的索引,规范化的数据库,以便您已经至少大部分正确想过你的对象。 如果/当您发现实例化解决了一个现有的或明显的近未来效率问题的实例时,就开始实例化。 但是,如果土星的卫星对准,不要对可能成为问题的事物进行优化。 仅针对用户会定期注意到的问题进行优化。

在谈论大型应用程序时,不应仅将所有努力和功劳归功于数据库。 但是,它是核心内容,因为在任何Web应用程序中,我们的数据都是最主要的内容,而且我的方面,您的应用程序也取决于代码优化,其中包括您的后端和前端脚本。 图像和主要是服务器。 哦,上帝,影响应用程序的因素很多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM