❶ MongoDB 是什麼 能幹嘛
最近在回顧mongodb的相關知識,輸出一篇文章做為MongoDB知識點的總結。
總結的目的在於回顧MongoDB的相關知識點,明確MongoDB在企業級應用中充當的角色,為之後的技術選型提供一個可查閱的信息簡報。
MongoDB是一款為web應用程序和互聯網基礎設施設計的資料庫管理系統。沒錯MongoDB就是資料庫,是Nosql類型的資料庫
(1)MongoDB提出的是文檔、集合的概念,使用BSON(類JSON)作為其數據模型結構,其結構是面向對象的而不是二維表,存儲一個用戶在MongoDB中是這樣子的。
使用這樣的數據模型,使得MongoDB能在生產環境中提供高讀寫的能力,吞吐量較於mysql等SQL資料庫大大增強。
(2)易伸縮,自動故障轉移。易伸縮指的是提供了分片能力,能對數據集進行分片,數據的存儲壓力分攤給多台伺服器。自動故障轉移是副本集的概念,MongoDB能檢測主節點是否存活,當失活時能自動提升從節點為主節點,達到故障轉移。
(3)數據模型因為是面向對象的,所以可以表示豐富的、有層級的數據結構,比如博客系統中能把「評論」直接懟到「文章「的文檔中,而不必像myqsl一樣創建三張表來描述這樣的關系。
SQL類型的資料庫是正規化的,可以通過主鍵或者外鍵的約束保證數據的完整性與唯一性,所以SQL類型的資料庫常用於對數據完整性較高的系統。MongoDB在這一方面是不如SQL類型的資料庫,且MongoDB沒有固定的Schema,正因為MongoDB少了一些這樣的約束條件,可以讓數據的存儲數據結構更靈活,存儲速度更加快。
MongoDB保留了關系型資料庫即時查詢的能力,保留了索引(底層是基於B tree)的能力。這一點汲取了關系型資料庫的優點,相比於同類型的NoSQL redis 並沒有上述的能力。
MongoDB自身提供了副本集能將數據分布在多台機器上實現冗餘,目的是可以提供自動故障轉移、擴展讀能力。
MongoDB的驅動實現一個寫入語義 fire and forget ,即通過驅動調用寫入時,可以立即得到返回得到成功的結果(即使是報錯),這樣讓寫入的速度更加快,當然會有一定的不安全性,完全依賴網路。
MongoDB提供了Journaling日誌的概念,實際上像mysql的bin-log日誌,當需要插入的時候會先往日誌裡面寫入記錄,再完成實際的數據操作,這樣如果出現停電,進程突然中斷的情況,可以保障數據不會錯誤,可以通過修復功能讀取Journaling日誌進行修復。
MongoDB使用分片技術對數據進行擴展,MongoDB能自動分片、自動轉移分片裡面的數據塊,讓每一個伺服器裡面存儲的數據都是一樣大小。
MongoDB核心伺服器主要是通過mongod程序啟動的,而且在啟動時不需對MongoDB使用的內存進行配置,因為其設計哲學是內存管理最好是交給操作系統,缺少內存配置是MongoDB的設計亮點,另外,還可通過mongos路由伺服器使用分片功能。
MongoDB的主要客戶端是可以交互的js shell 通過mongo啟動,使用js shell能使用js直接與MongoDB進行交流,像使用sql語句查詢mysql數據一樣使用js語法查詢MongoDB的數據,另外還提供了各種語言的驅動包,方便各種語言的接入。
mongomp和mongorestore,備份和恢復資料庫的標准工具。輸出BSON格式,遷移資料庫。
mongoexport和mongoimport,用來導入導出JSON、CSV和TSV數據,數據需要支持多格式時有用。mongoimport還能用與大數據集的初始導入,但是在導入前順便還要注意一下,為了能充分利用好mongoDB通常需要對數據模型做一些調整。
mongosniff,網路嗅探工具,用來觀察發送到資料庫的操作。基本就是把網路上傳輸的BSON轉換為易於人們閱讀的shell語句。
因此,可以總結得到,MongoDB結合鍵值存儲和關系資料庫的最好特性。因為簡單,所以數據極快,而且相對容易伸縮還提供復雜查詢機制的資料庫。MongoDB需要跑在64位的伺服器上面,且最好單獨部署,因為是資料庫,所以也需要對其進行熱備、冷備處理。
因為本篇文章不是API手冊,所有這里對shell的使用也是基礎的介紹什麼功能可以用什麼語句,主要是為了展示使用MongoDB shell的方便性,如果需要知道具體的MongoDB shell語法可以查閱官方文檔。
創建資料庫並不是必須的操作,資料庫與集合只有在第一次插入文檔時才會被創建,與對數據的動態處理方式是一致的。簡化並加速開發過程,而且有利於動態分配命名空間。如果擔心資料庫或集合被意外創建,可以開啟嚴格模式
以上的命令只是簡單實例,假設如果你之前沒有學習過任何資料庫語法,同時開始學sql查詢語法和MongoDB 查詢語法,你會發現哪一個更簡單呢?如果你使用的是java驅動去操作MongoDB,你會發現任何的查詢都像Hibernate提供出來的查詢方式一樣,只要構建好一個查詢條件對象,便能輕松查詢(接下來會給出示例),博主之前熟悉ES6,所以入手MongoDB js shell完成沒問題,也正因為這樣簡潔,完善的查詢機制,深深的愛上了MongoDB。
這里引用的是最新的驅動包,提供了一套新的訪問連接方式
這里只舉例了簡單的鏈接與簡單的MongoDB操作,可見其操作的容易性。使用驅動時是基於TCP套接字與MongoDB進行通信的,如果查詢結果較多,恰好無法全部放進第一伺服器中,將會向伺服器發送一個getmore指令獲取下一批查詢結果。
插入數據到伺服器時間,不會等待伺服器的響應,驅動會假設寫入是成功的,實際是使用客戶端生成對象id,但是該行為可以通過配置配置,可以通過安全模式開啟,安全模式可以校驗伺服器端插入的錯誤。
❷ 下面的sql語句對應的MongoDB語句該怎麼寫
創建表插入數據
create table a(序號 int,單位 varchar(10),工作 varchar(10),得分 int,打分 varchar(10)) insert into a values (1,'財務','gz1',100,'黎明')insert into a values (2,'財務','gz2',90,'黎明')insert into a values (3,'財務','gz3',80,'黎明')insert into a values (4,'銷售','gz4',70,'黎明')insert into a values (5,'銷售','gz5',60,'黎明')insert into a values (6,'銷售','gz6',50,'黎明')insert into a values (7,'人事','gz7',40,'黎明')insert into a values (8,'人事','gz8',30,'黎明')insert into a values (9,'人事','gz9',20,'黎明')insert into a values (10,'財務','gz1',88,'趙一')insert into a values (11,'財務','gz2',86,'趙一')insert into a values (12,'財務','gz3',78,'趙一')insert into a values (13,'銷售','gz4',90,'趙一')insert into a values (14,'銷售','gz5',64,'趙一')insert into a values (15,'銷售','gz6',85,'趙一')insert into a values (16,'人事','gz7',90,'趙一')insert into a values (17,'人事','gz8',43,'趙一')insert into a values (18,'人事','gz9',68,'趙一')
執行:
select 單位,工作,sum(case when 打分='黎明' then 得分 else 0 end) 黎明,sum(case when 打分='趙一' then 得分 else 0 end) 趙一from a group by 單位,工作
結果:
❸ mongodb使用場景是什麼
使用場景:
(1)網站數據:MongoDB適合實時的插入,更新與查詢,並具備網站實時數據存儲所需的復制及高度伸縮性。
(2)緩存:由於性能很高,MongoDB也適合作為信息基礎設施的緩存層。在系統重啟之後,由MongoDB搭建的持久化緩存層可以避免下層的數據源過載。
(3)大尺寸,低價值的數據。
(4)高伸縮性的場景:MongoDB適合由數十或數百台伺服器組成的資料庫。
(5)用於對象及JSON數據的存儲:MongoDB的BSON數據格式適合文檔化格式的存儲及查詢。
mongodb設計特點:
(1)面向集合存儲,容易存儲對象類型的數據。在MongoDB 中數據被分組存儲在集合中,集合類似RDBMS 中的表,一個集合中可以存儲無限多的文檔。
(2)模式自由,採用無模式結構存儲。在MongoDB 中集合中存儲的數據是無模式的文檔,採用無模式存儲數據是集合區別於RDBMS 中的表的一個重要特徵。
(3)支持完全索引,可以在任意屬性上建立索引,包含內部對象。MongoDB的索引和RDBMS 的索引基本一樣,可以在指定屬性、內部對象上創建索引以提高查詢的速度。除此之外,MongoDB 還提供創建基於地理空間的索引的能力。
(4)支持查詢。MongoDB 支持豐富的查詢操作,MongoDB 幾乎支持SQL中的大部分查詢。
(5)強大的聚合工具。MongoDB 除了提供豐富的查詢功能外,還提供強大的聚合工具,如count、group 等,支持使用MapRece 完成復雜的聚合任務。
❹ 10個頂級Mongodb GUI工具,以圖形方式管理資料庫
MongoDB是一個面向文檔的資料庫,屬於NoSQL資料庫,它使用類似JSON的文檔和schemata。
MongoDB的默認介面是(CLI)命令行,新用戶很難像專業人員那樣處理資料庫。因此,有一些MongoDB管理工具來提供GUI界面以提高生產力。就像phpmyadmin為MySQL/MariaDB資料庫提供基於HTTP網路的GUI界面一樣。但是,此處包含的所有工具都不是基於HTTP的,只有少數工具為MongoDB提供Web界面。以下是使用GUI的比較流行的MongoDB管理工具列表:
要從具有圖形用戶界面的MongoDB開始,MongoDB是最好的方法之一。MongoDB Compass Community由MongoDB開發人員開發,這意味著更高的可靠性和兼容性。它為MongoDB提供GUI mongodb工具,以 探索 資料庫交互;具有完整的CRUD功能並提供可視方式。藉助內置模式可視化,用戶可以分析文檔並顯示豐富的結構。為了監控伺服器的負載,它提供了資料庫操作的實時統計信息。就像MongoDB一樣,Compass也有兩個版本,一個是Enterprise(付費),社區可以免費使用。適用於Linux,Mac或Windows。
NoSQLBooster是MongoDB CLI界面中非常流行的GUI工具。它正式名稱為MongoBooster。NoSQLBooster是一個跨平台,它帶有一堆mongodb工具來管理資料庫和監控伺服器。這個Mongodb工具包括伺服器監控工具,Visual Explain Plan,查詢構建器,SQL查詢,ES2017語法支持等等......它有免費,個人和商業版本,當然,免費版本有一些功能限制。NoSQLBooster也可用於Windows,MacOS和Linux。
ClusterControl是另一個MongoDB工具,具有管理資料庫基礎結構的GUI。它還有兩個版本 - 社區和企業版。不用說,ClusterControl社區版可以免費使用,而企業則是付費的。它不僅限於MongoDB,還支持MySQL,MySQL復制,MySQL NDB集群,Galera集群,MariaDB,PostgreSQL,TimescaleDB,Docker和ProxySQL。
ClusterControl為資料庫基礎架構提供全自動安全性,該基礎架構具有單個圖形用戶界面,可操作和自動化MongoDB和MySQL資料庫環境。它可通過YUM/APT提供回購,適用於Linux平台(RedHat,Centos,Ubuntu或Debian)。
Nosqlclient是一個免費的開源MongoDB管理工具,基於Web的GUI意味著不再需要命令行來管理資料庫。我們可以使用Nosqlclient在MongoDB中插入,刪除或更新數據,而無需使用查詢。它可作為桌面應用程序,Docker和Web應用程序使用。Web使用HTTP為MOngoDB提供基於瀏覽器的界面。
Robo 3T由MongoDB客戶端Studio 3T的開發人員維護和提供。以前,Robo 3T被稱為Robomongo。它也是適用於Windows,MacOS和Linux的跨平台MongoDB GUI管理工具。它具有相同的引擎和環境,是MongoDB shell(3.2)的一部分。
上面提到的Robomong被3T收購並更名為Robot 3T;現在是Studio 3T的一部分。那麼,Studio 3T是什麼?與其他提到的MongoDB管理GUI工具一樣,Studio 3T也是一個基於GUI的工具,用於管理資料庫,但在付費類別中。但是,此工具的30天免費試用版允許用戶在投入資金之前使用並了解其功能。與免費和開源Robot 3T相比,Studio 3T具有更多功能並提供企業支持。與Robo 3T相同,它也適用於Windows,Linux(Ubuntu和CentOS)和MacOS。
Mongo Management Studio是一個用於資料庫管理的免費MongoDB GUI工具。它輕巧,界面清晰,易於開發基於MongoDB的項目。它使用nodeJs,Electron框架,MongoDB和AngularJs開發。MMS與MongoDB 3.0/3.2/3.4兼容。
與上述所有MongoDB管理工具一樣,用戶可以輕松安裝它,但免費版僅適用於Windows;而企業和個人則適用於Linux,Windows和MacOS。企業版(Web伺服器)支持MongoDB Web界面HTTP GUI,這意味著我們可以在主伺服器上安裝,之後可以在本地或遠程使用瀏覽器的任何系統上訪問。但是,個人版和免費版只能在已安裝它們的本地系統上使用。
它是面向關系,NoSQL和雲平台的資料庫開發人員的通用集成開發環境(IDE)。因此,支持各種資料庫來開發,訪問,管理和可視化分析數據。
對於MongoDB,Aqua Data Studio使用具有管理和資料庫查詢功能的圖形用戶界面作為管理工具。Aqua Data studio的Visual界面允許用戶瀏覽和修改資料庫結構,包括模式對象和集合,以及維護資料庫安全性。
它提供了一個MongoDB資料庫工具包,包括各種工具,如Visual Analytics,MongoSQL查詢參考,MongoJS查詢分析器,MongoShell MongoShell,FluidShell,查詢和分析工具,網格和數據透視圖,表數據編輯器,導入和導出工具,實體關系建模;Visual Query Builder;比較工具:架構比較,文件比較;SQL 歷史 記錄,Open API腳本環境,集成安全Shell(SSH)和版本控制:Subversion(SVN),Git,CVS,Perforce。
MongoJS查詢分析器Javascript編輯器允許執行JavaScript命令並支持自動完成和語法突出顯示。結果可以在樹層次結構,網格結果和文本中看到。
作為付費產品,Aqua Data Studio的試用版提供14天,具有所有企業功能。所以,如果你正在尋找一些付費產品,那麼你可以在花錢之前免費試用它。它適用於Windows,Linux和MacOS。
這聽起來像phpMyAdmin工具。但是,phpMoAdmin也是PHP編寫的但是可用於MongoDB。它基於Vork PHP框架。很輕巧,易於安裝。它只有115KB的moadmin.php文件,用戶可以放在網站的任何地方開始工作。
它是一個跨平台的MongoDB管理工具,在Open Source許可下發布,使用Electron框架和Angular JS構建。可在GitHub上找到。
以上談到了Windows,Linux和MacOS MongoDB管理客戶端,所以那些正在尋找智能手機和平板電腦的用戶mongoDB管理可以試試Mongolime。它為MongoDB移動客戶端提供了輕松連接和訪問MongoDB伺服器的功能。它具有內置的SSH隧道,可以通過SSL輕松驗證和連接遠程伺服器。MongoLime是免費增值MongoDB客戶端應用程序,支持iOS和Android平台。
使用Node.js,Express和Bootstrap3編寫的基於Web的MongoDB管理界面。它允許連接多個資料庫;查看/添加/刪除資料庫,集合和文檔;預覽音頻/視頻/圖像資產;GridFS支持 - 添加/獲取/刪除難以置信的大文件;在文檔中使用BSON數據類型,Mobile / Responsive - Bootstrap以及更多功能。
❺ mongodb 怎麼執行sql
互動式 mongo shell
mongo 127.0.0.1:27017
use test
db.users.findOne()
mongo --eval 運行一段腳本
mongo 127.0.0.1:27017/test --eval "printjson(db.users.findOne())"
在OS命令行下,運行一個js文件
mongo127.0.0.1:27017/test userfindone.js
userfindone.js 的內容:
printjson(db.users.findOne());
在mongo shell 交互模式下,運行一個js文件
mongo test
load("/root/mongojs/userfindone.js")
load() 參數中的文件路徑,既可以是相對路徑,也可以是絕對路徑。
在mongo shell下查看當前工作路徑的方法: pwd( )
當前工作路徑就是我們啟動mongo shell時,當前用戶所處的路徑。
例如:
[root@cgl-centos-dev mongojs]# pwd
/root/mongojs
[root@cgl-centos-dev mongojs]# mongo
MongoDB shell version: 2.6.12
connecting to: test
> pwd()
/root/mongojs
>
MongoDB 查詢數據的語法格式如下:
db.collection.find(query, projection)
query:可選,使用查詢操作符指定查詢條件
projection:可選,使用投影操作符指定返回的鍵。查詢時返迴文檔中所有鍵值, 只需省略該參數即可(默認省略)。
如果你需要以易讀的方式來讀取數據,可以使用 pretty() 方法,語法格式如下:>db.col.find().pretty()
pretty() 方法以格式化的方式來顯示所有文檔
以下實例我們查詢了集合 col 中的數據:
> db.col.find().pretty(){
"_id" : ObjectId("56063f17ade2f21f36b03133"),
"title" : "MongoDB 教程",
"description" : "MongoDB 是一個 Nosql 資料庫",
"by" : "菜鳥教程",
"url" : "http://www.runoob.com",
"tags" : [
"mongodb",
"database",
"NoSQL"
],
"likes" : 100}
除了 find() 方法之外,還有一個 findOne() 方法,它只返回一個文檔。
❻ 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.Database("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();
# 備份到備份目錄
mongomp
# 從備份目錄恢復備份語句。
mongorestore
咱們下期見。
❼ 【mongoDB】mongoDB 常用 js sql操作
1.從一張表中查詢符合條件的數據,復制到另一張臨時表
testSrcCollection為源表
testDestCollection_20211120為臨時表
UNVERIFIED:未激活
INEFFECTIVE:禁用
ACTIVE:激活
SUSPENDED:離職
MongoDB Shell Script操作備忘
https://blog.inhere.top/mongodb-shell-scriptcao-zuo-bei-wang/
為 mongo Shell 編寫腳本
https://www.docs4dev.com/docs/zh/mongodb/v3.6/reference/tutorial-write-scripts-for-the-mongo-shell.html
為MongoDB編寫Js維護腳本
https://zhangshenjia.com/it/mongodb-js
mongo Shell 編寫腳本
http://runoops.com/mongodb-shell-script.html
MongoDB 運行 js 腳本
https://chengchaos.github.io/2020/06/12/mongo-run-script.html
關於mongodb:mongo腳本中的文件寫入操作?
https://www.codenong.com/8971151
mongoDB 寫腳本
https://mongodb-documentation.readthedocs.io/en/latest/tutorial/write-scripts-for-the-mongo-shell.html#gsc.tab=0
❽ 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董事長兼首席執行官。
❾ MongoDB是一個基於分布式文件存儲的資料庫,為WEB應用提供高性能的數據存儲解決方案;
MongoDB是一個介於關系資料庫和非關系資料庫之間的產品,是非關系資料庫當中功能最豐富,最像關系資料庫的。
資料庫是按照數據結構來組織、存儲和管理數據的倉庫,它產生於距今六十多年前,隨著信息技術和市場的發展,特別是二十世紀九十年代以後,數據管理不再僅僅是存儲和管理數據,而轉變成用戶所需要的各種數據管理的方式。資料庫有很多種類型,從最簡單的存儲有各種數據的表格到能夠進行海量數據存儲的大型資料庫系統都在各個方面得到了廣泛的應用。
在信息化社會,充分有效地管理和利用各類信息資源,是進行科學研究和決策管理的前提條件。資料庫技術是管理信息系統、辦公自動化系統、決策支持系統等各類信息系統的核心部分,是進行科學研究和決策管理的重要技術手段。【感興趣的話點擊此處,了解一下】
關於資料庫的相關內容,可以到億萬克官網進行深入的了解,億萬克集伺服器和存儲等數據中心產品的研發、生產、銷售、服務系統整合於一體,是民族高科技製造企業領導品牌 ,所有產品和技術完全擁有自主知識產權,應用領域涵蓋雲計算、數據中心、邊緣計算、人工智慧、金融、電信、教育、能源等,為客戶提供全方位安全自主可控技術服務保障。