如何在一个流程中临时存储数千个key => value
或key => array
对。 key
上的查找将在流程中连续完成,并在流程结束时丢弃数据。
我应该使用数组吗?临时MySQL表?或介于两者之间?
答案 0 :(得分:6)
这取决于数千个意味着多少,以及数组在内存中的大小。如果你可以在PHP中处理它,你应该这样做,因为使用mysql会产生一些开销。
但如果您在共享主机上,或者您在php.ini中限制memory_limit
并且无法增加它,则可以在MySQL中使用临时表。
此外,您可以使用一些简单快速的键值存储,例如Memcached或Redis,它们也可以仅在内存中工作,并且可以快速查找键(Redis承诺{{3} })
答案 1 :(得分:4)
你确定这会成为一个问题吗?在优化之前,以最简单,最简单的方式编写代码,然后检查真正需要优化的内容。此外,只有基准和完整代码才能确定正确的缓存方式。其他一切都是浪费时间和所有邪恶的根源......
答案 2 :(得分:2)
Memcached是一种流行的缓存数据的方式。
如果您只运行那个进程并且不需要担心并发访问,我会在php中进行。如果您有多个进程,我会使用一些已建立的解决方案,因此您不必担心细节。
答案 3 :(得分:1)
这完全取决于您的应用程序和硬件。我敢打赌,让数据库(尤其是MySQL)只做数据库工作。我的意思是,存储和检索数据并不需要太多工作。其他DBMS可能是真正有效的(例如Informix)但遗憾的是,MySQL不是。 临时表可能比PHP数组更有效,但是增加了数据库的连接数。
可扩展性也是一个问题。用PHP做这件事就更好了。
答案 4 :(得分:1)
如果我们没有得到完整的图片,那么很难直截了当地回答。 它取决于您获取数据的位置。
如果您的数据位于数据库中,最好将其保存在那里并在那里操作它,然后获取所需的项目。如果必要,使用临时表
如果您的数据已经在PHP中,那么最好保留在那里。尽管在PHP中处理数据非常密集
答案 5 :(得分:0)
如果只用少量查询完成数据查找,请使用mysql临时表。
如果有很多数据查找,它几乎总是最好将它存储在php端。 (连接开销)