mongo和mysql數據庫中,mongo和mysql區別

本文目錄一覽:

MongoDB和MySQL的區別

a.如果需要將mongodb作為後端db來代替mysql使用,即這裡mysql與mongodb

屬於平行級別,那麼,這樣的使用可能有以下幾種情況的考量:

(1)mongodb所負責部分以文檔形式存儲,能夠有較好的代碼親和性,json格式的直接寫入方便。(如日誌之類)

(2)從data

models設計階段就將原子性考慮於其中,無需事務之類的輔助。開發用如nodejs之類的語言來進行開發,對開發比較方便。

(3)mongodb本身的failover機制,無需使用如MHA之類的方式實現。

這種情況也是不少的,我手上的遊戲就是有nodejs+mongodb的,用戶總量也是千萬級別的,流水什麼還不錯。

b.將mongodb作為類似redis

,memcache來做緩存db,為mysql提供服務,或是後端日誌收集分析。

考慮到mongodb屬於nosql型數據庫,sql語句與數據結構不如mysql那麼親和

,也會有很多時候將mongodb做為輔助mysql而使用的類redis

memcache

之類的緩存db來使用。

亦或是僅作日誌收集分析。

mysql mongodb區別

前言:

MySQL與MongoDB都是開源的常用數據庫,但是MySQL是傳統的關係型數據庫,MongoDB則是非關係型數據庫,也叫文檔型數據庫,是一種NoSQL的數據庫。它們各有各的優點,關鍵是看用在什麼地方。所以我們所熟知的那些SQL語句就不適用於MongoDB了,因為SQL語句是關係型數據庫的標準語言。

一、關係型數據庫-MySQL

1、在不同的引擎上有不同的存儲方式。

2、查詢語句是使用傳統的sql語句,擁有較為成熟的體系,成熟度很高。

3、開源數據庫的份額在不斷增加,mysql的份額頁在持續增長。

4、缺點就是在海量數據處理的時候效率會顯著變慢。

二、非關係型數據庫-MongoDB

非關係型數據庫(nosql ),屬於文檔型數據庫。先解釋一下文檔的數據庫,即可以存放xml、json、bson類型系那個的數據。這些數據具備自述性,呈現分層的樹狀數據結構。數據結構由鍵值(key=value)對組成。

1、存儲方式:虛擬內存+持久化。

2、查詢語句:是獨特的MongoDB的查詢方式。

3、適合場景:事件的記錄,內容管理或者博客平台等等。

4、架構特點:可以通過副本集,以及分片來實現高可用。

5、數據處理:數據是存儲在硬盤上的,只不過需要經常讀取的數據會被加載到內存中,將數據存儲在物理內存中,從而達到高速讀寫。

6、成熟度與廣泛度:新興數據庫,成熟度較低,Nosql數據庫中最為接近關係型數據庫,比較完善的DB之一,適用人群不斷在增長。

三、MongoDB優勢與劣勢

優勢:

1、在適量級的內存的MongoDB的性能是非常迅速的,它將熱數據存儲在物理內存中,使得熱數據的讀寫變得十分快。

2、MongoDB的高可用和集群架構擁有十分高的擴展性。

3、在副本集中,當主庫遇到問題,無法繼續提供服務的時候,副本集將選舉一個新的主庫繼續提供服務。

4、MongoDB的Bson和JSon格式的數據十分適合文檔格式的存儲與查詢。

劣勢:

1、 不支持事務操作。MongoDB本身沒有自帶事務機制,若需要在MongoDB中實現事務機制,需通過一個額外的表,從邏輯上自行實現事務。

2、 應用經驗少,由於NoSQL興起時間短,應用經驗相比關係型數據庫較少。

3、MongoDB佔用空間過大。

mongodb和mysql的區別

數據庫模型

mongodb 非關係行 (文檔型數據庫)提供可擴展的高性能數據存儲

mysql 關係行

存儲方式

mongodb:虛擬內存 持久化

mysql:不同的引擎不同的存儲方式

查詢方式

mongodb獨特的查詢語句

mysql 傳統的sql

mongodb與mysql命令對比 傳統的關係數據庫一般由數據庫(database)、表(table)、記錄(record)三個層次概念組成,

MongoDB是由數據庫(database)、集合(collection)、文檔對象(document)三個層次組成。

MongoDB對於關係型數據庫里的表,但是集合中沒有列、行和關係概念,這體現了模式自由的特點。

Mongodb和mysql的區別

Mongodb和mysql的區別

1.Mongodb簡介及優缺點分析

