动态加载标记:DDOS预防

时间:2013-10-18 09:58:58

标签: performance google-maps gis scalability

我的应用程序显示了一个地图,其中在每个地图边界更改后,通过ajax(和数据库)请求动态加载位置(或标记)。

我确信这个解决方案不具备可扩展性:目前,欧洲地区共有10个标记 如果数据库增长并且我显示例如1000个位置,则意味着将向用户返回1000行。

这不是JS / UI,因为我使用了MarkerCluster插件,我避免重新绘制已加载位置的标记。

我做了一些调整:
- 由于空闲gmaps事件,延迟Ajax请求 - 增加最小缩放级别,因此无法显示整个世界。

但这还不够。

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题,但我会在这里提出我认为最合适的两个问题。

首先,要从您的网络应用程序中真正控制要求的信息和时间。你可以在javascript中自己编写这个并实现缓存技术等。虽然有很多图书馆可以为您完成大部分工作。 我会推荐以下其中一项:

所有这些都有控制本地缓存的方法,何时获取数据以及从服务器收集哪些数据。它们中的大多数也可以扩展为添加任何缺失的功能。我知道的前两个支持谷歌地图(以及其他一些)。

如果您需要在本地添加更多对数据的控制权,您甚至可以考虑实施PouchDB之类的内容。我认为这更适合移动应用程序或网络连接非常慢或间歇的情况。

这种解决方案应该能够轻松处理100个用户的1000到10000个功能。

如果您真的要扩展到100,000到1000000的100到1000用户的功能,那么我建议在上面的解决方案中添加一个磁贴服务器。磁贴服务器将位于Web应用程序和数据库之间。他们中的大多数都有很多缓存设置和优化来处理大型数据集并将它们推送到客户端。因为它们推出了瓷砖而不是特征,所以即使特征数量增加,数据输出仍然保持相当稳定。我上面提到的OpenGeo SDK和Openlayers库可以很好地适用于以下任何tile服务器:

如果您不愿意进行任何编码,那么有些优惠可以为企业环境提供开箱即用的功能。它们都很昂贵,从你的问题来看,我认为它们可能不是你想要的。