2010-06-14 17 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中的數據是相當密集的