2

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

以下是一些规范: MySQL - 数据库后端 PHP - 用于前端/后端。也用于 SOAP 客户端 HTML、CSS、JS、jQuery - 前端小部件(highcharts、datatables、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 客户端进行同步调用(据我所知)。随着越来越多的项目被提取,这变得非常耗时。编写 SOAP 客户端是否有更好的选择,以便我可以发送异步请求而无需等待响应?

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

4

3 回答 3

1

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

迈向任何解决方案的第一步是粗略设计一个模式并进行大规模测试。在您完成这些步骤之前,您将不知道您的应用程序将如何执行。没有两个应用程序会出现完全相同的问题。大多数情况下,您需要调整架构、对某些数据进行反规范化或更积极地缓存内容,但这些只是技术,没有标准的扩展食谱。

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

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

在 PHP 无法解决的地方,可以考虑使用 Python、Ruby、Java/Scala 甚至 NodeJS 之类的工具来帮助简化数据库调用。如果您正在编写一个 SOAP 接口,那么您有很多选择。

于 2013-01-24T18:32:58.753 回答
0

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

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

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

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

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

大概。但是,如果您从一个正确索引、规范化的数据库开始,您通常会走在正确的轨道上,并且您至少已经大致正确地考虑过您的对象。如果/当您发现非规范化解决了现有或明显的近期效率问题的实例时,请开始非规范化。但是,如果土星的卫星对齐,则不要针对可能成为问题的事情进行优化。仅针对用户会经常注意到的问题进行优化。

于 2013-01-24T18:44:47.267 回答
0

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

于 2017-02-08T09:23:00.477 回答