首先做使用者量估算需求,假如我們做的是學術社群,那麼這個使用者量不會很大,可能我們不需要考慮這個,對於使用者量的級別,我們暫時把使用者量級別定 為三種,百萬級別(m)和千萬界別(s),以及億萬級別(q),並考慮使用者登入驗證以及查詢常用的操作,對m和s進行擴充以及了解。
眾所周知,在這個情況下,對於使用者資料的負載其實並非可行而不可行的問題,而是如何最大化的保證查詢和更新以及各個伺服器之間的資料同步。這裡 我們不再講解如何優化如何索引,只介紹架構初期的方案,下面介紹的方案如果涉及全表查詢,可以採用分割槽檢視的方案,大家可以具體搜尋相關資料。
對於m級別來說,現有的dbms經過合理的布局完全可以滿足需求。我們需要解決的問題的關鍵其實是處理io方面的問題,處理方案相對簡單一些,對資料庫的file檔案分磁碟存貯(不是分割槽,是不同的硬碟),根據負載量大小,我們可以適當的控制硬碟的數量和檔案分割槽的數量。
對於s級別,上個處理方案已經不能完全滿足需求了,這個時候我們需要對註冊和入庫的流程進行簡單的修改了,解決方案是資料雜湊和分割槽檢視的概念,具體概念大家去google一下,我不詳細說明了。
我們常用的方案有三種。第一種是等容擴充法,在使用者註冊控制的基礎上,保證每個庫的使用者容量不超過500萬,超過之後入第二個庫,以此類推,這 個方案可以保證系統有效的擴充性,但不能保證資料被有效的索引。第二種就是共區索引方案,其實和第一種方案有異曲同工的之說但是講第一種方案進行了合理的 優化,按照使用者名稱進行分庫存貯。比如我們可以建立26的資料庫,按照使用者名稱的索引來控制使用者資料入哪個庫。假如使用者名稱是crazycoder,那麼就講該 使用者名稱的資料存放在使用者表c中,在資料存貯的時候可以很方便的根據使用者名稱進行相應的資料查詢,方案二可以有效的解決資料索引問題。方案三是乙個更具模型化 的方案,結合方案一和方案二,進行使用者id的編碼,不是indentify cloumn,我們用一種序列化的方案將使用者名稱以編碼的形式存貯,比如使用者名稱是crazycoder,我們的編碼方案就是通過演算法進行數位化,將 crazycoder按照c,r,a,….存貯為數字索引,然後進行分割槽存貯,數字型別的資料在資料庫中可以更有效的被查詢和被更新和共享,結合方案一和 方案二這個就是方案三。
對於q級別。資料量已經是足夠海量了,這個時候無論用哪種方案都是乙個讓人頭大的資料,不能簡單的用查詢的方案來處理了,可以參考s級別的進行 處理。但這個時候我們採用的方案是根據使用者活躍度的權值結合資料量進行臨時資料表的存放。如果乙個非意外的資料情況下,每天登入的使用者量不會上千萬。這個 時候我們需要做的是乙個簡單的資料**程式。乙個臨時的使用者驗證資料庫,每天執行一次批處理,將活躍度高的使用者賬戶提取到臨時資料庫中,查詢的時候先查詢 臨時庫,如果沒有在進行全庫查詢。這個根據系統的負載情況來估計閾值,不同的系統估算方案也不盡相同。
上面對於,m,s,q三種界別進行了簡單的概述,下面介紹乙個在其之上更高階的乙個查詢方案,資料快取伺服器,我們也可以把它理解為緩衝伺服器,資料做為唯讀來使用。
具體實現方案如下:以為涉及了海量,dbms常規的快取方案已經不符合我們的要求了,那麼我們需要乙個有效的快取方案,這個時候處理的流程其實 就是講最常用最直接的資料直接存放在快取伺服器中,而這個快取伺服器定時從主伺服器獲取並更新資訊。這個是乙個簡單的查詢,我們還可以更深入的講快取服務 器做二次快取,也就是一次性處理輸入並存放到list資料中,作為全域性變數放到記憶體中進行查詢,同時用hashtable或者陣列進行資料組索引(可以是 多級),根據查詢分布到各個變數中。直接從記憶體中讀取資料。
以筆者的經驗來說的話,對於item資料不超過10k的來說,每個列表最佳的存放範圍是0到6萬之間。
海量資料的解決方案
現在無論是企業的業務系統還是網際網路上的 程式都面臨著資料量大的問題,這個問題如果解決不好將嚴重影響系統的執行的速度。1 快取和頁面靜態化 資料量大的問題最直接的解決方案就是使用快取,快取就是將從資料庫中獲取的結果佔時儲存起來,在下次使用的時候無需要重新到資料中獲取,這樣可以大大降低資料庫的壓力。快...
海量資料的解決方案
隨著企業業務的不斷擴充套件,不得不面臨資料量大的問題,下面針對這個問題進行各種方案的介紹。快取的使用方式分為通過程式儲存到記憶體中和使用快取框架兩種方式。程式直接操作的是 map,尤其是concurrentmap,而常用的快取框架有 ehcache memcache 和 redis等。頁面靜態化是將...
海量資料的解決方案 筆記
海量資料的解決方案 point 1.快取和頁面靜態化 快取的作用是降低資料庫的壓力.快取的使用方式 a 通過程式直接儲存到記憶體中 map concurrenthashmap b 使用快取框架 ehcache,memcache,redis 頁面靜態化 在程式中使用模板技術生成,如常用的fremark...