在 php 中处理大数组
在我正在开发的应用程序中,我需要从各种来源(mysql数据库、facebook和未来的其他社交网络)获取信息,并将所有信息加入到相同的结构中,
我现在正在做的是从我的数据库和从facebook 作为数组,然后使用 array_merge 连接两个数组,然后迭代该数组并创建一个使用我想要的字段格式化的自定义数组。
结构本身正在工作,但我担心随着我的应用程序和相关 Facebook 页面的帖子数量不断增加,我的应用程序会变得非常慢。 我当时只显示 10 条记录(使用 array_slice),但在此之前我总是需要获取所有数据,并且因为它来自具有不同格式的不同来源,所以我没有看到任何方法来限制从每次通话。
有什么建议吗?
In the application i am developing I need to get information from varoius sources (mysql database,facebook and in future other social networks.) and join all in the same structure,
What i am doing right now is get the data from my database and from facebook as array, then use array_merge to join both arrays and then iterate over that array and create a custom array formatted with the fields I want.
The strucutre itself is working but I fear that with increasing number of posts into my app and the associated facebook page will make my application really slow.
I am only showing 10 records at the time (using array_slice) but before that I allways need to get all the data, and because, it comes from different sources with different formats, I dont see any way to limit the ammount of data returned from each call.
Any tips?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
每次调用的数据是否具体?您可以预处理数据,例如在第一个请求时获取数据并将其存储在临时表中,这样下一个请求就可以从表中加载。您可以定义刷新率,并在刷新率时间过去后进行完全重新加载。此外,如果您有权访问 cron 作业等内容,它们可能就是您正在寻找的解决方案。
Is the data specific per call? You could preprocess the data, for example on the first request obtain it and store it in a temporary table, that way the next requests can just load from the table. You could define a refresh rate, and do a full reload if the refresh rate time is passed. Also if you have access to things like cron jobs they might be the solution you're looking for.
我会做一些单元测试和全局测试,试图找出不断增长的数组是否确实是一个问题。
如果是的话,我想我会将应用程序分为两部分,一部分获取数据并将其解析为正确的格式,另一部分使用数据并向用户显示 10 条记录,例如,您可以制作一个后台应用程序使用Python进行数据处理,使用PHP前端进行用户可视化。
HTH 问候。
I would do some unittesting and global testing to try to find if the growing arrays are actually a problem.
If they are, i guess i would divide the application in two parts, one getting the data and parsing it two the right format and another one to use the data and show the 10 records to the user, you can make a backgroud app for example in Python for the data procesing and a PHP front end for the user visualization.
HTH regards.
不要将所有数据加载到内存中。使用 mySQL 的
LIMIT
和数据库包装器的fetch_row
方法来减少需要加载到脚本内存中的记录数量。Don't load all your data into memory. Use mySQL's
LIMIT
and your database wrapper'sfetch_row
method to keep down the number of records that you need to load into your script's memory.