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

标签 ruby-on-rails reverse-geocoding

我们在 rails webservice 中使用反向地理编码,并且在通过 geokit 使用 Google 反向地理编码器时遇到了配额问题。我们也在实现 simple-geo 服务,我希望能够跟踪我们每分钟/小时发出的请求数。

对于跟踪我们的反向地理编码调用有什么建议吗?

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

  • 每天在后台添加自定义记录器和进程
  • 使用一个我不知道的 super 神奇的 gem ,它可以轻松地进行配额和评级
  • 将调用插入数据库并在那里进行查询。

  • 注意:我不需要实时数据,只想知道每小时的数据,我们通常和每小时​​的最大请求数是多少。 (以及每月总请求数)
    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
    

    谢谢!

    最佳答案

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

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

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

  • 您解决了配额问题,因为您的分布式用户每个人都有自己的每日配额并且不会消耗您的
  • 这样做不会消耗您自己的服务器资源

  • 如果您仍想记录地理编码器查询,并且担心对主应用程序数据库的性能影响,那么您可以考虑以下选项之一:
  • 只需为日志记录(写入密集型)创建一个单独的数据库(或多个数据库)并同步进行。可能是关系型的,但也许 MongoDB 或 Redis 也可以工作
  • 记录到文件系统(使用自定义记录器),然后将这些分批 cron 到结构化的、可查询的存储中。如果效果更好,存储可以是外部的,例如在 Amazon 的 S3 上。
  • 每次进行地理编码时,只需将记录写入 SimpleGeo 并将自定义元数据添加到这些记录中,以将它们与您自己的模型联系起来
  • 关于ruby-on-rails - 记录 API 调用的最佳方式,每分钟/每小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3336508/

    相关文章:

    ruby-on-rails - Rails 覆盖验证消息

    ruby-on-rails - 在 Ruby 中应该如何解释方法签名?

    iphone - 反向地理编码和本地化

    objective-c - 反向地理编码当前位置

    ruby-on-rails - Rails 4 的 best_in_place gem 复选框问题(为什么字符串未转换为 boolean 值?)

    ruby-on-rails - 如何从 Mechanize::File 对象转换为 Mechanize::Page 对象?

    javascript - 反向地理编码代码

    android - 获取android应用的当前位置地址

    javascript - 如何完全删除 Rails 应用程序中对 application.js 和 application.css 的所有引用?

    java - 如何从 setMyLocationEnabled(true) 获取当前位置的地址;