在某些應用場合,比如一些配置的關係鍵值映射存儲、用戶名和密碼的存儲、Session會話存儲等等,用NoSQL完全可以替代MySQL存儲。不但具有更高的性能,而且開發也更加方便。
MySQL+Memcached的架構中,我們處處都要精心設計我們的緩存,包括過期時間的設計、緩存的實時性設計、緩存內存大小評估、緩存命中率等等。
NoSQL數據庫一般都具有非常高的性能,在大多數場景下麵,你不必再考慮在代碼層為NoSQL構建一層Memcached緩存。NoSQL數據本身在Cache上已經做了相當多的優化工作。
Memcached這類內存緩存服務器緩存的數據大小受限於內存大小,如果用NoSQL來代替Memcached來緩存數據庫的話,就可以不再受限於內存大小。雖然可能有少量的磁盤IO讀寫,可能比Memcached慢一點,但是完全可以用來緩存數據庫的查詢操作。
由於NoSQL是一個比較新的東西,特彆是我們選擇的NoSQL數據庫還不是非常成熟的產品,所以我們可能會遇到未知的風險。為了得到NoSQL的好處,又要考慮規避風險,魚與熊掌如何兼得?
現在業內很多公司的做法就是數據的備份。在往NoSQL裡麵存儲數據的時候還會往MySQL裡麵存儲一份。NoSQL數據庫本身也需要進行備份(冷 備和熱備)。或者可以考慮使用兩種NoSQL數據庫,出現問題後可以進行切換(避免出現digg使用Cassandra的悲劇)。
本文隻是簡單的從MySQL和NoSQL的角度分析如何選擇,以及進行融合使用。其實在選擇NoSQL的時候,你可能還會碰到關於CAP原則,最終一致性,BASE思想的考慮。因為使用MySQL架構的時候,你也會碰到上麵的問題,所以這裡冇有闡述。