2

我正在创建将创建一个非常大的数组并搜索它们的应用程序。我只想知道是否有一个好的 PHP 数组搜索算法来完成这项任务?

示例:我有一个包含超过 2M 键和值的数组,最好的搜索方式是什么?

编辑 我创建了一个基于数组的平面文件 dbms,所以我想找到搜索它的最佳方法

4

2 回答 2

5

有几件事:

  1. 尝试一下,对几种方法进行基准测试,看看哪一种更快
  2. 考虑使用对象
  3. 至少考虑一下 DB ......它可能是一个 NoSQL 键-> 值存储的东西,比如 Redis.io (这非常快)
  4. 搜索算法,肯定有很多

但是在内存中存储一​​个 2M 键的 assoc 数组将意味着您将有大量的哈希冲突,这无论如何都会减慢您的速度。对数组进行排序,对其进行分块,并应用一个体面的搜索算法,您可能会使其工作得相当快,但老实说,我会说您将做出一个错误的决定。

还要考虑这一点:PHP 在设计上是无状态的,每次脚本运行时,数据都必须再次加载到内存中(对于每个请求,如果它是您正在编写的 Web 应用程序)。与 HashTable 上的蛮力搜索相比,这并非不可能成为更大的瓶颈
找出这一点的最快方法是运行测试,关闭 APC(或替代方案)一次,然后再运行一次,但先缓存要搜索的数组。测量两者之间的差异,您将了解阵列的实际构造花费了多少

于 2013-10-27T21:49:25.480 回答
2

最好的方法是使用array_search(). PHP 已经对它们用 C 编写的函数进行了大量优化。

如果这仍然太慢,您应该切换到另一种“编程”语言(PHP 的速度并不受欢迎)。

有一些可用的算法可以使用您的显卡并行搜索特定值。

于 2013-10-27T21:46:21.127 回答