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