【发布时间】:2016-03-01 19:06:54
【问题描述】:
我的最终目标是将 300 万条记录发送到 Google Maps API 以显示为标记,但在此之前......
我什至无法将 100 万个加载到 PHP 数组中。每个元素的数据为 18 位,有 2 列和 100 万行。
查询只是一个直接的SELECT *,但是当我循环遍历并将正确的记录存储在数组中时内存不足。我试过使用 SplFixedArray 但也没有任何运气。
我需要找到一个很好的方法来批处理并将其拆分 - 在运行一些测试之后,我可以将大约 500k 拉入一个数组而不会达到内存限制(已经是 512M!),所以我可以这样做吗在 2 或 3 个查询中?在页面加载之前,我仍然需要将全部数据保存到服务器端的数组中,并且我可以将它传递给 Maps,所以我假设批处理它不会解决这个问题,因为它仍然会在内存中?
编辑:有一个很大的评论链正在增长,但大多数人都同意这是一个坏主意,出于某种原因。所以 我的 解决方案是将它拉回到大约 300k 点,这可以通过少得多的头部撞击来实现。
【问题讨论】:
-
不要这样做.....大量数据占用大量内存。为了让您了解需要多少内存,read this.... 然后停止尝试对 Google Maps API 进行 DDOS 攻击
-
@MarkBaker 所以这不可能吗?不粗鲁,但我很好奇。而且我不应该做任何事情,它将数组加载到我自己的站点上,然后将其加载到 gmap 中 - 我认为这不会导致 Google 额外的服务器负载
-
如果您使用 Google Maps API 请求绘制 3000000 个数据点,那么这将被 google 拒绝,就好像这是一次攻击.....您遇到过任何企业吗试图用这么多的数据来做到这一点?他们不这样做是有充分理由的
-
那么也许你需要和你的客户谈谈他们所要求的不切实际......你肯定已经看到其他网站是如何做到这一点的,通常总结点数一个区域,直到您放大该区域,以便在任何请求下实际上只绘制有限数量的点
-
@Tom 您能否详细说明“在页面加载之前,我仍然需要将全部数据保存到服务器端的数组中,并且我可以将其传递给 Maps”。我仍然不明白你为什么需要它。