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)

70B模型,秒出1000token,换算成字符接近4000!研究人员将Llama3进行了微调并引入加速算法,和原生版本相比,速度足足快出了快了13倍!不仅是快,在代码重写任务上的表现甚至超越了GPT-4o。这项成果,来自爆火的AI编程神器Cursor背后团队anysphere,OpenAI也参与过投资。要知道在以快着称的推理加速框架Groq上,70BLlama3的推理速度也不过每秒300多token。 Cursor这样的速度,可以说是实现了近乎即时的完整代码文件编辑。有人直呼好家伙,如果把Curs

6月26日消息,在2024年世界移动通信大会上海(MWC上海)开幕式上,中国移动董事长杨杰发表演讲。他表示,当前,人类社会正迈入以信息为主导、信息和能量深度融合的第四次工业革命,即“数智化革命”,新质生产力加速形成。杨杰认为,从蒸汽机驱动的“机械化革命”,到电力、内燃机等驱动的“电气化革命”,再到计算机和互联网等驱动的“信息化革命”,每一轮工业革命都是以“信息和能量”为主线,带来生产力发

本文介绍如何在Debian系统上配置MongoDB实现自动扩容,主要步骤包括MongoDB副本集的设置和磁盘空间监控。一、MongoDB安装首先,确保已在Debian系统上安装MongoDB。使用以下命令安装:sudoaptupdatesudoaptinstall-ymongodb-org二、配置MongoDB副本集MongoDB副本集确保高可用性和数据冗余,是实现自动扩容的基础。启动MongoDB服务:sudosystemctlstartmongodsudosys

您的iPhone上没有加载应用程序?如果一个应用程序需要很长时间才能加载,这是不正常的。除了仍处于测试阶段的应用程序外,当您在iPhone上打开它们时,它们应该会立即加载。除了一些重度游戏外,如果您手机上的所有应用程序加载缓慢或根本无法加载,您应该按照以下步骤进行修复。修复1–更新应用程序(如果适用)有一段时间没有更新应用程序了吗?将其更新到最新版本应该可以解决这个问题。步骤1–打开AppStore。步骤2–只需开始在搜索框中键入应用程序的名称,然后直接从建议中打开应用程序。第3步–点击以转到特

本文介绍如何在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/备份目录此命令会将指定数据库的数据及元数据导出到指定的备份目录。

MongoDB与关系型数据库:深度对比本文将深入探讨NoSQL数据库MongoDB与传统关系型数据库(如MySQL和SQLServer)的差异。关系型数据库采用行和列的表格结构组织数据,而MongoDB则使用灵活的面向文档模型,更适应现代应用的需求。主要区别数据结构:关系型数据库使用预定义模式的表格存储数据,表间关系通过主键和外键建立;MongoDB使用类似JSON的BSON文档存储在集合中,每个文档结构可独立变化,实现无模式设计。架构设计:关系型数据库需要预先定义固定的模式;MongoDB支持
