2011-09-08 59 views
0

我正在研究需要基於IP地址獲取國家/地區代碼的系統,並且需要可以訪問多個服務器上的所有形狀和大小的多個應用程序。捲曲與遠程數據庫Vs本地文件?

目前,這是通過cURL請求獲得一個預先存在的geo.php庫,我認爲這是從MaxMind下載的.dat文件解析國家代碼。顯然,儘管這種方法在重負載下已經遇到問題,可能是由於內存泄漏?沒有人確定。

對我建議我們應該放棄cURLing並從本地地理編碼庫中獲取國家代碼的權力,這些數據也存儲在本地文件中。或者可能是託管在例如Amazon S3上的主文件。當然,我有點擔心在一百個不同的地方有大量的IP到國家的查詢存儲在不必要的地方。

我做的一件事是把數據放在一個mysql數據庫中,並通過連接獲得所需的結果;我不知道,但在我看來,我們的網站通常在連接到集中的mysql數據時快速有效地運行,所以這不是解決這個特定問題的好方法嗎?

我的問題是:以不同方式獲取數據的相對開銷是多少?將它捲入,向遠程數據庫發出請求,從本地文件中獲取它,從其他地方託管的文件中獲取它?很難弄清楚哪一種效率更高或效率更低,以及效率的相對收益是否可能足夠大以至於不重要...

回答

0

我有一個網站使用cURL從maxmind獲取國家代碼文本以及約1。5年沒有問題,據我所知。但我做的一件事是爲cURL請求設置了一個1-2秒的超時時間,如果沒有觸發它,默認情況下會恢復到設置的國家/地區代碼。我們經歷了大約一百萬次查詢,才相信它,所以它一定被使用過了......如果在那段時間內沒有達到它,我不想再減慢頁面的速度。這是使用外部庫的主要缺點 - 依賴於響應時間。

至於在當地有什麼需要關注的主要事情是:從現在開始它會是最新的一年?很明顯,你不能從當前的IPv4池中獲得更多不同的IP地址,但是潛在的ISP可能會與不同國家/地區購買/出售/交換IP(我不知道它是如何工作的,但是我已經看到了大量的IP不同的國家,他們似乎從來沒有任何模式給他們大聲笑)。如果沒有發生,請忽略該部分:關於在本地使用它的另一件事是你可以使用mysql查詢緩存來存儲結果,所以你不必擔心後續頁面加載時的資源,或者只是做我做的並將它存儲在Cookie中,並檢查第一個在cURLing(或查找)之前。

+0

嗯,當前我們正在獲取MaxMind數據並將其存儲在我們組織內的某個位置。如果我們能夠將它保存在一個地方,那麼只需手動更新就相對容易。如果它必須傳播到每個想要使用它的位置,那麼很難保持最新狀態。我們不希望依賴於MaxMind的服務和響應時間,我想,儘管它毫無疑問是好的,所以它找到了讓多個不同站點使用相同的IP解密代碼和數據的最佳方式,我猜... – thesunneversets

0

你說這個問題的方式錯了。
只有兩種不同的方法:

  • 網絡查找
  • 本地資源請求

而且只有一個答案:

而服務客戶端請求不會做任何網絡查找。

所以,只要你訪問本地資源(好 - 在同一個數據中心的限制內) - 你沒事。
如果你要請求一些遙遠的資源 - 無論它是捲曲還是數據庫或其他 - 你遇到了麻煩。

這條規則對我來說似乎很明顯。