MongoDB应用二三事
最近,随着大数据时代的到来,NoSQL数据库作为数据库行业的后起之秀,在短短的几年之间,得到了迅猛的发展,而如今还大有取代RDBMS之势。在众多的NoSQL数据库中,名气最大的莫过于MongoDB了。MongoDB于2009年2月推出第一个版本,至今的5年多时间,其已经发展
最近,随着“大数据时代”的到来,NoSQL数据库作为数据库行业的后起之秀,在短短的几年之间,得到了迅猛的发展,而如今还大有取代RDBMS之势。在众多的NoSQL数据库中,名气最大的莫过于MongoDB了。MongoDB于2009年2月推出第一个版本,至今的5年多时间,其已经发展成为在DB Engine影响力排行世界第5位的数据库。
MongoDB具有以下几个特点:
1) 非结构化的数据结构,保证了适应多种多样的数据类型和形式,无需预先设计数据结构和表模式。
2) 水平扩张,理论上是可以无限扩展的水平扩展性。
3) 多样的功能和平台架构支持,经过其开发团队的自身推进以及Mongo开源社区的蓬勃发展,使得MongoDB支持越来越多的开发语言和大数据架构,同时也不断丰富了他的功能。
而本人作为一个大数据相关的从业人员,在工作中不断地学习MongoDB的知识,我自己也将其运用到了一些实际应用场景当中。
在使用MongoDB的过程中,其性能表现虽然中规中矩,也很好的体现了NoSQL的基本特性,但是实际应用场景之中,MongoDB仍然有不少功能上的不足以及性能上可改进之处。
1. 性能
首先我想谈谈MongoDB的性能表现。作为NoSQL数据库,MongoDB的读写查等许多操作的性能方面自然是领先于RDBMS的,然而在与其他的NoSQL产品比较时,MongoDB其实并没有太大的优势。
根据网上之前公布的一些权威机构的测试结果,MongoDB的性能在众多NoSQL数据库中只能说是一般般。读写性能方面,相比于HBase,MongoDB在少分区下还能基本持平,但是在多分区的情情景下性能表现也只有HBase的1/3甚至1/5。而与这方面的佼佼者Cassandra相比,Mongo在各项对比中,也只能达到Cassandra的1/10甚至更少。
http://planetcassandra.org/nosql-performance-benchmarks
而与存储方式同类的Couchbase相比,MongoDB似乎也不占优势。
http://www.csdn.net/article/2013-04-15/2814886-nosql-benchmark
http://www.couchbase.com/press-releases/couchbase-blows-past-competition-nosql-performance-benchmark
从以上两个测试报告也可以看出,作为NoSQL领军人物的MongoDB,在性能表现上确实差强人意。
2. 功能
2.1 事务
事务作为RDBMS一个非常实用的特性,在处理高可用性高安全性的情景,如企业级的应用时,事务有它独到的优点。
MongoDB并没有事务处理的功能,而在原子性的保证方面,其只能做到单个文档级别,不能支持多文件的原子性。
如今,MongoDB在开源之后应用层也有民间开发的集成了事务功能的组件,但是应用层的实现在数据库的通信上面不能保证性能和可靠性,也就很难提供更专业和完善的支持。
2.2 SQL支持
SQL作为已经使用了几十年的数据库操作语言,不仅在应用上,有着完善多样的接口和驱动,同时,SQL的思维在众多数据库使用者和DBA的脑中已经根深蒂固,想要迅速的改变这种思维方式是困难也没有必要的。所以,NoSQL对于SQL语句的支持也很重要。MongoDB并不具备这样的原生支持,同样,应用层的一些驱动并不能很好的结合数据库本身,完全发挥它的能量。
相反,有许多的同类产品已经提供自带的SQL语句处理,例如通过对接PostgreSQL来实现SQL语句支持,这样能让开发者更快的熟悉和转入NoSQL。
2.3 锁
MongoDB 只有库级粒度的锁,这意味着当 MongoDB 一个写锁处于占用状态时,其它的读写操作都需要等待。虽然因为改动过的锁处理机制让其能保证较高的并发量和高性能(感兴趣可以另外介绍)。
可是基本保证并能完全避免问题,如果数据操作不当,依然会导致长时间占用写锁,比如前台创建索引操作,当出现这种情况的时候,整个数据库就处于完全阻塞状态,无法进行任何读写操作,情况十分严重。
2.4 自动分区
体现MongoDB水平扩展能力的重要一个功能就是自动分区(auto-sharding),然而MongoDB的自动分区在实际应用当中也存在着不少问题。1)在高负载的情况下,MongoDB的自动分区功能会出现不可用或者运行缓慢的情况。2)可以看到网上有不少使用者在系统自动分区后出现数据错误或者数据丢失的情况(最出名的当然是Foursquare的宕机事件)。3)我自己在实际应用中也出现过类似问题,也就是MongoDB在高负载下,出现了数据的丢失,并且还没办法恢复。
2.5 Join
MongoDB不支持Join操作,需要在多个Collection中查找时,不能使用Join将多个Collection合并,只能分别在每个Collection中运行一次存储操作。
3. 安全性
MongoDB的原生数据库系统安全性虽然也是它极力展示的一个特性之一,但是事实上
MongoDB的安全性设计仍有缺陷。首先,MongoDB的默认安全设置为否,这给了很多不熟悉MongoDB特点的新人或是第一次转换NoSQL的企业用户一个非常大的安全隐患。此外,MongoDB也在网上被报道一些安全漏洞或者黑客攻击事件,包括非法数据获取、数据的无故丢失等这些事件究其原因也是安全保障设计的缺陷。
4. 易用性
易用上来说,MongoDB的表现也是中规中矩,虽然可以使用Javascript的Shell工具以及界面化的MMS,但是其操作仍有优化的空间。此外,MongoDB不具备自动安装部署功能。MongoDB的安装部署必须全手动操作,这样不仅比较耗时,对于新手来说可能因为不熟悉而忽略或不能完成一些系统配置的工作,导致安装失败或是使用过程中出现异常。
以上是我个人在实践中发现的MongoDB的几点不足,我认为,MongoDB虽然是作为NoSQL的领军人物在与关系型数据库华山论剑,但是其实他并不完善,所以我希望未来MongoDB自身能做出改进,当然我更希望能有新的数据库产品能后来居上,这样才能加快NoSQL数据库的更快进步。
熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

