【问题标题】:XML search or DB search / javascript (client side) or php (server side) calculationXML 搜索或 DB 搜索/javascript(客户端)或 php(服务器端)计算
【发布时间】:2011-11-26 04:39:43
【问题描述】:

假设您的网站每天有 200,000 名唯一用户。所以,你的服务器负载很重/很重;而且您没有资源购买更大/更好的服务器。所以,你被你所拥有的东西困住了。

现在,每当用户访问您的站点时,您都​​需要进行一些计算(计算通过 GeoIP 检测到的用户城市与某些城市白名单之间的距离,找出半径 140 英里内最近的城市)。

您会通过 PHP 还是通过 JavaScript 进行此计算?

首先,您会预先计算白名单城市半径 140 英里范围内的所有附近城市吗?例如:白名单城市 1 可以有 20 个附近的城市。还是每次都进行即时计算?

例如: 白名单 = 密歇根州底特律 和附近的城市 = 密歇根州卡拉马祖(140 英里)

第二,如果预先计算:您会将其存储在 XML 文件还是某个 MySQL 表中?现在,我们只需要搜索一个表(大小不超过 1 mb 的 mysql 或 xml)。我猜这会效率低下,因为客户端浏览器 (JavaScript) 必须下载 1mb xml 并通过它进行搜索。这将使页面加载时间更慢。使用 DB 可能会更快,但 DB 负载会增加(如果一天中有 200,000 个唯一用户尝试加载页面)。

也许最好的方法是进行 precompute将预先计算的结果存储在 XML,然后使用 PHP 搜索 XML并找到离用户最近的列入白名单的城市?

【问题讨论】:

    标签: php javascript xml performance xml-parsing


    【解决方案1】:

    如果您,网站,实际上是依赖城市信息,那么您必须在服务器上进行计算。

    数据库查询几乎总是比 XML 搜索足够大的 XML 文件要快。你可以优化查询,MySQL会缓存东西等等。

    当然,预先计算所有城市与城市之间的距离是一种可行的方法。 GeoIP 不仅提供城市名称,还提供实际的纬度/经度位置。我敢肯定,可能的城市列表也在不断变化。

    我会考虑使用 MySQL 的地理空间功能。此处按坐标搜索的总体概览:

    Fastest Way to Find Distance Between Two Lat/Long Points

    简而言之,您要做的是建立一个您关心的城市的数据库,包括它们的纬度/经度,并根据提供的地理IP 经度/纬度查询该表。

    【讨论】:

    • “简而言之,您要做的是建立一个您关心的城市的数据库,包括它们的纬度/经度,并根据提供的地理IP 经度/纬度查询该表” --- 所以,你的意思是不会真的预先计算这些信息?我的城市白名单不会经常更改。
    • 您拥有的城市列表,以及它们的位置信息可能不会经常更改,但谁知道 GeoIP 将作为客户端位置信息发送回来。还是您的意思是您也想将所有客户端位置归一化为某个列表?
    • 好吧,我的意思是。我已经有一个白名单(大约 100 个城市)。现在,如果我还预先计算了第二个列表会不会更容易?对于每个列入白名单的城市,我可以预先计算 140 英里半径内的所有可能城市。例如:对于密歇根州底特律(白名单城市),我可以预先计算“密歇根州兰辛”。因此,如果客户来自密歇根州兰辛。我显示密歇根州底特律的列表。 /// 或者你认为简单存储白名单城市的纬度/经度更好。并在每次用户访问我的网站时进行即时计算(而不是预先计算)?
    • 但客户可能不仅仅来自您的已知位置列表。 GeoIP 是否只说该城市是固定 城市列表之一?你能得到那个城市列表吗?
    • 1.是的,客户可以来自任何城市。 2. GeoIP 在他们的数据库maxmind.com/app/geolitecity 中提供了所有城市的列表 - 我可以找到每个城市与我的白名单城市的距离。然后保存距离我的白名单城市 140 英里范围内的那些。这样,Foreach Whitelisted-City:我将预先计算出这个白名单城市 140 英里范围内的所有城市。但我不确定这是否是一种好方法。
    猜你喜欢
    • 2010-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    相关资源
    最近更新 更多