记录API调用的最佳方式,每分钟/每小时

Jes*_*ott 6 ruby-on-rails reverse-geocoding

我们在rails webservice中使用反向地理编码,并且在通过geokit使用Google反向地理编码器时遇到配额问题.我们还在实施简单地理服务,我希望能够跟踪我们每分钟/小时的请求数量.

有关跟踪我们的反向地理编码调用的任何建议吗?

我们的代码将如下所示.你会做这些吗?

  • 每天在后台添加自定义记录器和进程
  • 使用一个我不知道的超级奇妙的宝石,它可以轻松实现配额和评级
  • 在数据库中插入一个调用并在那里进行查询.

注意:我不需要实时数据,只是希望能够在一小时内知道每小时的常规和最大请求​​数.(以及每月总申请)

def use_simplegeo(lat, lng)
  SimpleGeo::Client.set_credentials(SIMPLE_GEO_OAUTHTOKEN, SIMPLE_GEO_OAUTHSECRET)
  # maybe do logging/tracking here?
  nearby_address = SimpleGeo::Client.get_nearby_address(lat, lng)

  located_location = LocatedLocation.new
  located_location.city = nearby_address[:place_name]
  located_location.county = nearby_address[:county_name]
  located_location.state = nearby_address[:state_code]
  located_location.country = nearby_address[:country]
  return located_location

end
Run Code Online (Sandbox Code Playgroud)

谢谢!

bjg*_*bjg 2

这里的第一部分不是回答您所问的问题,但如果之前没有考虑过的话,我会有所帮助。

您是否考虑过不使用服务器(即通过 Geokit)进行反向地理编码,而是由客户端完成?换句话说,一些 Javascript 加载到用户的浏览器中,代表您的服务进行 Google 地理编码器 API 调用。

如果您的应用程序可以支持这种方法,那么这种方法有很多优点:

  • 您可以解决配额问题,因为每个分布式用户都有自己的每日配额,并且不会消耗您的配额
  • 您不会花费自己的服务器资源来执行此操作

如果您仍然想记录地理编码器查询并且担心对主应用程序数据库的性能影响,那么您可以考虑以下选项之一:

  1. 只需创建一个单独的数据库(或多个数据库)用于日志记录(写入密集型)并同步执行即可。可能是关系型的,但也许 MongoDB 或 Redis 都可以工作
  2. 记录到文件系统(使用自定义记录器),然后将这些数据批量写入结构化、可查询的存储中。如果效果更好的话,存储可以是外部的,例如亚马逊的 S3。
  3. 每次进行地理编码时,只需将记录写入 SimpleGeo 并向这些记录添加自定义元数据,以将它们与您自己的模型联系起来