mongodb與mysql比較

1.MySQL與MongoDB的操作對(duì)比,以及區(qū)別

MySQL與MongoDB都是開源的常用數(shù)據(jù)庫(kù),但是MySQL是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),MongoDB則是非關(guān)系型數(shù)據(jù)庫(kù),也叫文檔型數(shù)據(jù)庫(kù),是一種NoSQL的數(shù)據(jù)庫(kù)。它們各有各的優(yōu)點(diǎn),關(guān)鍵是看用在什么地方。所以我們所熟知的那些SQL(全稱Structured Query Language)語(yǔ)句就不適用于MongoDB了,因?yàn)镾QL語(yǔ)句是關(guān)系型數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言。

以我們公司項(xiàng)目為例,在早期的項(xiàng)目中,都在使用關(guān)系型數(shù)據(jù)庫(kù),用過SQLServer,Oracle,DB2,后來(lái)全部轉(zhuǎn)向Mysql,原因很簡(jiǎn)單:Mysql在性能不錯(cuò)的情況下,有著開源優(yōu)勢(shì)。Mysql的事務(wù)性與高性能是我們主要考慮的。后來(lái),由于項(xiàng)目要用到用戶系統(tǒng),即會(huì)有大量的用戶數(shù)據(jù)進(jìn)行交互--海量存儲(chǔ),Mysql的讀寫速度會(huì)有一點(diǎn)瓶頸,于是我們就想到了最近發(fā)展很強(qiáng)勢(shì)的Nosql。在Nosql早期的memcache的發(fā)展下,又出現(xiàn)了很多非關(guān)系型數(shù)據(jù)庫(kù),比如redis,mongodb。經(jīng)過一段時(shí)間的測(cè)試,redis與mongodb的讀寫速度確實(shí)比Mysql有著很明顯的優(yōu)勢(shì)。mongodb的寫入速度大約2.5W/次每秒。

mongodb以BSON結(jié)構(gòu)(二進(jìn)制)進(jìn)行存儲(chǔ),對(duì)海量數(shù)據(jù)存儲(chǔ)有著很明顯的優(yōu)勢(shì)。下面是Mongodb與Mysql的操作命令的對(duì)比。
        
        作用              MySQL               MongoDB

    服務(wù)器守護(hù)進(jìn)程         mysqld              mongod

    客戶端工具                mysql                              mongo

    邏輯備份工具          mysqldump           mongodump

    邏輯還原工具          mysql               mongorestore

    數(shù)據(jù)導(dǎo)出工具          mysqldump                     mongoexport

    數(shù)據(jù)導(dǎo)入工具          source              mongoimport

    新建用戶并授權(quán)     grant all privileges on *.*            db.addUser("user","psw")
                        to username@'localhost'            db.auth("user","psw")
                        identified by 'passwd' 
                                                    with grant option;

顯示庫(kù)列表 show databases; show dbs

    進(jìn)去庫(kù)             use dbname;         use dbname

    顯示表列表           show tables;            show collections

    查詢主從狀態(tài)           show slave status;     rs.status

    創(chuàng)建庫(kù)         create database name;          無(wú)需單獨(dú)創(chuàng)建,直接use進(jìn)去

    創(chuàng)建表         create table tname(id int);      無(wú)需單獨(dú)創(chuàng)建,直接插入數(shù)據(jù)

    刪除表         drop table tname;           db.tname.drop()

    刪除庫(kù)         drop database dbname;       首先進(jìn)去該庫(kù),db.dropDatabase()
      
    插入記錄            insert into tname(id) value(2);    db.tname.insert({id:2})

    刪除記錄            delete from tname where id=2;    db.tname.remove({id:2})

    修改/更新記錄     update tname set id=3        db.tname.update({id:2},
                    where id=2;                  {$set:{id:3}},false,true)
                    
    查詢所有記錄   select * from tname;          db.tname.find()

    查詢所有列      select id from tname;        db.tname.find({},{id:1})

    條件查詢    select * from tname where id=2; db.tname.find({id:2})

    條件查詢    select * from tname where id < 2;   db.tname.find({id:{$lt:2}})

    條件查詢    select * from tname where id >=2;   db.tname.find({id:{$gte:2}})

    條件查詢    select * from tname where id=2      db.tname.find({id:2,
                and name='steve';                   name:'steve'})
                
    條件查詢    select * from tname where id=2      db.tname.find($or:[{id:2},
                or name='steve';                    {name:'steve'}])
                                                                                
    條件查詢    select * from tname limit 1;        db.tname.findOne()

    模糊查詢    select * from tname where name      db.tname.find({name:/ste/})
                like "%ste%";

    模糊查詢    select * from tname where name      db.tname.find({name:/^ste/})
                like "ste%";

獲取表記錄數(shù)  select count(id) from tname;        db.tname.count()

    獲取有條件   select count(id) from tname         db.tname.find({id:2}).count()
    的記錄數(shù)    where id=2;

    查詢時(shí)去掉   select distinct(last_name)          db.tname.distinct('last_name')
    重復(fù)值     from tname;

    正排序查詢  select * from tname order by id;          db.tname.find().sort({id:1})

    逆排序查詢  select * from tname  order by        db.tname.find().sort({id:-1})
                id desc;

    取存儲(chǔ)路徑  explain select * from tname          db.tname.find({id=3}).explain()
                where id=3;

    特別要注意的是:mongodb插入多個(gè)字段語(yǔ)法
    > db.user.insert({id:1,name:'steve',sex:'male'})  正確
    > db.user.insert({id:2},{name:'bear'},{sex:'female'})  錯(cuò)誤
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,288評(píng)論 2 89
  • MYSQL 基礎(chǔ)知識(shí) 1 MySQL數(shù)據(jù)庫(kù)概要 2 簡(jiǎn)單MySQL環(huán)境 3 數(shù)據(jù)的存儲(chǔ)和獲取 4 MySQL基本操...
    Kingtester閱讀 8,057評(píng)論 5 115
  • MySQL數(shù)據(jù)庫(kù) 課程目標(biāo):1.如何使用MySQL數(shù)據(jù)庫(kù),主要是講解基本的語(yǔ)法2.如何設(shè)計(jì)數(shù)據(jù)庫(kù)? 第一章 數(shù)據(jù)庫(kù)...
    我愛開發(fā)閱讀 1,402評(píng)論 1 4
  • 背景: 閱讀新聞 12C CDB模式下RMAN備份與恢復(fù) [日期:2016-11-29] 來(lái)源:Linux社區(qū) 作...
    陽(yáng)屯okyepd閱讀 3,835評(píng)論 0 7
  • 1. 流量的時(shí)機(jī) 開卷第一章講的現(xiàn)在大家的流量之困。深有共鳴。 對(duì)流量貴和流量少的問題,這似乎是互聯(lián)網(wǎng)整體流量進(jìn)入...
    金金777閱讀 162評(píng)論 0 1

友情鏈接更多精彩內(nèi)容