2012-06-16 64 views
3

我有一個網站,在幾個月內將有來自不同國家的流量, ,但它將取決於我應該顯示哪個國家的網站。哪個會是按國家重定向用戶的最佳可擴展方式?

目前,我正在使用免費的maxmind GeoIp, 使用php重定向流量。

但我認爲,每天有40,000個獨特用戶,並且每天需要100k的請求,這將會非常緩慢。

我想過用.htaccess來做這件事,但我認爲請求時間會多一點。

我現在的最終想法是根據國家建立在不同文件夾(或子域)的網站的html中的家,像us.website.com和重定向用戶到那裏,但我不知道哪個這種方式對用戶體驗來說是最快的。

服務器是LAMP(我可以選擇的發行版)

請幫我決定! 謝謝你的一切!

+2

什麼是對具有不同國家的不同地點的原因是什麼?它只是語言嗎?如果是這樣,那麼在頭文件中可用,並且不需要查找。另外,如果您使用推薦的方法,MaxMind的數據庫不會太慢。 – Brad

+0

這是因爲網站上的廣告,鏈接和一些特別爲每個國家定製的信息=) – Saikios

+1

啊,是的,你肯定會想做IP檢測。我建議堅持使用免費的數據庫。他們有一個輕量級的國家版本。 – Brad

回答

1

好, 我覺得你太擔心,但讓我解釋一下:

  1. IP - >國家是一個哈希表,所以我希望微小的時間來解決您的查詢
  2. 這是一個靜態信息,一旦解決可以緩存
  3. 用40K用戶
  4. 10萬頁面瀏覽每平均1 2.5用戶頁面視圖,「短」導航歷史記錄(我在後面解釋)

對於這種情況,我建議:

  1. 查詢中使用PHP(把代碼中執行的「頭」)和存儲/緩存中的國家在cookie 數據庫和服務請求。一個簡單的如果(空($ COOKIE ['國家']))將允許瞭解是否查詢數據庫或不
  2. 避免重定向到一個不同的網站(us.domain.com),您將傳遞從2.5到每個用戶3.5個請求(約40%以上)
  3. 當網站需要更多資源時,您可以添加增加您的雲資源或添加一臺具有相同地址(www.domain.com)的新機器,但新的IP做DNS循環,工作以及短導航歷史記錄。

PS

如果你將要聚集$ _SESSION共享將是真正的挑戰,所以你可以看看,因爲現在會話管理器

+0

MaxMind的GeoIP數據庫不是一個散列,它是[trie](http://en.wikipedia.org/wiki/Trie) –

+0

Ehm,我並不真正意味着GeoIP DB的真正實現是一個散列表,但是數據本身就是一個哈希表,所以我期望真正實現的性能與哈希表的實現距離不遠。 –

+0

也許你的意思是說數據本身就是一張地圖。不過,這個映射作爲前綴樹(即一個trie)比作爲一個哈希表要好得多。對於堅持術語抱歉,只是我認爲使用正確的名稱來表達事物是重要的(一般而言)。順便說一句,我應該糾正我的第一條評論:我應該寫一個「哈希表」,而不是「散列表」...... –

1

從PHP訪問下載的MaxMind GeoIP國家數據庫(免費或支付,沒有區別)是相當快的(即使他們的PHP代碼沒有優化 - 它很明顯從良好的C代碼翻譯得非常糟糕)。

只需在你的機器上記錄時間(例如,通過兩個調用microtime(true)與現實數據集的差異),你就可能發現你可以在代碼的頂部訪問GeoIP數據庫,按順序在需要時切換到特定國家/地區的代碼。

下一步是使用國家代碼cookie。如果用戶已經擁有cookie,請使用它切換到特定國家/地區的代碼,否則訪問GeoIP DB以確定國家/地區代碼,設置cookie並像往常一樣切換(即使用戶不接受cookie也可以使用) 。使它成爲一個會話cookie,用戶可能會旅行。如果您有一些頁面緩存,請小心:它不能忽略國家/地區代碼cookie。

你的問題提到了一個重定向,它可能是一個國家特定的header('Location: ...');,但是你應該不這樣做,因爲它使事情變得更加複雜,並增加了一點點的流量。

相關問題