Mongodb是非關係型數據庫(nosql ),屬於文檔型數據庫。文檔是mongoDB中數據的基本單元,類似關係數據庫的行,多個鍵值對有序地放置在一起便是文檔,語法有點類似javascript面向對象的查詢語言,它是一個面向集合的,模式自由的文檔型數據庫。

存儲方式:虛擬內存+持久化。

查詢語句:是獨特的Mongodb的查詢方式。

適合場景:事件的記錄,內容管理或者博客平台等等。

架構特點:可以通過副本集,以及分片來實現高可用。

數據處理:數據是存儲在硬盤上的,只不過需要經常讀取的數據會被加載到內存中,將數據存儲在物理內存中,從而達到高速讀寫。

成熟度與廣泛度:新興數據庫,成熟度較低,Nosql數據庫中最為接近關係型數據庫,比較完善的DB之一,適用人群不斷在增長。

優點:

快速!在適量級的內存的Mongodb的性能是非常迅速的,它將熱數據存儲在物理內存中,使得熱數據的讀寫變得十分快。高擴展性,存儲的數據格式是json格式!

缺點:

① mongodb不支持事務操作。

② mongodb佔用空間過大。

③ 開發文檔不是很完全,完善。

2.MySQL優缺點分析

優點:

在不同的引擎上有不同 的存儲方式。

查詢語句是使用傳統的sql語句,擁有較為成熟的體系,成熟度很高。

開源數據庫的份額在不斷增加,mysql的份額頁在持續增長。

缺點:

在海量數據處理的時候效率會顯著變慢。

3.Mongodb和MySQL數據庫的對比

傳統的關係數據庫一般由數據庫(database)、表(table)、記錄(record)三個層次概念組成,MongoDB是由數據庫(database)、集合(collection)、文檔對象(document)三個層次組成。

MongoDB對於關係型數據庫里的表,但是集合中沒有列、行和關係概念,這體現了模式自由的特點。

4.MongoDB常用語句

# 連接Mongo數據庫,並設置數據存儲地址

mongod.exe –dbpath “d:softwareMongoDBServer3.0data”

#———————–#1# 數據庫

# 查看所有的數據庫

show dbs

# 刪除當前使用的數據庫

db.dropDatabase()

# 使用這個數據庫(只有插入數據後完成創建數據庫)

use dbt

# 查看當前使用的數據庫

db

db.getName()

# 查看當前數據庫狀態

db.stats()

# 修復當前數據庫

db.repairDatabase()

# 從一個數據庫複製到另一個數據庫

db.copyDatabase(“mydb”, “temp”, “127.0.0.1”);

#———————–#2# 集合

# 查看當前數據庫下所有的集合

show collections

show tables

# 創建名稱為coll集合

db.createCollection(‘coll’)

db.createCollection(“coll2”, {capped:true, autoIndexId:true, size:6142800, max:10000}) # 可選參數

# 查看當前集合狀態

db.coll.stats()

# 刪除名稱為coll集合

db.coll.drop()

#———————–#3# 集合數據

# 插入空數據並且直接創建名稱為coll集合

db.coll.insert({})

# 插入一個或多個數據

db.coll.insert({name:’tom’, age:22})

db.coll.insert([{name:’adam’, age:10},{name:’john’, age:23}])

# 添加數據(save方法可以修改相同id的數據)

db.coll.save({name:’allen’})

# 刪除一個或所有的數據

db.coll.remove({name:’tom’})

db.coll.remove({})

# 刪除符合條件的數據中的第一條

db.coll.remove({name:’tom’}, 1)

# 更改數據

db.coll.update({name:’tom’, age:22}, {$set:{name:’tom’, age:222}})

# 查看數據

db.coll.find()

# 查看一條數據

db.coll.findOne()

db.coll.find({}, {name:1, ‘_id’:0}) # 1表示顯示,0表示不顯示(find默認顯示_id)

# 格式化顯示數據,使數據更加清晰明了

db.coll.find().pretty()

# 使用and,or查看數據

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個

db.coll.find().limit(2).skip(1)

#———————–# # 用戶

# 3.x之後版本添加用戶

use admin

db.createUser({user:’nu’, pwd:’nu’, roles:[{role:’readWrite’,db:’admin’}]})

# 用戶認證

db.auth(“nu”, “nu”);

# 顯示當前所有用戶

show users;

db.system.users.find()

3.x版本刪除用戶

db.removeUser(‘nu’) # 不推薦使用,已經廢棄

db.dropUser(“nu”);

# 當前db版本

db.version();

# 當前db的鏈接機器地址和端口

db.getMongo();

# 備份到備份目錄

mongodump

# 從備份目錄恢復備份語句。

mongorestore

咱們下期見。

MongoDB與MySQL:如何選擇

