2010-07-26 15 views
6

Estamos utilizando la geocodificación inversa en un servicio web de rieles, y nos hemos encontrado con problemas de cuota al usar el geocodificador inverso de Google a través de geokit. También estamos implementando el servicio simple-geo, y quiero poder rastrear cuántas solicitudes por minuto/hora estamos haciendo.Mejor manera de registrar llamadas API, por minuto/por hora

¿Alguna sugerencia para rastrear nuestras llamadas de geocodificación inversa?

Nuestro código será similar al siguiente. ¿Harías alguno de estos?

  • Añadir un registrador y del proceso de encargo en el fondo todos los días
  • Usar una joya super-fantástica que yo no sé nada de eso hace cuotas y calificación fácil
  • insertar en la base de datos una llamada y hacer consultas allí .

Nota: No necesito los datos en tiempo real, solo quiero saber en un período de tiempo, cuáles son nuestras solicitudes habituales y máximas por hora. (y solicitudes mensuales totales)

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 

¡Gracias!

Respuesta

2

La primera parte aquí no responde a la pregunta que me estás preguntando, pero puedo ser útil si no la has considerado antes.

¿Ha considerado no hacer su geocodificación inversa usando su servidor (es decir, a través de Geokit) sino que el cliente lo haya hecho? En otras palabras, un poco de Javascript cargado en el navegador del usuario haciendo llamadas a la API del geocodificador de Google en nombre de su servicio.

Si su aplicación podría apoyar este enfoque que esto tiene una serie de ventajas:

  • a moverse por el problema de cuotas debido a sus usuarios distribuidos cada uno tiene su propia cuota diaria y no consumen la suya
  • No gasta sus propios recursos de servidor haciendo esto

Si aún desea registrar sus consultas de geocodificador y le preocupa el impacto en el rendimiento de su base de datos de aplicaciones principal, entonces podría considerar una o f las siguientes opciones:

  1. Simplemente cree una base de datos (o bases de datos) separada para el registro (que escriba intensivamente) y hágalo de forma síncrona. Podría ser relacional, pero tal vez MongoDB o Redis podrían funcionar
  2. Inicie sesión en el sistema de archivos (con un registrador personalizado) y luego cron en lotes en almacenamiento estructurado y query más adelante. El almacenamiento podría ser externo, como en el S3 de Amazon, si funciona mejor.
  3. Sólo tiene que escribir un registro en SimpleGeo cada vez que se hace una Geocode y añadir metadatos personalizados a los registros para atar de nuevo a su propio modelo (s)
+0

En cuanto a la javascript - Me encanta , pero esta es una API, por lo que los iphones se envían a lo largo de su lat/lng y no pueden hacer la codificación inversa. Como estamos en Heroku, no creo que pueda hacer el registro del sistema de archivos; entonces quizás MongoDB sea el camino a seguir. –

+0

Entonces, ¿es una aplicación de iPhone y no un navegador que se está ejecutando allí y supongo que no se controla cómo se recopilan o envían las cosas lat/lng? Y tienes razón sobre el sistema de archivos en Heroku.Pero podría usar S3 y solo pagar por el almacenamiento (no por el ancho de banda) o usar su complemento MongoHQ recientemente lanzado – bjg

+0

¡Correcto en todas las cuentas! Inclinarse hacia una implementación de MongoHQ ... ¿Alguna idea sobre la agrupación por período de tiempo? (recibiendo solicitudes por segundo)? ¿Quieres solicitar.todos.grupos_por segundo/hora/lo que sea? –

Cuestiones relacionadas