① mongodb資料庫有哪些優勢
1. 文檔存儲
數據存儲以BSON/JSON文檔,這對於Web應用程序有很大的意義。開發者API喜歡以JSON形式傳輸,這使得整個項目的數據表示可採用統一的模型。所有這一切都無需任何前期架構設計。
2. 可擴展性
MongoDB被用在一些規模龐大的環境中,FourSquare/Craiglist都在使用它。通過分片數據縮放處理理論上可實現更高的吞吐量。
3. 簡單的復制
就像分片技術一樣,MongoDB范圍內復制過程同樣簡單好用,在副本機器上還有大量的復制選項。靈活的功能可滿足用戶應用的需求。
4. 易於查詢
MongoDB以文檔的形式存儲數據,不支持事務和表連接。因此查詢的編寫、理解和優化都容易得多。簡單查詢設計思路不同於sql模式,嵌入文檔在特定的環境下可得到更好的查詢,然而這需要先加入集合。如果需要執行多個請求到資料庫則需要加入其到客戶端。在MongoDB時ODM工具(如Doctrine2)將發揮自身的優勢。
5. 安全性
由於MongoDB客戶端生成的查詢為BSON對象,而不是可以被解析的字元串,所以可降低受到SQL注入的攻擊的危險。最常見的攻擊類型為針對Web應用程序的攻擊,在MongoDB上使用Doctrine2 ODMs 查詢語言可減輕攻擊風險。
6. 支持
用戶在選擇資料庫時總是喜歡積極和充滿活力的,這點非常重要。MongoDB在業界有非常大的影響力,用戶也會定期的組織活動。MongoDB的標簽在StackOverFlow是非常活躍的。你永遠不會陷入困境,因為總有人與你討論並解決問題。
7. 價格
MongoDB是免費的!
當然遠不止這些優勢,但是也有很多劣勢。
② 談談mongodb,mysql的區別和具體應用場景
MySQL
關系型資料庫。
在不同的引擎上有不同 的存儲方式。
查詢語句是使用傳統的sql語句,擁有較為成熟的體系,成熟度很高。
開源資料庫的份額在不斷增加,mysql的份額頁在持續增長。
缺點就是在海量數據處理的時候效率會顯著變慢。
Mongodb
非關系型資料庫(nosql ),屬於文檔型資料庫。先解釋一下文檔的資料庫,即可以存放xml、json、bson類型系那個的數據。這些數據具備自述性(self-describing),呈現分層的樹狀數據結構。數據結構由鍵值(key=>value)對組成。
存儲方式:虛擬內存+持久化。
查詢語句:是獨特的Mongodb的查詢方式。
適合場景:事件的記錄,內容管理或者博客平台等等。
架構特點:可以通過副本集,以及分片來實現高可用。
數據處理:數據是存儲在硬碟上的,只不過需要經常讀取的數據會被載入到內存中,將數據存儲在物理內存中,從而達到高速讀寫。
成熟度與廣泛度:新興資料庫,成熟度較低,Nosql資料庫中最為接近關系型資料庫,比較完善的DB之一,適用人群不斷在增長。
優勢:
快速!在適量級的內存的Mongodb的性能是非常迅速的,它將熱數據存儲在物理內存中,使得熱數據的讀寫變得十分快,
高擴展!
自身的Failover機制!
json的存儲格式!
Mysql和Mongodb應用場景:
1.如果需要將mongodb作為後端db來代替mysql使用,即這里mysql與mongodb 屬於平行級別,那麼,這樣的使用可能有以下幾種情況的考量:
(1)mongodb所負責部分以文檔形式存儲,能夠有較好的代碼親和性,json格式的直接寫入方便。(如日誌之類)
(2)從data models設計階段就將原子性考慮於其中,無需事務之類的輔助。開發用如nodejs之類的語言來進行開發,對開發比較方便。
(3)mongodb本身的failover機制,無需使用如MHA之類的方式實現。
2.將mongodb作為類似redis ,memcache來做緩存db,為mysql提供服務,或是後端日誌收集分析。 考慮到mongodb屬於nosql型資料庫,sql語句與數據結構不如mysql那麼親和 ,也會有很多時候將mongodb做為輔助mysql而使用的類redis memcache 之類的緩存db來使用。 亦或是僅作日誌收集分析
③ 為什麼MongoDB適合大數據的存儲
Mongo是一個高性能,開源,無模式的文檔型資料庫,它在許多場景下可用於替代傳統的關系型資料庫或鍵/值存儲方式。Mongo使用C++開發,提供了以下功能:
◆面向集合的存儲:適合存儲對象及JSON形式的數據。
◆動態查詢:Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
◆完整的索引支持:包括文檔內嵌對象及數組。Mongo的查詢優化器會分析查詢表達式,並生成一個高效的查詢計劃。
◆查詢監視:Mongo包含一個監視工具用於分析資料庫操作的性能。
◆復制及自動故障轉移:Mongo資料庫支持伺服器之間的數據復制,支持主-從模式及伺服器之間的相互復制。復制的主要目標是提供冗餘及自動故障轉移。
◆高效的傳統存儲方式:支持二進制數據及大型對象(如照片或圖片)。
◆自動分片以支持雲級別的伸縮性(處於早期alpha階段):自動分片功能支持水平的資料庫集群,可動態添加額外的機器。
MongoDB的主要目標是在鍵/值存儲方式(提供了高性能和高度伸縮性)以及傳統的RDBMS系統(豐富的功能)架起一座橋梁,集兩者的優勢於一身。根據官方網站的描述,Mongo適合用於以下場景:
◆網站數據:Mongo非常適合實時的插入,更新與查詢,並具備網站實時數據存儲所需的復制及高度伸縮性。
◆緩存:由於性能很高,Mongo也適合作為信息基礎設施的緩存層。在系統重啟之後,由Mongo搭建的持久化緩存層可以避免下層的數據源過載。
◆大尺寸,低價值的數據:使用傳統的關系型資料庫存儲一些數據時可能會比較昂貴,在此之前,很多時候程序員往往會選擇傳統的文件進行存儲。
◆高伸縮性的場景:Mongo非常適合由數十或數百台伺服器組成的資料庫。Mongo的路線圖中已經包含對MapRece引擎的內置支持。
◆用於對象及JSON數據的存儲:Mongo的BSON數據格式非常適合文檔化格式的存儲及查詢。
自然,MongoDB的使用也會有一些限制,例如它不適合:
◆高度事務性的系統:例如銀行或會計系統。傳統的關系型資料庫目前還是更適用於需要大量原子性復雜事務的應用程序。
◆傳統的商業智能應用:針對特定問題的BI資料庫會對產生高度優化的查詢方式。對於此類應用,數據倉庫可能是更合適的選擇。
◆需要SQL的問題
MongoDB支持OS X、Linux及Windows等操作系統,並提供了Python,PHP,Ruby,Java及C++語言的驅動程序,社區中也提供了對Erlang及.NET等平台的驅動程序。
④ 為什麼MongoDB可以替代MySQL
MongoDB是一個面向文檔的資料庫,目前由10gen開發並維護,它的功能豐富,齊全,完全可以替代MySQL。在使用MongoDB做產品原型的過程中,我們總結了MonogDB的一些亮點:使用JSON風格語法,易於掌握和理解:MongoDB使用JSON的變種BSON作為內部存儲的格式和語法。針對MongoDB的操作都使用JSON風格語法,客戶端提交或接收的數據都使用JSON形式來展現。相對於SQL來說,更加直觀,容易理解和掌握。Schema-less,支持嵌入子文檔:MongoDB是一個Schema-free的文檔資料庫。一個資料庫可以有多個Collection,每個Collection是Documents的集合。Collection和Document和傳統資料庫的Table和Row並不對等。無需事先定義Collection,隨時可以創建。Collection中可以包含具有不同schema的文檔記錄。 這意味著,你上一條記錄中的文檔有3個屬性,而下一條記錄的文檔可以有10個屬性,屬性的類型既可以是基本的數據類型(如數字、字元串、日期等),也可以是數組或者散列,甚至還可以是一個子文檔(embed document)。這樣,可以實現逆規范化(denormalizing)的數據模型,提高查詢的速度。圖1 MongoDB是一個Schema-free的文檔資料庫圖2是一個例子,作品和評論可以設計為一個collection,評論作為子文檔內嵌在art的comments屬性中,評論的回復則作為comment子文檔的子文檔內嵌於replies屬性。按照這種設計模式,只需要按照作品id檢索一次,即可獲得所有相關的信息了。在MongoDB中,不強調一定對數據進行Normalize ,很多場合都建議De-normalize,開發人員可以扔掉傳統關系資料庫各種範式的限制,不需要把所有的實體都映射為一個Collection,只需定義最頂級的class。MongoDB的文檔模型可以讓我們很輕松就能將自己的Object映射到collection中實現存儲。圖2 MongoDB支持嵌入子文檔簡單易用的查詢方式:MongoDB中的查詢讓人很舒適,沒有SQL難記的語法,直接使用JSON,相當的直觀。對不同的開發語言,你可以使用它最基本的數組或散列格式進行查詢。配合附加的operator,MongoDB支持范圍查詢,正則表達式查詢,對子文檔內屬性的查詢,可以取代原來大多數任務的SQL查詢。CRUD更加簡單,支持in-place update:只要定義一個數組,然後傳遞給MongoDB的insert/update方法就可自動插入或更新;對於更新模式,MongoDB支持一個upsert選項,即:「如果記錄存在那麼更新,否則插入」。MongoDB的update方法還支持Modifier,通過Modifier可實現在服務端即時更新,省去客戶端和服務端的通訊。這些modifer可以讓MongoDB具有和Redis、Memcached等KV類似的功能:較之MySQL,MonoDB更加簡單快速。
⑤ redis,mongodb有什麼區別
mongodb:定位是取代關系型資料庫,想當一個主流資料庫。因為他有非結構化、方便擴充欄位、寫性能優於mysql。萬事萬物有利有弊,mongodb的內存型緩存內容,讓其速度飛快,帶來內存率多,掉電數據問題等,加上自身代碼還有很多bug帶來不如老牌關系型資料庫穩定,特別是在主從等分布式環境,其設計也帶來諸多問題。
redis:是一個小而美的資料庫,主要用在key-value 的內存緩存,讀寫性能極佳,list,set,hash等幾種簡單結構使得使用也很簡單。緩存與簡單是其定位,分布式redis架構的出現,讓redis更加廣泛的使用,穩坐緩存第一把交椅。
⑥ mongodb 是把數據放在內存中嗎
mongodb的數據是存儲在硬碟上的,只不過需要經常讀取的數據會被載入到內存中,這樣提高查詢效率,所謂內存數據映射,所以mongodb本身很吃內存,不過3.0版本以後會好很多。
⑦ 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 完成復雜的聚合任務。
⑧ mongodb和redis一樣有內存可以緩存么
你的鏈接我沒看。不能這么比。1、你使用什麼產品,取決於你的目的,業務,內存不是選擇的產品的主要因素;2、資料庫產品有兩類,一種基於內存,一種基於磁碟,Redis是基於內存,MongoDB是基於磁碟,Redis本來就必須是全內存,何來佔用內存過多一說,你應該看你的數據結構,了解Redis的數據結構,看怎麼更高效利用內存你;3、Redis自身是可以限制內存使用的,有參數配置,MongoDB是利用操作系統緩存,也就是他可能會用到操作系統所有內存,這個不是什麼佔用內存,這個是操作系統的機制,你應該假設vps里的所有內存都是給MongoDB使用的。4、自己學習,用什麼產品都可以,但如作為論壇的解決方案,顯然MySQL是更合適的。
作者:Gary Chen
鏈接:https://www.hu.com/question/39260305/answer/82938940
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。
⑨ mongodb的使用原理
所謂「面向集合」(Collection-Oriented),意思是數據被分組存儲在數據集中,被稱為一個集合(Collection)。每個集合在資料庫中都有一個唯一的標識名,並且可以包含無限數目的文檔。集合的概念類似關系型資料庫(RDBMS)里的表(table),不同的是它不需要定義任何模式(schema)。Nytro MegaRAID技術中的快閃記憶體高速緩存演算法,能夠快速識別資料庫內大數據集中的熱數據,提供一致的性能改進。
模式自由(schema-free),意味著對於存儲在mongodb資料庫中的文件,我們不需要知道它的任何結構定義。如果需要的話,你完全可以把不同結構的文件存儲在同一個資料庫里。
存儲在集合中的文檔,被存儲為鍵-值對的形式。鍵用於唯一標識一個文檔,為字元串類型,而值則可以是各種復雜的文件類型。我們稱這種存儲形式為BSON(Binary Serialized Document Format)。
MongoDB已經在多個站點部署,其主要場景如下:
1)網站實時數據處理。它非常適合實時的插入、更新與查詢,並具備網站實時數據存儲所需的復制及高度伸縮性。
2)緩存。由於性能很高,它適合作為信息基礎設施的緩存層。在系統重啟之後,由它搭建的持久化緩存層可以避免下層的數據源過載。
3)高伸縮性的場景。非常適合由數十或數百台伺服器組成的資料庫,它的路線圖中已經包含對MapRece引擎的內置支持。
不適用的場景如下:1)要求高度事務性的系統。
2)傳統的商業智能應用。
3)復雜的跨文檔(表)級聯查詢。
⑩ MongoDB和MySQL的區別
一、
1、基於分布式文件存儲
2、高負載情況下添加更多節點,可以保證伺服器性能
3、將數據存儲為一個文檔
二、比較
1、穩定性
2、索引,索引放在內存中,能夠提升隨機讀寫的性能。如果索引不能完全放在內存,一旦出現隨機讀寫比較高的時候,就會頻繁地進行磁碟交換,MongoDB的性能就會急劇下降
3、佔用的空間很大,因為它屬於典型空間換時間原則的類型。那麼它的磁碟空間比普通資料庫會浪費一些,而且到目前為止它還沒有實現在線壓縮功能,
在MongoDB中頻繁的進行數據增刪改時,如果記錄變了,例如數據大小發生了變化,這時候容易產生一些數據碎片,出現碎片引發的結果,
一個是索引會出現性能問題,
另外一個就是在一定的時間後,所佔空間會莫明其妙地增大,所以要定期把資料庫做修復,定期重新做索引,這樣會提升MongoDB的穩定性和效率。
在最新的版本里,它已經在實現在線壓縮,估計應該在2.0版左右,應該能夠實現在線壓縮,可以在後台執行現在repair DataBase的一些操作。如果那樣,就解決了目前困擾
我們的大問題。
4、MongoDB對數據間的事務關系支持比較弱
5、運維不方便
MongoDB的優勢
1. 適合那些對資料庫具體數據格式不明確或者資料庫數據格式經常變化的需求模型,而且對開發者十分友好。
2.自帶一個分布式文件系統,可以很方便地部署到伺服器機群上。
MongoDB里有一個Shard的概念,就是方便為了伺服器分片使用的。每增加一台Shard,MongoDB的插入性能也會以接近倍數的方式增長,磁碟容量也很可以很方便地擴充。
3. 自帶了對map-rece運算框架的支持,這也很方便進行數據的統計。類似於group by