【问题标题】:array_slice() for large array, good or badarray_slice() 用于大数组,好坏
【发布时间】:2015-12-11 04:31:46
【问题描述】:

在 PHP 中,array_slice() 是否足以处理大数据 array 而不能是 paginated,因为它没有存储在 database 中,而是在其他 db tables 上计算的。

无论如何,我的 array 大约是 50k,以后可能会增加。第一次在页面加载时获取所有 50k 记录然后slices 它为ajax based pagination。 这是否会导致 server load 将来因为所有records 都在页面加载时被获取?

【问题讨论】:

  • 限制 sql 中的数据,然后再在服务器中查询。例如Select * from data Limit 10
  • aldrin 说的,当你可以直接从数据库中获取你需要的东西时,你到底为什么要创建一个 50k 的数组?

标签: php arrays slice


【解决方案1】:

起初创建包含 50K 的数组是个坏主意,而且它可以增加。它可能会在高流量中“吃掉”你所有的记忆。 还要在哪里存储数组的切片部分以用于 ajax 请求?

我认为(如果您不能在查询中设置限制)您可以创建 附加表,您可以在其中存储数据(例如使用 cron)并使用分页限制显示用户数据,或者您可以创建缓存层(或使用现有的缓存系统:文件缓存,php memcache,...),并编写一些更新缓存的算法(这取决于您的程序逻辑)。

【讨论】:

  • 好吧,我和客户谈过,他们说不会是 50k,而是 15-20k 左右。现在我将数组存储在 Session 中触发 ajax 分页。如果打开其他页面,则清除标题中的会话变量。我知道这不是一个好的做法,但它是我现在能想到的。如果您能告诉我是 .json 文件存储而不是会话,请告诉我。
  • @Cinderghoul 非常适合在会话中存储数据,尤其是大数据(与身份验证或某些设置无关)。您可以从不同的表中获取数据,而不是将其存储在缓存文件中(如您所说,在 JSON 文件中)。获取数据,将其分割成部分,并将每个部分存储在 json 中(例如 datapart1、datapart2、...),并在第一页加载第一部分,在第二页加载 datapart2,依此类推。例如,如果您的数据更新了一次,您可以删除并重新创建该 jsons 一次。
  • 我现在正在使用 Laravel 的缓存系统来存储这些数据。
  • @Cinderghoul 使用缓存系统很好。您可以更新某些事件的缓存(例如,如果数据库中有更新),或者每天一次而不是在用户会话结束后删除它
猜你喜欢
  • 1970-01-01
  • 2019-08-24
  • 2019-09-21
  • 2013-07-17
  • 1970-01-01
  • 2018-03-25
  • 1970-01-01
  • 2021-11-10
  • 1970-01-01
相关资源
最近更新 更多