2010-01-10 63 views

回答

10

我想我會用Redis的去,因爲:

  • Antirediz(他的綽號)確實是積極發展Redis。 (每次當我看着我的github儀表板時,他已經提交了一些新的代碼)。他現在正在開發redis fulltime感謝VMware
  • Redis最終是持久性的,因此性能是kickass(首先只使用快速的內存)。
  • Redis具有您需要的原子increment操作。
  • Redis有一個很好的PHP庫。還有一個寫作C extension,所以它有非常好的表現。 Redis website也有關於這些擴展的概述。有些是純粹的PHP代碼(運行較慢,但更容易配置)。
+0

傳下來我會說redis。我正在做一些相反的事情,並且我正以每分鐘20美元的512MB VPS每分鐘推送30k個命令。 :) – 2010-01-18 05:56:57

+0

我們嘗試使用redis作爲計數器系統。 Redis的主要數據存儲區是RAM,而我們的數據集太大而無法實現。東京暴君更像東京暴虐 - 不必將整個數據集保存在RAM中 - 可能會是更好的選擇。 – 2010-03-25 02:19:36

+0

一個簡單的計數器不能保存在RAM中? Twitter將幾乎所有活動推文存儲在內存中。如果你想要表現,我認爲你應該爲一個內存模塊支付一點錢。在你旁邊可以得到一些廉價的ram演出。 – Alfred 2010-03-25 17:28:11

1

20世紀90年代着名的查看計數器使用簡單的文件來存儲數字。如果你只需要存儲一個數字,任何事情都足夠好。

+2

如果您得到任何有意義的流量,寫入磁盤上的文件時會出現併發問題。除非你使用文件鎖定,但是你會冒着鎖爭用的風險。像memcached這樣的項目存在是有原因的。 – 2010-01-10 02:43:24

+2

但是,如果您只是將它用於簡單(低流量)的站點,則可以工作,並且易於實施 – Alfred 2010-01-13 19:01:09

+0

鎖定爭用並不困難。 while(!get_lock()|| count> 10000){sleep(0.001); count ++}; fread()或fwrite(); remove_lock();'這樣簡單的事情可以很容易地處理每秒數以萬計的請求......假設您選擇的操作系統在文件系統操作上很快。 – 2012-09-07 22:57:17

-1

我會說APC或memcached是不錯的選擇。

+1

沒有持久性? – stesch 2010-01-10 03:09:38

+0

+1。 Redis也具有可比性,並且建立在持久性之上。 – 2010-01-10 03:21:06

9

帶有upserts的MongoDB非常適合這個。

如果你存儲的東西,如:

{ "url" : "www.example.com", "pageviews" : 0 } 

可以原子方式增加瀏覽量真的很快在原子操作$ INC:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}) 

如果使用upserts,你不必在更新之前檢查文檔是否存在。例如,如果你說:

db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}, {"upsert" : true}) 

與網址www.example.com文檔將如果它不存在,或者如果它存在創建(設置爲1瀏覽量),瀏覽量會遞增。這意味着您不必擔心預先填充集合。