海量 PHP 数组 vs MySQL 数据库?

Posted

技术标签:

【中文标题】海量 PHP 数组 vs MySQL 数据库?【英文标题】:Massive PHP array vs MySQL Database? 【发布时间】:2013-09-13 10:02:23 【问题描述】:

我正在考虑是否应该在 mysql 中使用大型多维数组或数据库。我正在为一个业务有很多产品的客户开发。在这个多维数组中,我将包含每个产品的产品标题、描述、图片链接和类别。

我的客户可能有 1000 多种产品。我研究了其他类似的问题,其中许多人说数组可能更快,但没有一个人处理这种规模的数组。

我个人更愿意使用数组,因为我对 MySQL 的了解非常有限,但如果这意味着要牺牲大量的速度,那么我宁愿使用数据库。对于我的情况,您认为哪个更合适?

【问题讨论】:

这是你学习MySQL的机会,使用它! (是的,它比大数组更好) 数组中的 1000 个项目几乎没有什么,除非您使用的是内存极度受限的系统。 使用数据库!所有数据库引擎都已经实现了通用方法(例如“JOIN”)和优化。如果您打算使用数组,则需要自己用 php 编写这些代码。 【参考方案1】:

其他答案是正确的 - 但出于错误的原因。

将数据保存在 PHP 数组中,它比从数据库中获取数据要快得多 - 即使数据集缓存在内存中。问题在于,在普通 PHP 架构中,每个请求都由单独的进程处理。因此,每个需要访问数据的请求都必须将整个数据集加载到内存中。这需要时间。执行此操作而不是从数据库中检索项目变得更加昂贵的点取决于许多不同的因素 - 但作为粗略的经验法则,它在 100 条记录的区域内。在某些应用程序中,这种模型是有意义的 - 但它们依赖于非常小的数据量和更改/管理数据的受控过程。

您的下一个问题是,您可能希望针对股票记录一些交易 - 这意味着更改数据 - 这意味着序列化访问以确保不会同时发生 2 个单独的交易。在没有死锁的情况下,不可能在 PHP 中实现这一点(没有专门的守护进程来裁决)。

如果您因实现代码而向某人收费,那么很明显,试图在内存中实现它是一个非常非常糟糕的主意。

【讨论】:

我正在考虑在我的游戏中使用数据库而不是多维对象数组,以便能够使用数据库操作。那么当一个android应用程序运行时,每个数据库操作都必须与设备上的物理内存交互,而不是与应用程序的RAM内存交互?当您每秒进行数百次交互时,数据库似乎会减慢游戏速度。 有任何消息来源/证明支持这一说法吗?我有一个永远不会改变的数组,并且总是会被整体查询。但是,该数组有超过 10,000 个元素。我保存数组的文件大小约为 2MB。我想在某些时候PHP必须将整个文件加载到内存中也是有代价的?将 10,000 条记录从 DB 加载到数组中会有什么好处吗?我知道本质上 mysql 也在使用文件系统,但是有什么理由认为 mysql 以更高性能的方式做到这一点? 自己测量。【参考方案2】:

老实说,我会选择数据库。这是我的推理。

使用数据库,您会在连接时间、通信和查询时间方面获得少量性能损失。但是,收益将来自几个方面。

    更好、更容易操作。 稳定性、安全性和云功能。 因为处理一个巨大的阵列会成为一个巨大的痛苦。

此外,使用肉眼查看数据库会更容易。

希望这会有所帮助!

【讨论】:

4.随着数组的增长,通过数据库索引查找数据将比遍历大型数组更快。 感谢您对此提出的所有想法。我决定使用 MySQL DB。从长远来看,它似乎更容易维护,因为随着时间的推移,我们可能会不断添加更多产品。再次感谢。 很高兴能提供帮助。如果您对通过 php 与 MYSQL 交互有任何疑问,请随时提出。我还可以提供一些工作样本。我是该网站的新手(回答问题,已经使用该网站一段时间了),我不确定您是否可以在这里留言,如果不能发邮件给我 jjonesdesign@gmail.com 如果这回答了您的问题,请关闭问题,选择正确的答案。谢谢。【参考方案3】:

让我们稍微谈谈内存消耗。

PHP 中的单个数组元素消耗 144 字节的数据,不包括任何字符串文本(额外的)。

一个包含 1000 个元素的数组然后使用 144.000 个字节加上文本字符串 - 这看起来并不多。

但是你不能只用一个值创建一个有用的数据结构,所以你的 1000 个元素可能是一个包含子元素的数组。让我们假设每个数组只有 10 个元素。每个元素的数组将是 1440 字节,乘以 1000 个元素。不是我们正在接近 1.440.000 字节。仍然喜欢“无”,但文字呢?更复杂的子结构呢?最终会有多大?

此外,对于每个并发请求,该数组都必须在内存中。并且必须以某种方式加载。对数组进行反序列化确实需要相当多的 CPU 资源。

最后:使用数据库!将所有数据推送到内存中没有任何好处。

【讨论】:

【参考方案4】:

使用数组的代码会更简单,不会有 MySQL 数据库的复杂性。如果该数据是静态的,并且该数据没有其他用途或用户,那么该数组就可以了。

另一方面,如果该数据需要更改,或者该数据对某些其他业务功能有用,那么 MySQL 数据库将是可行的方法。

【讨论】:

您意识到每次加载页面时,都必须评估所有“记录”并将其带到 RAM 中,然后才能将 html 发送到浏览器,对吧? 您意识到每次页面加载时,PHP 代码都会被带入 RAM 并进行解释,对吗?你意识到,如果他使用 MySQL 数据库,那么每次加载页面时都必须加载 MySQL 驱动程序,并建立与数据库的连接,必须将查询发送到数据库,并且必须将结果集检索到在将 HTML 发送到浏览器之前,RAM(以及通过网络,如果数据库不在同一台机器上),对吗?使用 MySQL 可能会增加所需的 RAM 量,并增加将要执行的指令数量;它不是免费的。 告诉人们不要使用数据库是制造维护噩梦的好方法。不使用数据库没有性能优势。当这个人拥有 1000 多种产品时,当然不会。现在,如果他只有 2 个,也许吧。但即便如此,他难道不应该期望公司增加其目录并因此使用数据库吗?常识。并且进行 SQL 查询以获取一项将不等于用于存储 1000 多个对象的 RAM 量。

以上是关于海量 PHP 数组 vs MySQL 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 海量数据操作处理

for vs foreach vs while 哪个在 php 中遍历数组更快

php中的Mysql vs Mysqli哪个更好[重复]

货币的浮点精度:在 MySQL 查询 vs PHP vs Javascript 中使用“round”函数

php如何将mysql数据转为数组

PHP:将数组数据插入 MySQL 数据库