2010-06-01 51 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