關於網路伺服器

lxf_123發表於2010-04-24

假如我有數千萬甚至是上億的使用者資料,我想把使用者自增ID和使用者名稱UserName放到快取裡。
我的需求是,當要查詢使用者的資訊時,我想先從快取里根據使用者名稱UserName獲取到使用者的ID,
然後再通過ID在資料庫裡查詢使用者的資訊。
我想當一個使用者表達到上億的數量級別時,用自增ID來查詢肯定比用UserName來查詢快好多倍,即使UserName做了簇級索引。
我現在的疑問是:
1.做這樣的快取需要什麼樣配置的伺服器,ID為自增ID,UserName最大長度為20.上億數量級的資料,
一個記憶體為4G的伺服器能支援的了嗎?
2.應該怎麼樣來實現快取,資料幾乎不會變化,但是要頻繁的新增資料到快取裡,應該怎麼樣才能既容易寫入快取又容易從快取裡查詢資料,並且這些操作不能耗太大的效能。
我能想到的快取方案有:
  方案1.objCache.Insert(CacheKey, objObject);CacheKey對應的是使用者名稱UserName,objObject對應的是自增ID,通過Cache[UserName]方式來獲取自增ID。這樣的好處是新增快取容易,讀取快取資料也很容易。但是問題是,這樣新增上億數量級的快取效能是否有問題?
  方案2.定義一個Hashtable(雜湊表)來存放使用者名稱UserName(key)和自增ID(value),然後把Hashtable存到快取裡,當要查詢或者新增資料時把Hashtable從快取裡讀取出來,然後再對Hashtable進行查詢或者新增資料。但是問題是,這樣的Hashtable將是一個非常龐大的物件,頻繁的從快取裡寫入讀取,會不會也很好效能呢?況且上億數量級別的雜湊表Hashtable[key]這樣讀取資料會快嗎?

高手們,你們是怎麼處理這個問題的呢?一起來探討一下吧!

相關文章