2013-01-24 50 views
2

我目前正在设计和开发一个具有快速增长速度的Web应用程序。我将提供一些一般信息并转到我的问题上。我会说我是一名中级网络程序员。规划,扩展和优化大型Web应用程序

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

我不能涉及太多细节,因为它是公司项目,但主要目标是构建一个数千用户将从各种设备访问的仪表板。

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

1项= 1行中的数据库

的项目也将记录每天的历史开始于它被插入的一天。每个项目的历史

1天= 1个记录每个装置

365个记录每1年

365 * 50000 =〜18500000 [第一年]

乘法〜18500000个记录用x为每个一年后。

(我forumla是有点过,因为项目将贯穿全年定期添加)

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

大部分数据将被读取并保持为静态(只读)。但是一些项目数据可能会更新或更改。数据也将每天更新,并需要另外写入x个历史记录。

问题:

1)MySQL是一个很好的解决方案来处理这些数据需求?某些时候约有1亿条记录。

2)我只限于与我的PHP肥皂客户端同步呼叫(据我所知)。随着更多项目被提取,这变得耗时。有没有更好的选择来编写SOAP客户端,这样我就可以发送异步请求而无需等待响应?

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

回答

0

1)MySQL是一个很好的解决方案来处理这些数据需求?某些时候约有1亿条记录。

绝对。确保你已经得到了一切正确的索引,并且如果你达到了存储或每秒查询次数限制,那么你有很多适用于大多数/所有DBMS的选项。你可以得到更强大的硬件,开始分散服务器数据,集群等。

2)我只限于与我的PHP肥皂客户端(据我所知)同步调用。随着更多项目被提取,这变得耗时。有没有更好的选择来编写SOAP客户端,这样我就可以发送异步请求而无需等待响应?

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

3)是否还有其他要求我应该考虑?

也许。但是,如果你从一个正确编制索引的规范化数据库开始,那么你通常处于正确的轨道上,对此,你已经正确地考虑了至少对象主要是。如果发现非规范化解决现有的或近期效率问题的实例,则开始非规范化。但是,如果土星的卫星对齐,不要优化可能会出现问题的事物。只针对用户有时会注意到的问题进行优化。

+0

svidgen,感谢您的反馈。在SOAP方面,我需要有一种方法来发送多个请求并设置回调以将响应推送到MySQL。使用PHP,我发送请求并等待,直到得到响应。我希望立即发出10-20个请求,并相应地处理回复。肥皂客户端将成为cron中创建的脚本(除非有更好的方法;)) – ilikemypizza

+0

@ilikemypizza明白。看我的编辑。 – svidgen

+0

谢谢,我发现了一个扩展soapclient并使用curl的类! – ilikemypizza

1

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

任何解决方案的第一步是在模式中粗略测试的规模。除非通过步骤运行,否则您将不知道应用程序将如何执行。没有两个应用程序具有完全相同的问题。大多数情况下,您需要调整架构,解除一些数据的标准化或更积极地缓存事物,但这些只是技术,并没有标准的缩放规范。

在您的具体情况下,如果INSERT活动的比率较低且您的索引不太复杂,则不会出现很多问题。你可能最终会做的是将这些数以百万计的行分成几个相同的表,每个表中都有一小部分记录。

如果您在查询执行时遇到问题,请考虑标准方法:索引,优化,非规范化和缓存。

在PHP无法削减的地方,可以考虑使用Python,Ruby,Java/Scala甚至NodeJS来帮助简化数据库调用。如果你正在编写一个SOAP接口,你有很多选择。

+0

+1注明“标准方法”。 – svidgen

0

在谈论大规模的应用程序时,所有的努力和信用都不应该单独给数据库。然而,它是核心部分,作为我们在任何Web应用程序中的主要数据的数据,并且您的应用程序还取决于代码优化,包括您的后端和前端脚本。图像和主要服务器。哦上帝影响应用程序的许多因素。