如何用好NoSQL?Database-as-a-Service
為什么說NoSQL重要
SQL語言和關系型數據庫(MySQL,PostgreSQL,Oracle,等等)是通用的數據解決方案,占有絕大多數的市場。不過在最近興起的NoSQL運動中,涌現出來了一批具備高可用性,支持線性擴展,支持Map/Reduce操作等等特性的數據產品,它們具有如下特性:
- 頻繁的寫入操作,相對較少的讀取統計信息的操作(比如一個web訪問計數器)應該使用基于內存的key/value存儲系統,比如Redis,或者是具備本地更新特性的文檔存儲系統,如MongoDB。
- 海量數據(比如數據倉庫中需要分析的數據)適合與存儲在一個schmaless,分布式的文件存儲系統中,如Hadoop。
- 存儲二進制文件(比如mp3或者pdf文檔)并且能夠直接為用戶的瀏覽器提供下載功能,可以使用Amazon S3。
- 臨時性的數據(比如網站的session,緩存HTML頁面信息,等等)適合存儲在Memcache。
- 如果希望數據具備高可用性,并且能夠將數據丟失的風險降到最低,同時整個系統具備線性擴展的能力,可以考慮使用Cassandra和HBase。
使用這些數據產品并不是要取代原有的數據產品,而是為不同的應用場景提供更多的選擇。
提供最適合的數據存儲方案 - 如何選擇合適的NoSQL產品?
NoSQL代表著:選擇合適的方案處理合適的業務場景。上面介紹的幾種NoSQL應用場景也許能夠幫助我們選擇合適的數據存儲方案,網上也有不少值得參考的資源。和其他的技術方案一樣,選擇適合你們的業務場景才是最重要的。
絕大多數的應用都會有非常復雜的應用場景,如何找出一款NoSQL產品能夠適用所用的需求?答案是搭配使用多款NoSQL產品,傳統數據庫中的One-For-All的情況在NoSQL中是不存在的。比如下圖中,我們可以在一個網站中使用下面四款數據產品來提供服務:
- MySQL用于存儲敏感的數據,比如用戶的資料,交易的信息等等。
- MongoDB用于存儲大量的,相對不敏感的數據,比如博客文章的內容,文章訪問次數等等。
- Amazon S3用于存儲用戶上傳的文檔,圖片,音樂等等數據。
- Memcached用于存儲臨時性的信息,比如緩存HTML頁面等。
選擇多樣的數據存儲方案同樣有利于提升我們對于NoSQL的數據產品的理解,從大量的解決方案中選擇最適合我們使用的產品,而不是把眼光僅僅放在某一款產品中。
最適合的才是最好的。
再論NoSQL
目前市場上的關系型數據庫都是在多年前設計出來的,在設計這些關系型數據庫中的時候,磁盤存儲是廉價的,而內存和cpu的資源是昂貴的。而在今天再去考慮這個問題就不一樣了,內存和cpu都已經不再昂貴,同時具備線性擴展的特性又顯得尤為重要。
NoSQL的數據產品傾向于使用內存作為首先的存儲。比如Redis和Memcached,幾乎都是在內存中完成的所有的操作。又比如Cassandra和HBase這樣的系統,它們使用了memtable的技術,使得所有寫入的數據先緩存到內存中,等到內存中積累了一定量的數據后,再一次性異步寫入到磁盤中。
Database-as-a-Service
目前提供Infrastructure-as-a-service的比如Amazon EC2,Google App Engine,Rackspace Cloud,未來將會出現Database-as-a-Service。目前已經有類似的服務提供商,比如MongoHQ (MongoDB),Cloudant (CouchDB),和Amazon RDS(MySQL)。它們提供了數據的存儲,管理和擴展服務,讓我們更加專注應用程序本身。
更多關于NoSQL的文章可以參考:http://www.cnblogs.com/gpcuster/tag/NoSQL/