MongoDB和MySQL分別是領先的開源NoSQL和關係數據庫。哪個最適合您的應用程序?

在1990年代的互聯網泡沫時期,用於Web應用程序的一種通用軟件堆棧是LAMP,它最初代表Linux(OS),Apache(Web服務器),MySQL(關係數據庫)和PHP(服務器編程語言)。MySQL是首選的數據庫,主要是因為它是免費的開源代碼,並且具有良好的讀取性能,非常適合從數據庫動態生成網站的“ Web 2.0”應用程序。

之後,代表MongoDB(文檔數據庫),Express(Web服務器),AngularJS(前端框架)和Node.js(後端JavaScript運行時)的MEAN堆棧開始流行。除其他原因外,MEAN堆棧很有吸引力,因為您需要了解的唯一語言是JavaScript。與等效的LAMP堆棧相比,它還需要更少的RAM。

MySQL AB的Monty Widenius和David Axmark最初於1994年開始開發MySQL。產品名稱中的“ My”是指Widenius的女兒,而不是英語單詞“ my”。MySQL旨在與mSQL(又名Mini)兼容。 SQL),並添加了SQL查詢層和開放源代碼許可(實際上是專有和GPL雙重許可)。MySQL的公共發行版於1996年底開始,並且每年或每兩年持續發行一次。MySQL是當前最受歡迎的關係數據庫。

Sun Microsystems於2008年以10億美元的價格收購了MySQL AB,Oracle於2010年收購了Sun。在Oracle收購MySQL的廣泛關注中,Widenius在收購Oracle之前就將MySQL 5.5合併到了MariaDB中。MariaDB努力維護與Oracle MySQL版本的兼容性。

與功能更強大的商業關係數據庫(例如Oracle數據庫,IBM DB / 2和Microsoft SQL Server)相比,MySQL最初是一個相當低端的關係數據庫,儘管它足以成為動態網站的後備存儲。多年來,它增加了您希望從關係數據庫獲得的大多數功能,包括事務,參照完整性約束,存儲過程,游標,全文索引和搜索,地理索引和搜索以及群集。

儘管MySQL現在支持“大數據庫”功能,例如主從部署,與Memcached一起使用以及水平分片,但它仍通常用於中小型部署。將MySQL擴展到多個從屬服務器可以提高讀取性能,但是只有主服務器才能接受寫請求。

AWS提供了兩種形式的MySQL即服務,即Amazon RDS和Amazon Aurora。後者具有更高的性能,可以處理TB級的數據,更新副本的延遲時間更短,並且可以直接與Oracle數據庫和SQL Server競爭。

MongoDB是高度可伸縮的操作文檔數據庫,可在開源版本和商業企業版本中使用,它可以在本地運行或作為託管雲服務運行。託管雲服務稱為MongoDB Atlas。

MongoDB無疑是NoSQL數據庫中最受歡迎的數據庫。它的文檔數據模型為開發人員提供了極大的靈活性,而其分布式體系結構則提供了很好的可伸縮性。因此,通常選擇MongoDB用於必須管理大量數據,得益於水平可伸縮性並處理不適合關係模型的數據結構的應用程序。

MongoDB是一個基於文檔的存儲,在其之上還具有一個基於圖形的存儲。MongoDB實際上並不存儲JSON:它存儲BSON(二進制JSON),該擴展了JSON表示(字符串)以包括其他類型,例如int,long,date,浮點,decimal128和地理空間坐標。

MongoDB可以使用數據的類型生成正確的索引類型,從而在數據的單個副本上生成多模式圖形,地理空間,B樹和全文本索引。MongoDB使您可以在任何文檔字段上創建索引。MongoDB 4具有多文檔事務,這意味着即使必須標準化數據設計,您仍然可以獲得ACID屬性。

默認情況下,MongoDB使用動態模式,有時稱為無模式。單個集合中的文檔不需要具有相同的字段集,並且字段的數據類型可以在集合中的不同文檔之間有所不同。您可以隨時使用動態模式更改文檔結構。

但是,可以使用架構治理。從MongoDB 3.6開始,MongoDB支持JSON模式驗證,您可以在驗證器表達式中將其打開。

在LAMP和MEAN堆棧上存在很多變化。例如,您可以在Windows(WAMP)或MacOS(MAMP)上運行而不是Linux OS。您可以運行IIS(WIMP),而不是Windows上的Apache Web服務器。

您可以運行PostgreSQL或SQL Server,而不是LAMP堆棧中的MySQL關係數據庫。如果您需要全球分布,則可以運行CockroachDB或Google Cloud Spanner。可以使用Perl或Python代替PHP語言。如果要使用Java或C#進行編碼,則需要考慮單獨的堆棧系列。

