《非替代品,MongoDB與MySQL對比分析》要點:
本文介紹了非替代品,MongoDB與MySQL對比分析,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:非關(guān)系型數(shù)據(jù)庫
《非替代品,MongoDB與MySQL對比分析》是否對您有啟發(fā),歡迎查看更多與《非替代品,MongoDB與MySQL對比分析》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
【IT168 評論】對于只有SQL配景的人來說,想要深入研究NoSQL似乎是一個艱巨的任務(wù),MySQL與MongoDB都是開源常用數(shù)據(jù)庫,但是MySQL是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫,MongoDB則是非關(guān)系型數(shù)據(jù)庫,也叫文檔型數(shù)據(jù)庫,是一種NoSQL數(shù)據(jù)庫.它們各有優(yōu)點,關(guān)鍵看用在什么地方.
什么情況下,MongoDB是最好的選擇?
很多人認為MongoDB難以置信的強大,是一個可擴展,界面交互友好的數(shù)據(jù)庫辦理方案.當開發(fā)人員需要負責(zé)管理數(shù)據(jù)庫環(huán)境時,MongoDB是一個不錯的選擇.起碼在小型企業(yè)和初創(chuàng)公司,是這樣.MongoDB將信息存儲在BSON(二進制JSON)中.BSON是一種類JSON二進制形式的存儲格式,簡稱Binary JSON,它和JSON一樣,支持內(nèi)嵌的文檔對象和數(shù)組對象,但BSON有JSON沒有的一些數(shù)據(jù)類型,如Date和BinData類型.JSON很容易與其他編程語言關(guān)聯(lián),許多開發(fā)人員都有使用JSON的經(jīng)驗.
當你的程序有大量流量寫入時,MongoDB也是一個很好的選擇.這并不是說MySQL在處理頻繁寫入環(huán)境方面不是一個好的選擇,只是說MongoDB相對更容易一些.Facebook為寫負載過重的環(huán)境設(shè)計了RocksDB存儲引擎,性能還不錯(通過基準測試證明了這一點).
當你需要一個無模式或模式靈活的數(shù)據(jù)結(jié)構(gòu)時,MongoDB是一個不錯的選擇.MongoDB對數(shù)據(jù)結(jié)構(gòu)的更改相對輕松和寬容,這是NoSQL辦理方案的賣點.在MySQL世界中有許多改進使在線模式更改成為可能,只創(chuàng)建記錄而不定義結(jié)構(gòu)增加了MongoDB的靈活性.
選擇MongoDB的另一個原因是它具有設(shè)置復(fù)制環(huán)境,內(nèi)置分片和自動選擇方面的功能.在MongoDB中設(shè)置復(fù)制環(huán)境很容易,自動選擇過程允許從數(shù)據(jù)庫在主數(shù)據(jù)庫故障的情況下接管.內(nèi)置分片允許簡單的橫向擴展.在MySQL環(huán)境中管理,設(shè)置和配置會很復(fù)雜.
什么情況下不能選MongoDB?
對某些用例而言,MongoDB是不錯的選擇,但它也不是萬能的.當數(shù)據(jù)高度關(guān)系化和結(jié)構(gòu)化時,MongoDB就不是最佳選擇.MongoDB不支持事務(wù),但在文檔級別,具有原子性.對于復(fù)制環(huán)境,有關(guān)寫入問題的配置注意事項都是以犧牲性能為代價的.寫入方面將驗證副本是否已寫入信息,默認情況下,MongoDB將寫哀求設(shè)置為僅從主計算機哀求確認,而不是副本.因為如果副本有問題,就會導(dǎo)致一致性問題.
二者結(jié)構(gòu)有何不同?
SQL中的許多概念都與MongoDB的文檔結(jié)構(gòu)相關(guān).讓我們來看一個簡單的MongoDB環(huán)境結(jié)構(gòu),以更好地了解MongoDB的布局.
下面的圖表涉及MySQL與MongoDB的不同點:
除此之外,另一個有趣的地方是mongod進程.這是一個處理數(shù)據(jù)哀求的守護進程,與MySQL的mysqld進程大致相同,是監(jiān)聽MongoDB哀求并管理數(shù)據(jù)庫訪問的進程.和MySQL一樣,mongod進程有很多啟動選項.最重要的配置選項之一是config,它是專門用于mongod實例的配置文件.與MySQL稍有不同,此文件使用YAML格式.下面是MongoDB配置文件示例.請注意,這是演示格式化,它并未針對任何生產(chǎn)數(shù)據(jù)庫進行優(yōu)化.
根據(jù)定義,MongoDB是一個基于分布式文件存儲的數(shù)據(jù)庫.可以立即將文檔插入到集合中,而無需創(chuàng)建表和添加數(shù)據(jù),無需定義結(jié)構(gòu).這是MongoDB與MySQL相比的優(yōu)點之一,更加靈活.要注意,MongoDB提供的這種靈活性并不意味著組織一個功能強大的MongoDB數(shù)據(jù)庫毫不費力.選擇任何數(shù)據(jù)庫,都應(yīng)該考慮數(shù)據(jù)庫的結(jié)構(gòu)和目標.
# mongod.conf, Percona Server for MongoDB
# for documentation of all options, see:
# http://docs.mongodb.org/manual/reference/configuration-options/
# Where and how to store data.
storage:
dbPath: /var/lib/mongodb
journal:
enabled: true
engine: rocksdb
# where to write logging data.
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
processManagement:
fork: true
pidFilePath: /var/run/mongod.pid
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
注意:YAML格式化不處理選項卡,使用空格縮進.
查詢方式有何不同?
通過shell與數(shù)據(jù)庫交互與SQL略有不同,以下是從SQL翻譯為MongoDB的查詢示例,其中使用了一個只有用戶名和相關(guān)ID的用戶表.
In SQL:
select username from user where id = 2;
In MongoDB:
db.user.find({_id:2},{“username”:1})
在JSON格式中,我們指定要查詢的用戶集合,然后指定與我們感興趣的文檔相關(guān)聯(lián)的ID.最后,指定從中獲取值的字段,此查詢結(jié)果將是ID為2的用戶的用戶名.
總結(jié)
MongoDB不是MySQL的影子,也不是MySQL的替代品,隨著兩個數(shù)據(jù)庫的賡續(xù)發(fā)展,它們的優(yōu)劣慢慢融合在一起.MySQL用戶可以在MongoDB上測試各種實例,但不鼓勵盲目追求MongoDB的靈活性.盡管MongoDB在電子商務(wù)和游戲世界是一個受歡迎的選擇,因為它能夠利用大量數(shù)據(jù)進行水平擴展.
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/10210.html