2010-06-01 49 views
4

我有一個大約25兆字節的600,000條記錄的數據表。它由一個4字節的密鑰索引。在PHP中執行數據查找的快速方法

有沒有辦法在不借助MySQL的情況下快速找到這樣的數據集中的一行?

有問題的網站大多是靜態的,只有很少的PHP代碼,沒有數據庫依賴性,因此速度很快。如果可能的話,我想添加這些數據而不必使用MySQL。

在C++中,我將內存映射文件並在其中執行二進制搜索。有沒有辦法在PHP中做類似的事情?

+0

那麼,你的鑰匙有什麼問題? 得到它使用或什麼? – 2010-06-01 18:20:04

回答

1

PHP(至少5.3)應該已經被優化以使用mmap,如果它可用並且它可能是有利的。因此,您可以使用相同的策略,你說你會用C++使用:

編輯流:其實,它似乎只在其他情況下才使用mmap,如file_get_contents。這應該不重要,但你也可以嘗試file_get_contents

1

我會建議memcachedb或類似的東西。如果你打算在PHP中完全處理這個腳本,那麼腳本將不得不爲每個請求讀取整個文件/ datastruct。無法在合理的時間內動態地做到這一點。

+0

這絕對看起來不錯,但是我正在尋找一些作爲標準共享Linux主機的一部分。 – Ghostrider 2010-06-01 17:58:58

+0

一個mysql數據庫幾乎總是標準的共享linux主機。 – Zak 2010-06-01 18:41:57

+0

如果您不想安裝memcached,可以查看PHP PECL擴展APC http://php.net/manual/en/book.apc.php它是Memcached的本地版本。它確實需要你安裝一些東西,或者如果你使用共享託管服務器,至少可以使用這些庫。 – 2010-06-01 19:44:08

1

在C++中,每次用戶想要以不同的方式查看文件時,是否會停止並啓動應用程序,因此加載和卸載文件?可能不會,但這就是php如何與應用程序和應用程序編程語言不同。

PHP有工具來幫助您處理環境拆卸/堆積。這些工具是數據庫和/或鍵控緩存工具,如memcache。使用正確的工具來完成正確的工作。

+0

在Windows中(也可能在Linux中),如果您頻繁地讀取文件,它將保持緩存在內存中,因此映射文件在內存中的速度會很快,即使您重新啓動應用程序,查找也是如此。 – Ghostrider 2010-06-01 18:08:49