即非關(guān)系型數(shù)據(jù)庫和關(guān)系型數(shù)據(jù)庫。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、成都微信小程序、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了柞水免費(fèi)建站歡迎大家使用!
MySQL的優(yōu)點(diǎn):事務(wù)處理—保持?jǐn)?shù)據(jù)的一致性;由于以標(biāo)準(zhǔn)化為前提,數(shù)據(jù)更新的開銷很小(相同的字段基本上只有一處);可以進(jìn)行Join等復(fù)雜查詢
NoSQL的優(yōu)點(diǎn):首先它是基于內(nèi)存的,也就是數(shù)據(jù)放在內(nèi)存中,而不是像數(shù)據(jù)庫那樣把數(shù)據(jù)放在磁盤上,而內(nèi)存的讀取速度是磁盤讀取速度的幾十倍到上百倍,所以NoSQL工具的速度遠(yuǎn)比數(shù)據(jù)庫讀取速度要快得多,滿足了高響應(yīng)的要求。即使NoSQL將數(shù)據(jù)放在磁盤中,它也是一種半結(jié)構(gòu)化的數(shù)據(jù) 格式,讀取到解析的復(fù)雜度遠(yuǎn)比MySQL要簡(jiǎn)單,這是因?yàn)镸ySQL存儲(chǔ)的是經(jīng)過結(jié)構(gòu)化、多范式等有復(fù)雜規(guī)則的數(shù)據(jù),還原為內(nèi)存結(jié)構(gòu)的速度較慢。NoSQL在很大程度上滿足了高并發(fā)、快速讀/和響應(yīng)的要求,所以它也是Java互聯(lián)網(wǎng)系統(tǒng)的利器。
簡(jiǎn)單的擴(kuò)展:典型例子是Cassandra,由于其架構(gòu)是類似于經(jīng)典的P2P,所以能通過輕松地添加新的節(jié)點(diǎn)來擴(kuò)展這個(gè)集群;
低廉的成本:這是大多數(shù)分布式數(shù)據(jù)庫共有的特點(diǎn),因?yàn)橹饕际情_源軟件,沒有昂貴的License成本;
NoSQL的缺點(diǎn):大多數(shù)NoSQL數(shù)據(jù)庫都不支持事務(wù),也不像 SQL Server和Oracle那樣能提供各種附加功能,比如BI和報(bào)表等; 不提供對(duì)SQL的支持
那么該如何選擇?
如果規(guī)模和性能比24小時(shí)的數(shù)據(jù)一致性更重要,那NoSQL是一個(gè)理想的選擇 (NoSQL依賴于BASE模型——基本可用、軟狀態(tài)、最終一致性)。
但如果要保證到“始終一致”,尤其是對(duì)于機(jī)密信息和財(cái)務(wù)信息,那么MySQL很可能是最優(yōu)的選擇(MySQL依賴于ACID模型——原子性、一致性、獨(dú)立性和耐久性)。
如果關(guān)系數(shù)據(jù)庫在你的應(yīng)用場(chǎng)景中,完全能夠很好的工作,而你又是非常善于使用和維護(hù)關(guān)系數(shù)據(jù)庫的,那么我覺得你完全沒有必要遷移到NoSQL上面,除非你是個(gè)喜歡折騰的人。如果你是在金融,電信等以數(shù)據(jù)為王的關(guān)鍵領(lǐng)域,目前使用的是Oracle數(shù)據(jù)庫來提供高可靠性的,除非遇到特別大的瓶頸,不然也別貿(mào)然嘗試NoSQL。
然而,在WEB2.0的網(wǎng)站中,關(guān)系數(shù)據(jù)庫大部分都出現(xiàn)了瓶頸。在磁盤IO、數(shù)據(jù)庫可擴(kuò)展上都花費(fèi)了開發(fā)人員相當(dāng)多的精力來優(yōu)化,比如做分表分庫(database sharding)、主從復(fù)制、異構(gòu)復(fù)制等等,然而,這些工作需要的技術(shù)能力越來越高,也越來越具有挑戰(zhàn)性。如果你正在經(jīng)歷這些場(chǎng)合,那么我覺得你應(yīng)該嘗試一下NoSQL了。
具體問題具體分析
MySQL體積小、速度快、成本低、結(jié)構(gòu)穩(wěn)定、便于查詢,可以保證數(shù)據(jù)的一致性,但缺乏靈活性。
NoSQL高性能、高擴(kuò)展、高可用,不用局限于固定的結(jié)構(gòu),減少了時(shí)間和空間上的開銷,卻又很難保證數(shù)據(jù)一致性。
————————————————
版權(quán)聲明:本文為CSDN博主「蒟蒻熊」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接:
Mongodb和mysql的區(qū)別
1.Mongodb簡(jiǎn)介及優(yōu)缺點(diǎn)分析
Mongodb是非關(guān)系型數(shù)據(jù)庫(nosql ),屬于文檔型數(shù)據(jù)庫。文檔是mongoDB中數(shù)據(jù)的基本單元,類似關(guān)系數(shù)據(jù)庫的行,多個(gè)鍵值對(duì)有序地放置在一起便是文檔,語法有點(diǎn)類似javascript面向?qū)ο蟮牟樵冋Z言,它是一個(gè)面向集合的,模式自由的文檔型數(shù)據(jù)庫。
存儲(chǔ)方式:虛擬內(nèi)存+持久化。
查詢語句:是獨(dú)特的Mongodb的查詢方式。
適合場(chǎng)景:事件的記錄,內(nèi)容管理或者博客平臺(tái)等等。
架構(gòu)特點(diǎn):可以通過副本集,以及分片來實(shí)現(xiàn)高可用。
數(shù)據(jù)處理:數(shù)據(jù)是存儲(chǔ)在硬盤上的,只不過需要經(jīng)常讀取的數(shù)據(jù)會(huì)被加載到內(nèi)存中,將數(shù)據(jù)存儲(chǔ)在物理內(nèi)存中,從而達(dá)到高速讀寫。
成熟度與廣泛度:新興數(shù)據(jù)庫,成熟度較低,Nosql數(shù)據(jù)庫中最為接近關(guān)系型數(shù)據(jù)庫,比較完善的DB之一,適用人群不斷在增長(zhǎng)。
優(yōu)點(diǎn):
快速!在適量級(jí)的內(nèi)存的Mongodb的性能是非常迅速的,它將熱數(shù)據(jù)存儲(chǔ)在物理內(nèi)存中,使得熱數(shù)據(jù)的讀寫變得十分快。高擴(kuò)展性,存儲(chǔ)的數(shù)據(jù)格式是json格式!
缺點(diǎn):
① mongodb不支持事務(wù)操作。
② mongodb占用空間過大。
③ 開發(fā)文檔不是很完全,完善。
2.MySQL優(yōu)缺點(diǎn)分析
優(yōu)點(diǎn):
在不同的引擎上有不同 的存儲(chǔ)方式。
查詢語句是使用傳統(tǒng)的sql語句,擁有較為成熟的體系,成熟度很高。
開源數(shù)據(jù)庫的份額在不斷增加,mysql的份額頁在持續(xù)增長(zhǎng)。
缺點(diǎn):
在海量數(shù)據(jù)處理的時(shí)候效率會(huì)顯著變慢。
3.Mongodb和MySQL數(shù)據(jù)庫的對(duì)比
傳統(tǒng)的關(guān)系數(shù)據(jù)庫一般由數(shù)據(jù)庫(database)、表(table)、記錄(record)三個(gè)層次概念組成,MongoDB是由數(shù)據(jù)庫(database)、集合(collection)、文檔對(duì)象(document)三個(gè)層次組成。
MongoDB對(duì)于關(guān)系型數(shù)據(jù)庫里的表,但是集合中沒有列、行和關(guān)系概念,這體現(xiàn)了模式自由的特點(diǎn)。
4.MongoDB常用語句
# 連接Mongo數(shù)據(jù)庫,并設(shè)置數(shù)據(jù)存儲(chǔ)地址
mongod.exe --dbpath "d:softwareMongoDBServer3.0data"
#-----------------------#1# 數(shù)據(jù)庫
# 查看所有的數(shù)據(jù)庫
show dbs
# 刪除當(dāng)前使用的數(shù)據(jù)庫
db.dropDatabase()
# 使用這個(gè)數(shù)據(jù)庫(只有插入數(shù)據(jù)后完成創(chuàng)建數(shù)據(jù)庫)
use dbt
# 查看當(dāng)前使用的數(shù)據(jù)庫
db
db.getName()
# 查看當(dāng)前數(shù)據(jù)庫狀態(tài)
db.stats()
# 修復(fù)當(dāng)前數(shù)據(jù)庫
db.repairDatabase()
# 從一個(gè)數(shù)據(jù)庫復(fù)制到另一個(gè)數(shù)據(jù)庫
db.copyDatabase("mydb", "temp", "127.0.0.1");
#-----------------------#2# 集合
# 查看當(dāng)前數(shù)據(jù)庫下所有的集合
show collections
show tables
# 創(chuàng)建名稱為coll集合
db.createCollection('coll')
db.createCollection("coll2", {capped:true, autoIndexId:true, size:6142800, max:10000}) # 可選參數(shù)
# 查看當(dāng)前集合狀態(tài)
db.coll.stats()
# 刪除名稱為coll集合
db.coll.drop()
#-----------------------#3# 集合數(shù)據(jù)
# 插入空數(shù)據(jù)并且直接創(chuàng)建名稱為coll集合
db.coll.insert({})
# 插入一個(gè)或多個(gè)數(shù)據(jù)
db.coll.insert({name:'tom', age:22})
db.coll.insert([{name:'adam', age:10},{name:'john', age:23}])
# 添加數(shù)據(jù)(save方法可以修改相同id的數(shù)據(jù))
db.coll.save({name:'allen'})
# 刪除一個(gè)或所有的數(shù)據(jù)
db.coll.remove({name:'tom'})
db.coll.remove({})
# 刪除符合條件的數(shù)據(jù)中的第一條
db.coll.remove({name:'tom'}, 1)
# 更改數(shù)據(jù)
db.coll.update({name:'tom', age:22}, {$set:{name:'tom', age:222}})
# 查看數(shù)據(jù)
db.coll.find()
# 查看一條數(shù)據(jù)
db.coll.findOne()
db.coll.find({}, {name:1, '_id':0}) # 1表示顯示,0表示不顯示(find默認(rèn)顯示_id)
# 格式化顯示數(shù)據(jù),使數(shù)據(jù)更加清晰明了
db.coll.find().pretty()
# 使用and,or查看數(shù)據(jù)
db.coll.find({name:'tom', age:22}) # 等同and使用
db.coll.find({$or:[{name:'tom'}, {age:21}]}) # or使用
# 操作符大于,小于,等于,不等于,大于不等于,小于不等于
db.coll.find({age: {$gt: 22}}) # 大于
db.coll.find({age: {$lt: 22}}) # 大于
db.coll.find({age: 22}) # 等于
db.coll.find({age: {$ne: 22}}) # 不等于
db.coll.find({age: {$gte: 22}}) # 大于等于
db.coll.find({age: {$lte: 22}}) # 小于等于
# 顯示從skip之后limit個(gè)
db.coll.find().limit(2).skip(1)
#-----------------------# # 用戶
# 3.x之后版本添加用戶
use admin
db.createUser({user:'nu', pwd:'nu', roles:[{role:'readWrite',db:'admin'}]})
# 用戶認(rèn)證
db.auth("nu", "nu");
# 顯示當(dāng)前所有用戶
show users;
db.system.users.find()
3.x版本刪除用戶
db.removeUser('nu') # 不推薦使用,已經(jīng)廢棄
db.dropUser("nu");
# 當(dāng)前db版本
db.version();
# 當(dāng)前db的鏈接機(jī)器地址和端口
db.getMongo();
# 備份到備份目錄
mongodump
# 從備份目錄恢復(fù)備份語句。
mongorestore
咱們下期見。
關(guān)系型數(shù)據(jù)庫中的表都是存儲(chǔ)一些格式化的數(shù)據(jù)結(jié)構(gòu),每個(gè)元組字段的組成都一樣,即使不是每個(gè)元組都需要所有的字段,但數(shù)據(jù)庫會(huì)為每個(gè)元組分配所有的字段,這樣的結(jié)構(gòu)可以便于表與表之間進(jìn)行連接等操作,但從另一個(gè)角度來說它也是關(guān)系型數(shù)據(jù)庫性能瓶頸的一個(gè)因素。而非關(guān)系型數(shù)據(jù)庫以鍵值對(duì)存儲(chǔ),它的結(jié)構(gòu)不固定,每一個(gè)元組可以有不一樣的字段,每個(gè)元組可以根據(jù)需要增加一些自己的鍵值對(duì),這樣就不會(huì)局限于固定的結(jié)構(gòu),可以減少一些時(shí)間和空間的開銷。
特點(diǎn):
它們可以處理超大量的數(shù)據(jù)。
它們運(yùn)行在便宜的PC服務(wù)器集群上。
它們擊碎了性能瓶頸。
沒有過多的操作。
Bootstrap支持
缺點(diǎn):
但是一些人承認(rèn),沒有正式的官方支持,萬一出了差錯(cuò)會(huì)是可怕的,至少很多管理人員是這樣看。
此外,nosql并未形成一定標(biāo)準(zhǔn),各種產(chǎn)品層出不窮,內(nèi)部混亂,各種項(xiàng)目還需時(shí)間來檢驗(yàn)
數(shù)據(jù)庫有:
1、MySQL
MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB?公司開發(fā),屬于?Oracle?旗下產(chǎn)品。MySQL是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在?WEB?應(yīng)用方面,MySQL是最好的?RDBMS?(Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng))應(yīng)用軟件之一。
2、Oracle
Oracle開發(fā)的關(guān)系數(shù)據(jù)庫產(chǎn)品因性能卓越而聞名,Oracle數(shù)據(jù)庫產(chǎn)品為財(cái)富排行榜上的前1000家公司所采用,許多大型網(wǎng)站也選用了Oracle系統(tǒng),是世界最好的數(shù)據(jù)庫產(chǎn)品。
3、SqlServer
SQL Server是由Microsoft開發(fā)和推廣的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(DBMS),它最初是由Microsoft、Sybase和Ashton-Tate三家公司共同開發(fā)的,并于1988年推出了第一個(gè)OS/2版本。
4、SQLite
SQLite,是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個(gè)相對(duì)小的C庫中。它是D.RichardHipp建立的公有領(lǐng)域項(xiàng)目。
5、INFORMIX
Informix是IBM公司出品的關(guān)系數(shù)據(jù)庫管理系統(tǒng)(RDBMS)家族。作為一個(gè)集成解決方案,它被定位為作為IBM在線事務(wù)處理(OLTP)旗艦級(jí)數(shù)據(jù)服務(wù)系統(tǒng)。
6、Redis
Redis(Remote Dictionary Server ),即遠(yuǎn)程字典服務(wù),是一個(gè)開源的使用ANSI?C語言編寫、支持網(wǎng)絡(luò)、可基于內(nèi)存亦可持久化的日志型、Key-Value數(shù)據(jù)庫,并提供多種語言的API。
7、MongoDB
MongoDB是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫。由C++語言編寫。旨在為WEB應(yīng)用提供可擴(kuò)展的高性能數(shù)據(jù)存儲(chǔ)解決方案。是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。
8、HBase
HBase是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫,該技術(shù)來源于Fay Chang所撰寫的Google論文“Bigtable:一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng)”。就像Bigtable利用了Google文件系統(tǒng)(File System)所提供的分布式數(shù)據(jù)存儲(chǔ)一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。
9、Neo4J
Neo4j是一個(gè)高性能的,NOSQL圖形數(shù)據(jù)庫,它將結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)上而不是表中。它是一個(gè)嵌入式的、基于磁盤的、具備完全的事務(wù)特性的Java持久化引擎,但是它將結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)在網(wǎng)絡(luò)(從數(shù)學(xué)角度叫做圖)上而不是表中。10、CouchDB
10、CouchDB
CouchDB?是一個(gè)開源的面向文檔的數(shù)據(jù)庫管理系統(tǒng),可以通過 RESTful JavaScript Object Notation (JSON) API 訪問。它反映了 CouchDB 的目標(biāo)具有高度可伸縮性,提供了高可用性和高可靠性,即使運(yùn)行在容易出現(xiàn)故障的硬件上也是如此。