當前位置:首頁 » NoSQL教學 » MySQL和NoSQL組合

MySQL和NoSQL組合

NoSQL架構實踐—MySQL和NoSQL組合

MySQL和NoSQL組合

MySQL中隻存儲需要查詢的小字段,NoSQL存儲所有數據。

圖 3 -MySQLNoSQL組合

//寫入數據的示例偽代碼 


//data為我們要存儲的數據對象 

data.title=”title”; 

data.name=”name”; 

data.time=”2009-12-01 10:10:01”;

data.from=”1”;

bool status=false; 

DB.startTransaction();//開始事務 

id=DB.Insert(“INSERT INTO table (from) VALUES(data.from)”);//寫入MySQL數據庫,隻寫from需要where查詢的字段 

if(id>0){ 

    status=NoSQL.Add(id,data);//以寫入MySQL產生的自增id為主鍵寫入NoSQL數據庫 

if(id>0 && status==true){ 

    DB.commit();//提交事務 

}else{ 

    DB.rollback();//不成功,進行回滾 

}

把需要查詢的字段,一般都是數字,時間等類型的小字段存儲於MySQL中,根據查詢建立相應的索引,其他不需要的字段,包括大文本字段都存儲在NoSQL中。在查詢的時候,我們先從MySQL中查詢出數據的主鍵,然後從NoSQL中直接取出對應的數據即可。

這種架構模式把MySQL和NoSQL的作用進行了融合,各司其職,讓MySQL專門負責處理擅長的關係存儲,NoSQL作為數據的存儲。它有以下優點:

· 節省MySQL的IO開銷。由於MySQL隻存儲需要查詢的小字段,不再負責存儲大文本字段,這樣就可以節省MySQL存儲的空間開銷,從而節省MySQL的磁盤IO。我們曾經通過這種優化,把MySQL一個40G的表縮減到幾百M。

· 提高MySQl Query Cache緩存命中率。我們知道query cache緩存失效是表級的,在MySQL表一旦被更新就會失效,經過這種字段的分離,更新的字段如果不是存儲在MySQL中,那麼對query cache就冇有任何影響。而NoSQL的Cache往往都是行級彆的,隻對更新的記錄的緩存失效。

· 提升MySQL主從同步效率。由於MySQL存儲空間的減小,同步的數據記錄也減小了,而部分數據的更新落在NoSQL而不是MySQL,這樣也減少了MySQL數據需要同步的次數。

· 提高MySQL數據備份和恢複的速度。由於MySQL數據庫存儲的數據的減小,很容易看到數據備份和恢複的速度也將極大的提高。

· 比以前更容易擴展。NoSQL天生就容易擴展。經過這種優化,MySQL性能也得到提高。

比如手機鳳凰網就是這種架構 http://www.cnblogs.com/sunli/archive/2010/12/20/imcp.html

總結

以NoSQL為輔的架構還是以MySQL架構的思想為中心,隻是在以前的架構上輔助增加了NoSQL來提高其性能和可擴展性。這種架構實現起來比較 容易,卻能取得不錯的效果。如果正想在項目中引入NoSQL,或者你的以MySQL架構的係統目前正出現相關的瓶頸,希望本文可以為你帶來幫助。