SQL 与NoSQL
在絕大部分時(shí)候,我們都會(huì)首先考慮用關(guān)系型數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)我們的數(shù)據(jù),比如SQLServer,Oracle,MySQL 等等。
關(guān)系型數(shù)據(jù)庫(kù)的特點(diǎn):
1、它以表格的形式,基于行存儲(chǔ)數(shù)據(jù),是一個(gè)二維的模式。
2、它存儲(chǔ)的是結(jié)構(gòu)化的數(shù)據(jù),數(shù)據(jù)存儲(chǔ)有固定的模式(schema),數(shù)據(jù)需要適應(yīng)表結(jié)構(gòu)。
3、表與表之間存在關(guān)聯(lián)(Relationship)。
4、大部分關(guān)系型數(shù)據(jù)庫(kù)都支持SQL(結(jié)構(gòu)化查詢語(yǔ)言)的操作,支持復(fù)雜的關(guān)聯(lián)查詢。
5、通過(guò)支持事務(wù)(ACID 酸)來(lái)提供嚴(yán)格或者實(shí)時(shí)的數(shù)據(jù)一致性。
但是使用關(guān)系型數(shù)據(jù)庫(kù)也存在一些限制,比如:
1、要實(shí)現(xiàn)擴(kuò)容的話,只能向上(垂直)擴(kuò)展,比如磁盤限制了數(shù)據(jù)的存儲(chǔ),就要擴(kuò)大磁盤容量,通過(guò)堆硬件的方式,不支持動(dòng)態(tài)的擴(kuò)縮容。水平擴(kuò)容需要復(fù)雜的技術(shù)來(lái)實(shí)現(xiàn),比如分庫(kù)分表。
2、表結(jié)構(gòu)修改困難,因此存儲(chǔ)的數(shù)據(jù)格式也受到限制。
3、在高并發(fā)和高數(shù)據(jù)量的情況下,我們的關(guān)系型數(shù)據(jù)庫(kù)通常會(huì)把數(shù)據(jù)持久化到磁盤,基于磁盤的讀寫壓力比較大。
為了規(guī)避關(guān)系型數(shù)據(jù)庫(kù)的一系列問(wèn)題,我們就有了非關(guān)系型的數(shù)據(jù)庫(kù),我們一般把它叫做“non-relational”或者“Not Only SQL”。NoSQL 最開(kāi)始是不提供SQL 的數(shù)據(jù)庫(kù)的意思,但是后來(lái)意思慢慢地發(fā)生了變化。
非關(guān)系型數(shù)據(jù)庫(kù)的特點(diǎn):
1、存儲(chǔ)非結(jié)構(gòu)化的數(shù)據(jù),比如文本、圖片、音頻、視頻。
2、表與表之間沒(méi)有關(guān)聯(lián),可擴(kuò)展性強(qiáng)。
3、保證數(shù)據(jù)的最終一致性。遵循BASE(堿)理論。Basically Available(基本可用); Soft-state(軟狀態(tài)); Eventually Consistent(最終一致性)。
4、支持海量數(shù)據(jù)的存儲(chǔ)和高并發(fā)的高效讀寫。
5、支持分布式,能夠?qū)?shù)據(jù)進(jìn)行分片存儲(chǔ),擴(kuò)縮容簡(jiǎn)單。
?
對(duì)于不同的存儲(chǔ)類型,我們又有各種各樣的非關(guān)系型數(shù)據(jù)庫(kù),比如有幾種常見(jiàn)的類型:
1 、KV 存儲(chǔ), 用Key Value 的形式來(lái)存儲(chǔ)數(shù)據(jù)。比較常見(jiàn)的有Redis 和MemcacheDB。
2、文檔存儲(chǔ),MongoDB。
3、列存儲(chǔ),HBase。
4、圖存儲(chǔ),這個(gè)圖(Graph)是數(shù)據(jù)結(jié)構(gòu),不是文件格式。Neo4j。
5、對(duì)象存儲(chǔ)。
6、XML 存儲(chǔ)等等等等。
這個(gè)網(wǎng)頁(yè)列舉了各種各樣的NoSQL 數(shù)據(jù)庫(kù)http://nosql-database.org/ 。
NewSQL 結(jié)合了SQL 和NoSQL 的特性(例如PingCAP 的TiDB)。
?
總結(jié)
以上是生活随笔為你收集整理的SQL 与NoSQL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Redis的诞生历程
- 下一篇: Redis 特性