繁体   English   中英

大型PHP数组或MySQL临时内存表?

[英]Large PHP arrays or MySQL temporary memory tables?

您将如何在单个进程中临时存储数千个key => valuekey => array对。 key查找将在进程内连续完成,并且在进程结束时将丢弃数据。

我应该使用数组吗? 临时MySQL表? 或介于两者之间?

这取决于数千个意味着多少,以及数组在内存中的大小。 如果你可以在PHP中处理它,你应该这样做,因为mysql的使用在这里产生了一点开销。

但是如果你在共享主机上,或者php.ini中的memory_limit有限且无法增加它,你可以在MySQL中使用临时表。

此外,您可以使用一些简单快速的键值存储,如MemcachedRedis ,它们也可以在内存中工作,并且可以快速查找键(Redis承诺O(1)的时间复杂度

几千?! 你的意思是它可能会占用几个KILObytes?!

你确定这会成为一个问题吗? 在优化之前,以最简单,最简单的方式编写代码,然后检查真正需要优化的内容。 此外,只有基准和完整代码才能确定正确的缓存方式。 其他一切都是浪费时间和万恶之源......

Memcached是一种缓存数据的流行方式。

如果你只运行那个进程并且不需要担心并发访问,我会在php中进行。 如果您有多个进程,我会使用一些已建立的解决方案,因此您不必担心细节。

这一切都取决于您的应用程序和您的硬件。 我敢打赌,让数据库(尤其是MySQL)只做数据库工作。 我的意思是,存储和检索数据并不需要太多工作。 其他DBMS可能是真正有效的(例如Informix)但遗憾的是,MySQL不是。 临时表可能比PHP数组更有效,但您增加了数据库的连接数。

可伸缩性也是一个问题。 用PHP做这件事就更好了。

如果我们没有得到完整的图片,那么很难直截了当地回答。 它取决于您获取数据的位置。

  • 如果您的数据位于数据库中,您最好将其保存在那里并在那里操作它,然后获取所需的项目。 必要时使用临时表

  • 如果您的数据已经在PHP中,那么最好保留在那里。 尽管在PHP中处理数据非常密集

  • 如果数据查找只用少量查询完成,那就用mysql临时表做。

  • 如果有很多数据查找,它几乎总是最好将它存储在php端。 (连接开销)

暂无
暂无

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

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