您可以運行Couchbase或Azure Cosmos DB以獲得更好的全局分布,而不是MEAN堆棧中的MongoDB文檔數據庫。可以使用十二個Node.js Web服務器框架中的任何一個來代替Express 。除了AngularJS前端框架,您還可以運行Angular 2或React。

選擇數據庫時要問的最重要的問題是:

這些問題中的幾個會趨於縮小數據庫的選擇範圍,但是與制定LAMP堆棧時相比,我們有更多選擇。如果您要構建一個應用程序,並且該應用程序必須在99.999%的時間內對全世界的用戶都具有高度的一致性,那麼只有少數幾個數據庫適合您。如果您的應用程序將在工作日的上午9點至下午6點在一個國家/地區使用,並且可以容忍最終的一致性,那麼幾乎所有數據庫都可以使用,儘管某些數據庫對於開發人員和操作員而言更容易,而某些數據庫則可以為您的主要使用場景提供更好的性能。

雖然LAMP和MEAN堆棧一次是Web應用程序的良好解決方案,但現在都不是最佳選擇。而不是盲目採用任何一種,您應該仔細考慮用例,並找到一種可在可預見的將來為您的應用程序服務的體系結構。

您什麼時候需要關係數據庫(例如MySQL)用於新應用程序?除了對標準SQL的明顯支持外,關係數據庫本身將數據強製為具有一致的強類型字段的表格模式,並且只要您利用規範化就可以幫助您避免數據重複。

另一方面,如果您還需要偶爾的自由格式文檔,則MySQL和許多其他關係數據庫也支持RFC 7159定義的JSON數據。如果您還想使用XML文檔和XPath或XSLT,則大多數關係數據庫都可以提供這種能力。

您何時需要像MongoDB這樣的文檔數據庫?如果您的主要用例需要允許使用自由格式的數據,在文檔之間更改類型的字段,隨時間變化的架構或嵌套的文檔,則NoSQL數據庫將滿足要求。另外,如果您的應用程序是用JavaScript編寫的,那麼文檔數據庫的JSON格式將很自然。

作者: Martin Heller是InfoWorld的特約編輯和審稿人。他曾擔任Web和Windows編程顧問,從1986年至2010年開發數據庫,軟件和網站。最近,他擔任Alpha Software技術和教育副總裁以及Tubifi董事長兼首席執行官。

mongo和mysql索引有什麼不同?

Mongodb和Mysql索引選型

1)首先兩種數據庫都選擇平衡m叉樹作為底層索引結構,因為平衡樹m叉樹是同種元素序列情況下的深度最小的m叉排序樹。這可以減少m叉樹元素查找的深度,從而提昇平均查找效率。B樹和B+樹都是平衡m叉樹。

2)Mongodb選擇B樹為索引結構,Mongodb是典型的非關係行數據庫,設計之初就不會用來做多個遍歷操作,那麼如果要查詢單條數據的話只要進行一次中序遍歷,查到與葉子上數據相同的節點即可。

3)Mysql是典型的關係型數據庫,選擇B+樹的原因是所有再也節點的數據都有前後關係,因為有鏈指針,由於非終結點並不是最終指向文件內容的結點,而只是葉子結點中關鍵字的索引。因此任何關鍵字的查找必須走一條從根結點到葉子結點的路。所有關鍵字查詢的路徑長度相同,導致每一個數據的查詢效率相當,B+樹的查詢效率更加穩定。而且把所有同一內部節點的關鍵字存放在同一盤塊中,這樣磁盤容納的關鍵字數量也越多,一次性讀入內存的需要查找的關鍵字也就越多,相對IO讀寫次數就降低了。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/270645.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-16 13:38
下一篇 2024-12-16 13:38

相關推薦

  • 如何修改mysql的端口號

    本文將介紹如何修改mysql的端口號,方便開發者根據實際需求配置對應端口號。 一、為什麼需要修改mysql端口號 默認情況下,mysql使用的端口號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

    編程 2025-04-29
  • Sublime Test與Python的區別

    Sublime Text是一款流行的文本編輯器,而Python是一種廣泛使用的編程語言。雖然Sublime Text可以用於編寫Python代碼,但它們之間有很多不同之處。接下來從…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字符命令行的語言…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL數據庫 在使用Python操作MySQL之前,我們需要先連接MySQL數據庫。在Python中,我…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟件開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • TensorFlow和Python的區別

    TensorFlow和Python是現如今最受歡迎的機器學習平台和編程語言。雖然兩者都處於機器學習領域的主流陣營,但它們有很多區別。本文將從多個方面對TensorFlow和Pyth…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28

發表回復

登錄後才能評論