NoSQL 顧名思義就是 Not-Only SQL,也有人說是 No – SQL, 個人偏向于Not – Only SQL,它并不是用來替代關系庫,而是作為關系型數據庫的補充而存在。
常見 NoSQL 有4個類型:
1. 鍵值,適用于內容緩存,適合混合工作負載并發高擴展要求大的數據集,其優點是簡單,查詢速度快,缺點是缺少結構化數據,常見的有 Redis, Memcache, BerkeleyDB 和 Voldemort 等等;
2. 列式,以列簇式存儲,將同一列數據存在一起,常見于分布式的文件系統,其中以 Hbase,Cassandra 為代表。Cassandra 多用于寫多讀少的場景,國內用得比較多的有 360,大概 1500 臺機器的集群,國外大規模使用的公司比較多,如 Ebay,Instagram,Apple 和沃爾瑪等等;
3. 文檔,數據存儲方案非常適用承載大量不相關且結構差別很大的復雜信息。性能介于 kv 和關系數據庫之間,它的靈感來于 lotus notes,常見的有 MongoDB,CouchDB 等等;
4. 圖形,圖形數據庫擅長處理任何涉及關系的狀況。社交網絡,推薦系統等。專注于構建關系圖譜,需要對整個圖做計算才能得出結果,不容易做分布式的集群方案,常見的有 Neo4J,InfoGrid 等。
除了以上4種類型,還有一些特種的數據庫,如對象數據庫,XML 數據庫,這些都有針對性對某些存儲類型做了優化的數據庫。
在實際應用場景中,何時使用關系數據庫,何時使用 NoSQL,使用哪種類型的數據庫,這是我們在做架構選型時一個非常重要的考量,甚至會影響整個架構的方案。