2010-07-26 6 views
6

Stiamo utilizzando il geocoding inverso in un webservice delle rotaie e abbiamo riscontrato problemi di quota durante l'utilizzo del geocoder inverso di Google tramite geokit. Stiamo anche implementando il servizio simple-geo e voglio essere in grado di tenere traccia di quante richieste al minuto/ora stiamo facendo.Il modo migliore per registrare le chiamate API, al minuto/ora

Qualche suggerimento per tenere traccia delle nostre chiamate di geocoding inverso?

Il nostro codice sarà simile al seguente. Faresti qualcuno di questi?

  • Aggiungere un registratore e di processo personalizzato in background quotidiano
  • Utilizzare un gioiello super-fantastico che io non so che fa quote e Valutazione facilmente
  • inserire nel database di una chiamata e fanno domande lì .

Nota: non ho bisogno dei dati in tempo reale, voglio solo essere in grado di sapere in un periodo di un'ora, qual è la nostra solita e massima richiesta all'ora. (e richieste totali mensili)

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 

Grazie!

risposta

2

La prima parte qui non sta rispondendo alla domanda che stai chiedendo, ma il mio essere utile se non l'ha considerato prima.

Hai guardato a non fare il tuo geocoding inverso usando il tuo server (cioè attraverso Geokit) ma invece di farlo dal cliente? In altre parole, alcuni Javascript sono caricati nel browser dell'utente che effettua chiamate API di geocoder di Google per conto del servizio.

Se l'applicazione potrebbe sostenere questo approccio di questo ha una serie di vantaggi:

  • Si ottiene intorno al problema delle quote, perché gli utenti distribuiti hanno ciascuno la propria quota giornaliera e non consumano vostro
  • Non spendere risorse del tuo personale per farlo

Se desideri ancora registrare le tue query sul geocoder e sei preoccupato per l'impatto sulle prestazioni del tuo database principale dell'applicazione, potresti prendere in considerazione una o f le seguenti opzioni:

  1. Basta creare un database separato (o database) per la registrazione (che richiede molta scrittura) e farlo in modo sincrono. Potrebbe essere relazionale, ma forse MongoDB o Redis potrebbero funzionare sia
  2. Accedere al file system (con un registratore personalizzato) e quindi eseguire il cron di questi in lotti in uno spazio di archiviazione strutturato e disponibile successivamente. Lo storage potrebbe essere esterno come su Amazon S3 se funziona meglio.
  3. Basta scrivere un record in SimpleGeo ogni volta che si esegue un Geocode e aggiungere personalizzato meta-dati per i record di legare di nuovo al vostro proprio modello (s)
+0

Per quanto riguarda il javascript - mi piacerebbe , ma questa è un'API, quindi gli iPhone stanno inviando il loro lat/lng e non possono eseguire la codifica inversa. Dato che siamo su Heroku, non penso di poter fare il log del file system; quindi forse MongoDB potrebbe essere la strada da percorrere. –

+0

Quindi è un'app per iPhone e non un browser che gira lì e suppongo che tu non controlli come vengono raccolte o inviate le informazioni lat/lng? E hai ragione riguardo al filesystem su Heroku.Ma potresti usare S3 e pagare solo per lo spazio di archiviazione (non la larghezza di banda) o utilizzare il componente aggiuntivo MongoHQ di recente avvio – bjg

+0

Diritto su tutti gli account! Appoggiandosi ad un'implementazione MongoHQ ... Qualche idea sul raggruppamento per periodo? (ottenendo una richiesta al secondo)? vorresti semplicemente request.all.group_by il secondo/ora/qualunque? –