我目前正在设计和开发一种有可能以极快的速度增长的Web应用程序。我将提供一些一般性信息并继续讨论我的问题。我会说我是一名中级网络程序员。
以下是一些规格: MySQL - 数据库后端 PHP - 用于前端/后端。也用于SOAP客户端 HTML,CSS,JS,jQuery - 前端小部件(highcharts,datatables,jquery-ui等)
我无法获得太多精细细节,因为它是一个公司项目,但主要目标是构建一个仪表板,成千上万的用户将从各种设备访问。
该项目的数据预计每年增加50,000件(每周约1000件)。
1项=数据库中的1行
项目还会记录从插入日期开始的每日历史记录。
每件物品的历史记录1天= 1记录
每台设备每年有365条记录
365 * 50,000 = ~18,500,000 [第一年]
每年将x乘以约18,500,000条记录。
(我的论坛有点不对,因为那一年将定期添加项目)
所有项目和历史记录都通过连接到API服务的SOAP客户端访问,然后将记录写入数据库。
大部分数据将被读取并保持静态(只读)。但是可以更新或改变一些项目数据。数据也将每天更新,并需要写入另外x个历史记录。
问题:
1)MySQL是否是处理这些数据要求的好方法?在某些时候有大约1亿条记录。
2)我只能使用PHP Soap Client进行同步调用(据我所知)。随着更多项目的提取,这变得非常耗时。编写SOAP客户端是否有更好的选择,以便我可以在不等待响应的情况下发送异步请求?
3)我应该考虑其他任何要求吗?
答案 0 :(得分:1)
扩展所涉及的难度几乎总是用户次数据的函数。如果你有很多用户,但数据不多,那就不难扩展。一个典型的例子是一个流行的博客。同样,如果您拥有大量数据但用户不多,那么您也可以。这表示会计系统或数据仓库情况等。
任何解决方案的第一步都是在架构中进行粗略测试并对其进行大规模测试。在完成整个步骤之前,您将不知道应用程序将如何执行。没有两个应用程序具有完全相同的问题。大多数情况下,您需要调整模式,对某些数据进行反规范化,或者更积极地缓存事物,但这些只是技术,并且没有标准的扩展功能。
在特定情况下,如果INSERT
活动的比率较低且索引不太复杂,则不会出现太多问题。您最终可能会做的是将数亿行分成几个相同的表,每个表中包含更少的记录集。
如果您在执行查询时遇到问题,请考虑标准方法:索引,优化,然后非规范化,然后缓存。
PHP不能削减它,考虑使用Python,Ruby,Java / Scala甚至NodeJS之类的东西来帮助促进数据库调用。如果您正在编写SOAP接口,那么您有很多选择。
答案 1 :(得分:0)
1)MySQL是否是处理这些数据要求的好方法?在某些时候有大约1亿条记录。
绝对。确保您已正确索引所有内容,并且如果达到存储或每秒查询限制,则您有大量适用于大多数/所有DBMS的选项。您可以获得更强大的硬件,开始跨服务器分片数据,群集等。
2)我只能使用PHP Soap Client进行同步调用(据我所知)。随着更多项目的提取,这变得非常耗时。编写SOAP客户端是否有更好的选择,以便我可以在不等待响应的情况下发送异步请求?
PHP 5+允许您与CURL并行执行多个请求。请参阅curl_muli *函数,例如curl_multi_exec()。据我所知,这要求您从请求中不相交地处理SOAP / XML处理。
3)我应该考虑其他任何要求吗?
可能。但是,如果您从一个正确编制索引的规范化数据库开始,您通常是在正确的轨道上,对于该数据库,您至少 正确地考虑了对象。如果/当您发现非规范化解决现有或明显的近期效率问题的实例时,开始非规范化。但是,如果土星的卫星对齐,不要对可能成为问题的东西进行优化。只针对用户会经常注意到的问题进行优化。
答案 2 :(得分:0)
在谈论大规模应用时,不应仅仅为数据库提供所有的努力和信用。然而,它是核心部分,因为我们的数据主要存在于任何Web应用程序中,而我的应用程序依赖于代码优化,包括您的后端和前端脚本。图像和主要是服务器。哦,上帝影响应用程序的因素很多。