首先,NoSql不是 no sql,而是Not Only Sql,意思為"不僅僅是sql",是非關系型數據庫的統稱。
NoSql主要用于超大規模數據的存儲,這些類型的數據不需要固定的模式,無需多余操作就可以橫向擴展。它主要有以下一些特點:
1.沒有預定義的模式,不需要預定義表結構
2.沒有聲明性查詢語言
3.非事務的,不具備ACID屬性,區別于關系型數據庫。
4.非結構化和不可預知的數據
5.高性能、高可用性、以及彈性擴展
NoSq通常分為4種類型,分別是
1.列存儲數據庫? 特點是按列存儲數據的方便存儲結構化和半結構化數據,方便數據壓縮,對一列或多列的數據查詢有非常大的IO優勢。代表產品有HBase,Cassandra
2.文檔存儲數據庫 一般用json格式存儲,存儲內容是文檔型的,這樣有機會對某些字段建立索引,實現關系型數據庫一些功能。代表產品有MongoDB,CouchDB
3.鍵值存儲數據庫? 特點是能通過key快速找到value,通常用hash table實現。代表產品有大名鼎鼎的redis,tokyotyrant等。
4.圖形存儲數據庫? 圖形關系的最佳存儲,利用圖結構相關算法實現,專注于關系圖譜的構建,典型應用場景是社交網絡。代表產品有Neo4J,InfoGrid等
那么,了解了這么多之后,NoSql的應用場景有哪些呢?
首先明確一點,NoSql不是要取代關系型數據庫的。要知道,NoSql比關系型數據庫誕生的還要早,要是NoSql沒有問題,關系型數據庫怎么可能會誕生?
NoSql不支持事務以及ACID屬性,所以具有事務編程模型的場景,是不適用的。比如銀行轉賬、電商的訂單等。
假如你的應用需要處理快速讀寫,可以試試文檔數據庫和key-value數據庫
假如你的應用需要實現社會化網絡,可以試試圖形數據庫
假如你的應用數據類型不固定,經常發生變化,可考慮文檔數據庫和key-value數據庫
假如你的應用需要存儲Blob類型的數據,可以嘗試key-value數據庫
所以,用不用NoSql,用那個產品,取決你的業務場景,不要迷信。