2010-06-14 48 views
3

您将如何在单个过程中临时存储数千个key => valuekey => array对。 key上的查找将在过程中连续完成,并且数据在过程结束时被丢弃。大型PHP数组或MySQL临时内存表?

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

+0

PHP通常用于编写网页 - 但是积累几千个键/值的东西听起来不像一个网页。了解如何添加数据以及取消引用模式将成为甚至危害猜测的先决条件。 – symcbean 2010-06-14 19:27:19

回答

5

这取决于数千个数字的意思,以及数组在存储器中的大小。如果你可以在PHP中处理它,你应该这样做,因为mysql的使用在这里创建了一些开销。

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

您也可以使用一些简单快速的键值存储就像MemcachedRedis,它们也只在内存中运行,并有钥匙的真正快速查找(Redis的承诺Time Complexity of O(1)

+1

什么是反对票?我希望在这里发表评论,所以我知道我做错了什么。 – jigfox 2010-06-14 19:30:35

2

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

如果你只运行一个进程,并不需要担心并发访问,我会在PHP内部做到这一点。如果您有多个流程,我会使用一些既定的解决方案,因此您不必担心细节。

+0

我只需要在单个进程中存储数据。数据在那里生成,并在那里死亡。我不明白memcached会如何帮助? – 2010-06-14 18:48:29

+0

然后我会反对mysql,只保留php内的数据 – 2010-06-14 18:49:34

+0

对于这种特定类型的问题,memcached应​​该比mysql更快 – jigfox 2010-06-14 18:52:22

1

这一切都取决于您的应用程序和硬件。我敢打赌,让数据库(特别是MySQL)只是数据库的工作。我的意思是,没有太多的工作比存储和检索数据。其他DBMS可能是真正高效的(例如Informix),但可悲的是,MySQL不是。 临时表可能比PHP阵列更有效,但您可以增加数据库连接数。

可伸缩性也是一个问题。在PHP中这样做更好。

4

几千?你的意思是它可能需要几个KILO字节?

你确定这会是一个问题吗?在优化之前,将代码编写成最简单,直接的方式,然后再检查真正需要优化的东西。而且,只有基准和完整的代码才能够决定正确的缓存方式。一切是在浪费时间和一切罪恶的根源...

+0

谢谢你为我设置直线。我接受了另一个答案,因为它符合所问的问题。但是你的回答有一个非常有用的观点,我将继续留在我的脑海中。我总是花费大量时间优化未完成的代码。 – 2010-06-16 22:29:18

0
  • 如果数据查找将只有很少的查询来完成与MySQL临时表做到这一点。

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

1

这是一种很难给出直接的答案,如果我们没有得到完整的画面。 它取决于你的数据来源。

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

  • 如果您的数据已经在PHP中,您最好保留在那里。虽然处理PHP中的数据是相当密集的