我想製作一個獨特的計數器,跟蹤用戶來自哪裏的每個推薦人和ip。 Memcached應該存儲這些數據,並且應該在5分鐘左右後將其輸入到數據庫中。並且它應該檢查重複條目,而不是兩次IP寫入數據庫Memcached + PHP存儲數據和提取+獨特的IP計數器+推薦人
我有一個想法沒有memcache,但每秒都會寫入數據庫,這會使網站變得緩慢。
我可以用memcache緩存基本的SQL,但我不知道如何使上述,只是學習編碼。所以我是一個完全noob :)
謝謝你的幫助。
我想製作一個獨特的計數器,跟蹤用戶來自哪裏的每個推薦人和ip。 Memcached應該存儲這些數據,並且應該在5分鐘左右後將其輸入到數據庫中。並且它應該檢查重複條目,而不是兩次IP寫入數據庫Memcached + PHP存儲數據和提取+獨特的IP計數器+推薦人
我有一個想法沒有memcache,但每秒都會寫入數據庫,這會使網站變得緩慢。
我可以用memcache緩存基本的SQL,但我不知道如何使上述,只是學習編碼。所以我是一個完全noob :)
謝謝你的幫助。
據我所知 - 您正在使用RDBMS來長期存儲信息。我可以推薦兩件事:
1.將信息存儲在鍵/值存儲區(如Memcached)中,並通過後臺進程(CRON作業)定期將其寫入RDBMS。 有了這個解決方案,你會做這樣的事情在你的應用程序代碼:
$m = new Memcached();
$m->addServer('localhost', 11211);
$m->setOption(Memcached::OPT_COMPRESSION, false);
$m->append('some_unique_id', '|' . time() . ':' . base64_encode($_SERVER['HTTP_REFERER']));
然後你將有一個cron作業做這樣的事情:
$m = new Memcached();
$m->addServer('localhost', 11211);
foreach($list_of_unique_ids as $uid)
{
$raw_data = $m->get($uid);
$m->delete($uid);
$uid_safe = mysql_real_escape_string($uid);
$items = explode('|', $raw_data);
$sql = array();
foreach($items as $rec)
{
if (!empty($rec))
{
list($timestamp, $ref_base64) = explode(':', $rec, 2);
$ref = base64_decode($ref_base64);
$ref_safe = mysql_real_escape_string($ref);
$sql[] = "('" . $uid_safe . "', " . (int) $timestamp . ", '" . $ref_safe . "')";
}
}
mysql_query("INSERT INTO some_table (user_id, ts, ref) VALUES " . implode(',', $sql));
}
2.使用更先進的鍵/值存儲,如Redis或MongoDB作爲長期存儲的主要手段。 只需選擇一個具有巨大寫入吞吐量的數據庫引擎,並將其稱爲一天。
> i want make an unique counter which
> tracks following, every referrer and
> ip from where the user comes.
> Memcached should store that data and
> than it should be entered into the
> database after 5 mins or so. And also
> it should check for duplicate entries
> that not twice the ip is written to
> the DB
我會建議你使用redis來實現這一點,因爲Redis的有做到這一點efficiently所需的所有命令和具有persistent快照。要計算您只需使用incrby/incr =>decr/decbry命令。
如果你在你的盒子上安裝了memcached,那麼安裝redis將是一個罪惡。只需make
就夠了。連接到PHP的redis的流行客戶端是predis。
如果您不能安裝軟件,您還可以選擇使用http://redistogo.com的免費計劃(5 MB內存,1個數據庫,但不備份)。你需要手動備份到MySQL,因爲快照是免費計劃禁用的(可能更適合購買專用盒子或購買每月5美元的迷你計劃)。
如果你使用Apache,它將會在Apache訪問日誌中,爲什麼不使用它。 – 2011-06-28 09:28:18
如果你使用統計數據有許多腳本使用Apache訪問日誌,或谷歌分析是流行的。 – 2011-06-28 09:30:09
啊哈,我會怎麼做?那會比我想要做到的還要快嗎? – MasterX