2010-07-26 30 views
6

我們在rails web服務中使用反向地理編碼,並且在通過geokit使用Google反向地理編碼時遇到配額問題。我們也正在實施簡單地理服務,我希望能夠跟蹤每分鐘/每小時的請求數。以每分鐘/每小時記錄API調用的最佳方式

任何有關跟蹤我們的反向地理編碼調用的建議?

我們的代碼如下所示。你會做這些嗎?

  • 添加自定義記錄器和處理在日常的背景
  • 使用超夢幻的寶石,我不知道,它配額和等級輕鬆
  • 插入到數據庫的調用和查詢做有。

注意:我不需要實時數據,只是想在小時內知道,我們每小時的平均和最大請求​​數是多少。 (和每月總請求)

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 

謝謝!

回答

2

這裏的第一部分沒有回答你所問的問題,但如果以前沒有考慮過,我會有所幫助。

你看過沒有使用你的服務器進行反向地理編碼(即通過Geokit),而是通過客戶端完成這項工作嗎?換句話說,一些Javascript加載到用戶的瀏覽器中,代表您的服務進行Google geocoder API調用。

如果你的應用程序可以支持這種做法比這個有許多優點:

  • 因爲分佈式的用戶每個人都有自己每日配額並不會消耗你的
  • 你避開配額問題你不花費你自己的服務器資源,這樣做

如果你仍然想記錄你的地理編碼查詢和您關心的性能影響到您的主應用程序數據庫,那麼你可以考慮一個O F中的下列選項:

  1. 只要創建用於記錄一個單獨的數據庫(或數據庫)(其中寫密集型),並做到同步。可能是關係型的,但也許MongoDB或Redis可能會工作
  2. 登錄到文件系統(使用自定義記錄器),然後將這些批處理成以下批處理結構化查詢存儲。存儲可能是外部的,如亞馬遜的S3,如果這種方式效果更好。
  3. 只是將記錄寫入SimpleGeo每次你做一個地理編碼時間和元數據添加自定義這些記錄,以配合他們回到自己的模型(一個或多個)
+0

關於JavaScript的 - 我喜歡,但這是一個API,所以iPhone正在發送他們的經緯度,不能進行反向編碼。既然我們在Heroku上,我不認爲我可以做文件系統日誌;所以也許MongoDB可能是要走的路。 – 2010-07-26 17:25:26

+0

所以這是一個iPhone應用程序,而不是在那裏運行的瀏覽器,我猜你不能控制lat/lng的東西是如何收集或發送的?你對Heroku上的文件系統是正確的。但你可以使用S3,只支付存儲空間(不是帶寬),或者使用他們最近推出的MongoHQ插件 – bjg 2010-07-26 17:41:42

+0

對所有帳戶都適用!傾向於MongoHQ的實施......關於按時間段分組的任何想法? (每秒獲得一個請求)?你會只是第二個/小時/無論什麼時候Request.all.group_? – 2010-07-26 18:11:23