3

您将如何在单个进程中临时存储数千个key => value或对。key => array进程内会不断进行查找,key当进程结束时,数据将被丢弃。

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

4

6 回答 6

6

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

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

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

于 2010-06-14T18:51:29.973 回答
4

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

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

于 2010-06-14T19:33:55.007 回答
2

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

如果您只运行一个进程并且不需要担心并发访问,我会在 php.ini 中执行此操作。如果您有多个流程,我会使用一些已建立的解决方案,这样您就不必担心细节。

于 2010-06-14T18:44:45.233 回答
1

如果我们不了解完整的情况,很难给出直接的答案。这取决于您源数据的位置。

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

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

于 2011-08-17T20:29:56.820 回答
1

这完全取决于您的应用程序和硬件。我敢打赌,是让数据库(尤其是 MySQL)只做数据库的工作。我的意思是,除了存储和检索数据之外没有太多工作。其他 DBMS 可能非常高效(例如 Informix),但遗憾的是,MySQL 不是。临时表可能比 PHP 数组更有效,但是您会增加数据库的连接数。

可扩展性也是一个问题。以这种方式在 PHP 中执行此操作会更好。

于 2010-06-14T18:46:53.787 回答
0
  • 如果数据查找只需要很少的查询就可以使用 mysql 临时表。

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

于 2010-06-14T19:44:59.083 回答