Redis是 NoSQL(非關(guān)系型數(shù)據(jù)庫) 類型數(shù)據(jù)庫,在NoSQL 數(shù)據(jù)庫中數(shù)據(jù)之間是無聯(lián)系的,無關(guān)系的。數(shù)據(jù)的結(jié)構(gòu)是松散的,可變的。
(1) 大數(shù)據(jù)量,高性能
NoSQL 數(shù)據(jù)庫都具有非常高的讀寫性能,尤其在大數(shù)據(jù)量下,同樣表現(xiàn)優(yōu)秀。這得益于它的無關(guān)系性,數(shù)據(jù)庫的結(jié)構(gòu)簡單。關(guān)系型數(shù)據(jù)庫(例如 MySQL)使用查詢緩存。這種查詢緩存在更新數(shù)據(jù)后,緩存就是失效了。在頻繁的數(shù)據(jù)讀寫交互應(yīng)用中。 緩存的性能不高。NoSQL 的緩存性能要高的多。
(2) 靈活的數(shù)據(jù)模型
NoSQL 無需事先為要存儲的數(shù)據(jù)建立字段,隨時可以存儲自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡直就是一個噩夢。尤其在快速變化的市場環(huán)境中,用戶的需求總是在不斷變化的。
(3) 高可用
NoSQL 在不太影響性能的情況,就可以方便的實現(xiàn)高可用的架構(gòu)。
NoSQL 能很好的解決關(guān)系型數(shù)據(jù)庫擴展性差的問題。彌補了關(guān)系數(shù)據(jù)(比如 MySQL) 在某些方面的不足,在某些方面能極大的節(jié)省開發(fā)成本和維護成本。
MySQL 和 NoSQL 都有各自的特點和使用的應(yīng)用場景,兩者結(jié)合使用。讓關(guān)系數(shù)據(jù)庫關(guān)注在關(guān)系上,NoSQL 關(guān)注在存儲上。
(4) 低成本
這是大多數(shù)分布式數(shù)據(jù)庫共有的特點,因為主要都是開源軟件,沒有昂貴的 License 成本
(2) 不支持標準的 SQL,沒有公認的 NoSQL 標準
(3) 沒有關(guān)系型數(shù)據(jù)庫的約束,大多數(shù)也沒有索引的概念
(4) 沒有事務(wù),不能依靠事務(wù)實現(xiàn) ACID.
(5) 沒有豐富的數(shù)據(jù)類型(數(shù)值,日期,字符,二進制,大文本等)
(1)無法應(yīng)對每秒上萬次的讀寫請求,無法處理大量集中的高并發(fā)操作。關(guān)系型數(shù)據(jù)的是 IO密集的應(yīng)用。硬盤 IO 也變?yōu)樾阅芷款i
(2)表中存儲記錄數(shù)量有限,橫向可擴展能力有限,一張表最大二百多列。縱向數(shù)據(jù)可承受能力也是有限的,一張表的數(shù)據(jù)到達百萬級,讀寫的速度就會逐漸的下降。面對海量數(shù)據(jù), 必須使用主從復(fù)制,分庫分表。這樣的系統(tǒng)架構(gòu)是難以維護的。
大數(shù)據(jù)查詢 SQL 效率極低,數(shù)據(jù)量到達一定程度時,查詢時間會呈指數(shù)級別增長
(3)無法簡單地通過增加硬件、服務(wù)節(jié)點來提高系統(tǒng)性能。數(shù)據(jù)整個存儲在一個數(shù)據(jù)庫中的。多個服務(wù)器沒有很好的解決辦法,來復(fù)制這些數(shù)據(jù)。
(4)關(guān)系型數(shù)據(jù)庫大多是收費的,對硬件的要求較高。軟件和硬件的成本花費比重較大。
綜上所述,目前在互聯(lián)網(wǎng)領(lǐng)域海量數(shù)據(jù)的項目中NoSQL應(yīng)用非常廣泛。