【问题标题】:Initializing a huge array (50000 entries)初始化一个巨大的数组(50000 个条目)
【发布时间】:2013-02-10 10:03:24
【问题描述】:

我正在初始化一个由 49605 key=>value 对组成的巨大数组)(该数组将永远不会再更改) $boardkey_to_values=数组(97031=>0,97531=>1,409531=>2,410031=>3,410131=>4,472031=>5,472531=>6,472631=>7,472651=>7, 484531=>8,485031=>9,485151=>10,485131=>10,...)

问题是编译器需要花费大量时间(平均 40 毫秒)

我想知道它们是否可以成为更快的解决方案。

我在我的程序中使用了很大一部分键(15-35k)。我之前在 where_in 中使用 MySQL,但它甚至更慢(平均 6 秒),我得到了硬编码的建议,确实,它快得多,但我想进一步优化它。见原帖String to Value compare Optimizing MySQL Query

【问题讨论】:

  • 将数据存储在数据库中可能会更快,并且仅在需要时加载所需的特定条目
  • 你从哪里得到的原始数组从数据库或文件?
  • 取决于您打算对数组做什么。你能提供一些背景信息吗?
  • 确实,这里缺少上下文,您能否详细解释一下此解决方案所针对的总体问题?我猜你可以将该数组切割成更小的“子数组”,并且只使用你实际需要的那些而不是整个 50K 项。
  • [查看这个相关问题][1] [1]:stackoverflow.com/questions/2120401/…

标签: php arrays initialization


【解决方案1】:

对于这么大的阵列,40 毫秒并不是很慢。但是,如果这是在 Web 上并且多个人正在调用 PHP 页面,则可能会降低服务器的速度。您有多种选择:

  • 在页面呈现后使用多个 Ajax 调用来填充您的数组,即 10000 组 每隔几秒钟(这样你就可以在页面上做其他事情,让 数组按自己的时间填充)

  • 使用数据库,因为它会更快地搜索/更新而不是 将其存储在一个数组中。

  • 将程序逻辑更改为一次只能处理几个值, 而不是其中的 49K。 (有点像分页,每页只显示一部分数据)

【讨论】:

  • 我认为最好的想法是分页,因为我可能会找到一种方法来分页
  • 是的,这就是 SQL 视图和限制发挥作用的地方,以获得最佳性能。网站每页显示 10、20、50、100 条记录并不少见,这就是您获得最大好处的地方(低带宽、低 sql 搜索时间、低处理利用率、低服务器负载),它迫使用户过滤更多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 2019-11-21
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 2016-12-17
  • 2011-07-30
相关资源
最近更新 更多