6月26日消息,在2024年世界行動通訊大會上海(MWC上海)開幕典禮上,中國移動董事長楊傑發表演說。他表示,當前,人類社會正邁入以資訊為主導、資訊和能量深度融合的第四次工業革命,即“數智化革命”,新質生產力加速形成。楊傑認為,從蒸汽機驅動的“機械化革命”,到電力、內燃機等驅動的“電氣化革命”,再到計算機和互聯網等驅動的“信息化革命”,每一輪工業革命都是以“信息和能量」為主線,帶來生產力發

本文介紹如何在Debian系統上配置MongoDB實現自動擴容,主要步驟包括MongoDB副本集的設置和磁盤空間監控。一、MongoDB安裝首先,確保已在Debian系統上安裝MongoDB。使用以下命令安裝:sudoaptupdatesudoaptinstall-ymongodb-org二、配置MongoDB副本集MongoDB副本集確保高可用性和數據冗餘,是實現自動擴容的基礎。啟動MongoDB服務:sudosystemctlstartmongodsudosys

在開發一個電商網站時,我遇到了一個棘手的問題:如何為用戶提供個性化的商品推薦。最初,我嘗試了一些簡單的推薦算法,但效果並不理想,用戶的滿意度也因此受到影響。為了提升推薦系統的精度和效率,我決定採用更專業的解決方案。最終,我通過Composer安裝了andres-montanez/recommendations-bundle,這不僅解決了我的問題,還大大提升了推薦系統的性能。可以通過一下地址學習composer:學習地址

本文介紹如何在Debian系統上構建高可用性的MongoDB數據庫。我們將探討多種方法,確保數據安全和服務持續運行。關鍵策略:副本集(ReplicaSet):利用副本集實現數據冗餘和自動故障轉移。當主節點出現故障時,副本集會自動選舉新的主節點,保證服務的持續可用性。數據備份與恢復:定期使用mongodump命令進行數據庫備份,並製定有效的恢復策略,以應對數據丟失風險。監控與報警:部署監控工具(如Prometheus、Grafana)實時監控MongoDB的運行狀態,並

直接通過 Navicat 查看 MongoDB 密碼是不可能的,因為它以哈希值形式存儲。取回丟失密碼的方法:1. 重置密碼;2. 檢查配置文件(可能包含哈希值);3. 檢查代碼(可能硬編碼密碼)。

CentOS系統下MongoDB高效備份策略詳解本文將詳細介紹在CentOS系統上實施MongoDB備份的多種策略,以確保數據安全和業務連續性。我們將涵蓋手動備份、定時備份、自動化腳本備份以及Docker容器環境下的備份方法,並提供備份文件管理的最佳實踐。手動備份:利用mongodump命令進行手動全量備份,例如:mongodump-hlocalhost:27017-u用戶名-p密碼-d數據庫名稱-o/備份目錄此命令會將指定數據庫的數據及元數據導出到指定的備份目錄。

PiNetwork即將推出革命性移動銀行平台PiBank! PiNetwork今日發布重大更新Elmahrosa(Face)PIMISRBank,簡稱PiBank,它將傳統銀行服務與PiNetwork加密貨幣功能完美融合,實現法幣與加密貨幣的原子交換(支持美元、歐元、印尼盾等法幣與PiCoin、USDT、USDC等加密貨幣的互換)。究竟PiBank有何魅力?讓我們一探究竟! PiBank主要功能:一站式管理銀行賬戶和加密貨幣資產。支持實時交易,並採用生物特

MongoDB與關係型數據庫:深度對比本文將深入探討NoSQL數據庫MongoDB與傳統關係型數據庫(如MySQL和SQLServer)的差異。關係型數據庫採用行和列的表格結構組織數據,而MongoDB則使用靈活的面向文檔模型,更適應現代應用的需求。主要區別數據結構:關係型數據庫使用預定義模式的表格存儲數據,表間關係通過主鍵和外鍵建立;MongoDB使用類似JSON的BSON文檔存儲在集合中,每個文檔結構可獨立變化,實現無模式設計。架構設計:關係型數據庫需要預先定義固定的模式;MongoDB支持
