當你需要對你的大量數據進行隨機近實時讀寫時使用Hbase。HBase的目標是在商用硬件集群上管理非常大的表,數十億行X數百億列。HBase是一個模仿Gootable’s Bigtable的,開源的、分布式的、版本化的非關系型數據庫。Google’s Bigtable是一個由Chang等人創建的一個結構化的分布式存儲系統。正如Bigtable利用谷歌的分布式文件存儲系統,Apache HBase 在Hadoop和HDFS上提供類似Bigtable的功能。
Redis使用標準C編寫實現,而且將所有數據加載到內存中,所以速度非常快。官方提供的數據表明,在一個普通的Linux機器上,Redis讀寫速度分別達到81000/s和110000/s。 通常,Redis將數據存儲于內存中,或被配置為使用虛擬內存。通過兩種方式可以實現數據持久化:使用截圖的方式,將內存中的數據不斷寫入磁盤;或使用類似MySQL的日志方式,記錄每次更新的日志。前者性能較高,但是可能會引起一定程度的數據丟失;后者相反。
nosql數據庫應用案例
Apache Cassandra是一套開源分布式NoSQL數據庫系統。它最初由Facebook開發,用于儲存收件箱等簡單格式數據,集Google BigTable的數據模型與Amazon Dynamo的完全分布式的架構于一身。其主要功能比Dynomite更豐富,但支持度卻不如文檔存儲MongoDB。由于Cassandra良好的可擴放性,成為了一種流行的分布式結構化數據存儲系統。功能Cassandra的主要特點就是它不是一個數據庫,而是由一堆數據庫節點共同構成的一個分布式網絡服務,對Cassandra的一個寫操作,會被復制到其他節點上去,對Cassandra的讀操作,也會被路由到某個節點上面去讀取。對于一個Cassandra群集來說,擴展性能是比較簡單的事情,只管在群集里面添加節點就可以了。架構Cassandra使用了GoogleBigTable的數據模型,與面向行的傳統的關系型數據庫不同,這是一種面向列的數據庫,列被組織成為列族(ColumnFamily),在數據庫中增加一列非常方便。
CAP(Consistency,Availabiity,Partition tolerance)理論告訴我們,一個分布式系統不可能滿足一致性,可用性和分區容錯性這三個需求,最多只能同時滿足兩個。關系型數據庫通過把更新操作寫到事務型日志里實現了部分耐用性,但帶來的是寫性能的下降。MongoDB等NoSQL數據庫背后蘊涵的哲學是不同的平臺應該使用不同類型的數據庫,MongoDB通過降低一些特性來達到性能的提高,這在很多大型站點中是可行的。因為MongoDB是非原子性的,所以如果如果應用需要事務,還是需要選擇MySQL等關系數據庫。 NoSQL數據庫,顧名思義就是打破了傳統關系型數據庫的范式約束。很多NoSQL數據庫從數據存儲的角度看也不是關系型數據庫,而是key-value數據格式的hash數據庫。由于放棄了關系數據庫強大的SQL查詢語言和事務一致性以及范式約束,NoSQL數據庫在很大程度上解決了傳統關系型數據庫面臨的諸多挑戰。在社區中,NoSQL是指“not only sql”,其特點是非關系型,分布式,開源,可水平擴展,模式自由,支持replication,簡單的API,最終一致性(相對于即時一致性,最終一致性允許有一個“不一致性窗口”,但能保證最終的客戶都能看到最新的值)。
MongoDB是一個面向文檔的數據庫,目前由10gen開發并維護,它的功能豐富,齊全,完全可以替代MySQL。在使用MongoDB做產品原型的過程中,我們總結了MonogDB的一些亮點: 使用JSON風格語法,易于掌握和理解:MongoDB使用JSON的變種BSON作為內部存儲的格式和語法。針對MongoDB的操作都使用JSON風格語法,客戶端提交或接收的數據都使用JSON形式來展現。相對于SQL來說,更加直觀,容易理解和掌握。 Schema-less,支持嵌入子文檔:MongoDB是一個Schema-free的文檔數據庫。一個數據庫可以有多個Collection, 每個Collection是Documents的集合。Collection和Document和傳統數據庫的Table和Row并不對等。無需事先定義 Collection,隨時可以創建。