關聯式資料庫(如:Oracle、MS-SQL、MySQL..)對於每日需應付增加 2G以上的社群網站大量資料存取早就不敷需求,以Facebook為例,使用自行開發的 Cassandra 資料庫,就是 NoSQL 的一個蓋念。
何謂 NoSQL 呢?其實 NoSQL 是「非關聯式資料庫」的泛意,在學習資料結構基本概念中應該很多人都很熟悉何謂「關聯式資料庫」、「非關聯式資料庫」,我們常使用的 SQL 關聯式資料庫,因廣泛應用於企業軟體、及應用軟體上,且維護、相容的應用軟體資源較多,所以無論在學術及企業界都以關聯式資料庫為主流。
web2.0網站的興起,相關周邊應用服務的資料量越來越大,很多公司的 MIS 人員一定會感覺到,資料儲存容量的需求越來越大(硬碟總是不夠用的感覺,前幾年才在串連幾個百G硬碟成為1TB磁碟陣列,現在則變成要串連TB硬碟成TB磁碟陣列),那是因為資料量只會暴增,絕對不會遞減,當資料量暴增的同時,處理資料的速度就必須跟進,而使用關聯式資料庫, 任何大數據的web系統,都非常忌諱多個大表的關聯查詢,以及復雜的數據分析類型的複雜SQL報表查詢。
NoSQL 的五項概念
- NoSQL是Not Only SQL
- 增加機器就能自動擴充資料庫容量
- 打破Schema欄位架構的限制
- 資料遲早會一致,資料遺失的風險
- 成熟度不足,版本升級風險高
幾個 NoSQL 的代表性
- Redis
一個 Key-Value 類型的記憶體數據庫,定期通過異步操作把資料庫數據flush到硬碟上進行保存。
- Tokyo Cabinet (TC) 和 Tokoy Tyrant (TT)
TC和TT的開發者是日本人Mikio Hirabayashi,主要被用在日本最大的SNS網站mixi.jp上。
- Flare
TC是日本第一大SNS網站mixi開發的,而Flare是日本第二大SNS網站green.jp開發的,Flare簡單的說就是給TC添加了scale功能。
- MongoDB
MongoDB是一個介於關聯式資料庫和非關聯式資料庫之間的產品,是非關聯式資料庫當中功能最豐富,最像關聯式資料庫。
- CouchDB
CouchDB一種半結構化的資料分佈方式,高容錯的數據庫系統,其提供RESTFul HTTP/JSON接口。其擁有MVCC特性,用戶可以通過自定義Map/Reduce函數生成對應的View。
- Cassandra
Facebook在2008年開源出來的,隨後Facebook自己使用Cassandra的另外一個不開源的分支,目前除了Facebook之外,twitter和digg.com都在使用Cassandra。
- Voldemort
Voldemort 是個和 Cassandra 類似的方向,解決scale問題的分佈式資料庫系統。
- MapReduce
是Google提出的一個軟體架構,用於大規模數據集(大於1TB)的並行運算。概念"Map(映射)"和"Reduce(化簡)"。
- Hadoop
是Apache軟體基金會所研發的開放源碼並行運算編程工具和分佈式文件系統,與MapReduce和Google檔案系統的概念類似。
參考資料: