MongoDB是现今最火的NoSQL之一,暑假终于有时间把《MongoDB权威指南》和NoSQL Fan上关于它的一些文章浏览了一些,下面我简单总结
MongoDB是现今最火的NoSQL之一,暑假终于有时间把《MongoDB权威指南》和NoSQL Fan上关于它的一些文章浏览了一些,下面我简单总结几点MongoDB吸引人的地方。关于MongoDB的基本操作,运维,使用,大家可以自己去看书或者学习资料。
1. 较之别的NoSQL
《MongoDB: The Definition Guide》一书中说,“要是不能用的话,再牛的技术也是空谈,MongoDB致力于容易上手、便于使用”。前段时间,阿里的一位搞HBase的师兄,春辉,花了两个多小时,深入浅出讲解了HBase的一些东西,感触很深。相比于HBase这样一个基于HDFS的Big Data的实现,它的架构和层次更复杂。而对于Facebook一手捧红而今又不再维护了的Cassandra,难免让人觉得不太promising了。
MongoDB的社区还是相当活跃的。MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全。
MongoDB使用JSON的变种BSON作为内部存储的格式和语法。针对MongoDB的操作都使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现。相对于SQL来说,更加直观,容易理解和掌握。
Schema-less,支持嵌入子文档:MongoDB是一个Schema-free的文档数据库。一个数据库可以有多个Collection,每个 Collection是Documents的集合。Collection和Document和传统数据库的Table和Row并不对等。无需事先定义 Collection,随时可以创建。
CRUD更加简单,支持in-place update:只要定义一个数组,然后传递给MongoDB的insert/update方法就可自动插入或更 新;对于更新模式,MongoDB支持一个upsert选项,即:“如果记录存在那么更新,否则插入”。MongoDB的update方法还支持 Modifier,通过Modifier可实现在服务端即时更新,省去客户端和服务端的通讯。这些modifer可以让MongoDB具有和Redis、 Memcached等KV类似的功能:较之MySQL,MonoDB更加简单快速。Modifier也是MongoDB可以作为对用户行为跟踪的容器。在实际中使用Modifier来将用户的交互行为快速保存到MongoDB中以便后期进行统计分析和个性化定制。
性能高效,速度快: MongoDB使用c++/boost编写,,在多数场合,其查询速度对比MySQL要快的多,对于CPU占用非常小。部署也很简单,对大多数系统,只需下载后二进制包解压就可以直接运行,几乎是零配置。
2. 支持多种复制模式
MongoDB支持不同的服务器间进行复制,包括双机互备的容错方案。Master-Slave是最常见的。通过Master-Slave可以实现数据的备份。在我们的实践中,我们使用的是Master-Slave模式,Slave只用于后备,实际的读写都是从Master节点执行。Replica Pairs/Replica Sets允许2个MongoDB相互监听,实现双机互备的容错。
3. MongoDB内融合的一些东西
MongoDB的shell命令全面支持js,甚至比js多一些类型,而且可以存储js函数和变量。MongoDB自带Mapreduce的功能,只是这个MapReduce功能只支持js语法(函数map和reduce是js写的),且js引擎的实现导致一个实例只能运行一个map/reduce线程。MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。MongoDB不支持事务级别的锁定,对于某些需要自定义的“原子性”操作,可以使用Server side脚本来实 现,此时整个MongoDB处于锁定状态。Map/Reduce也是MongoDB中比较吸引人的特性。Map/Reduce可以对大数据量的表进行统 计、分类、合并的工作,完成原先SQL的GroupBy等聚合函数的功能。并且Mapper和Reducer的定义都是用Javascript来定义服务 端脚本。此外,MongoDB shell下支持的正则表达式是Perl兼容的PCRE。MongoDB支持java驱动,可以结合Python,PHP,Ruby这些脚本语言使用,如PyMongo。
4. GridFS
GridFS用于MongoDB中存储大二文件,基本思想是将将文件文成很多块,每块作为一个单独的文档存储。只要使用./mongofile put filename,文件就会被存在GridFS内,经md5处理,存在MongoDB的fs.files数据库内。GridFS可以应用于存视频,图片,而MongoDB有Sharding和Replica Set的支持,还顺便解决了分布存储的问题,所以很诱惑人。附上一个应用例子: 基于MongoDB GridFS的图片存储
5. 产品的代替和演变
LAMP(linux+apache+mysql+php)是以前web开发中的一盏明灯。而随着web应用规模的扩大,越来越多的Nginx开始取代apache,缓存层将mysql的功能逐渐弱化,越来越多的NoSQL产品以其简单灵活和高性能向MySQL的地位发起挑战,由全新的组合:Unix系列系统,加node.js,再加上MongoDB组成一个新的web开发框架。

InnoDB使用redologs和undologs确保数据一致性和可靠性。1.redologs记录数据页修改,确保崩溃恢复和事务持久性。2.undologs记录数据原始值,支持事务回滚和MVCC。

EXPLAIN命令的关键指标包括type、key、rows和Extra。1)type反映查询的访问类型,值越高效率越高,如const优于ALL。2)key显示使用的索引,NULL表示无索引。3)rows预估扫描行数,影响查询性能。4)Extra提供额外信息,如Usingfilesort提示需要优化。

Usingtemporary在MySQL查询中表示需要创建临时表,常见于使用DISTINCT、GROUPBY或非索引列的ORDERBY。可以通过优化索引和重写查询避免其出现,提升查询性能。具体来说,Usingtemporary出现在EXPLAIN输出中时,意味着MySQL需要创建临时表来处理查询。这通常发生在以下情况:1)使用DISTINCT或GROUPBY时进行去重或分组;2)ORDERBY包含非索引列时进行排序;3)使用复杂的子查询或联接操作。优化方法包括:1)为ORDERBY和GROUPB

MySQL/InnoDB支持四种事务隔离级别:ReadUncommitted、ReadCommitted、RepeatableRead和Serializable。1.ReadUncommitted允许读取未提交数据,可能导致脏读。2.ReadCommitted避免脏读,但可能发生不可重复读。3.RepeatableRead是默认级别,避免脏读和不可重复读,但可能发生幻读。4.Serializable避免所有并发问题,但降低并发性。选择合适的隔离级别需平衡数据一致性和性能需求。

MySQL适合Web应用和内容管理系统,因其开源、高性能和易用性而受欢迎。1)与PostgreSQL相比,MySQL在简单查询和高并发读操作上表现更好。2)相较Oracle,MySQL因开源和低成本更受中小企业青睐。3)对比MicrosoftSQLServer,MySQL更适合跨平台应用。4)与MongoDB不同,MySQL更适用于结构化数据和事务处理。

MySQL索引基数对查询性能有显着影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

MySQL学习路径包括基础知识、核心概念、使用示例和优化技巧。1)了解表、行、列、SQL查询等基础概念。2)学习MySQL的定义、工作原理和优势。3)掌握基本CRUD操作和高级用法,如索引和存储过程。4)熟悉常见错误调试和性能优化建议,如合理使用索引和优化查询。通过这些步骤,你将全面掌握MySQL的使用和优化。

MySQL在现实世界的应用包括基础数据库设计和复杂查询优化。1)基本用法:用于存储和管理用户数据,如插入、查询、更新和删除用户信息。2)高级用法:处理复杂业务逻辑,如电子商务平台的订单和库存管理。3)性能优化:通过合理使用索引、分区表和查询缓存来提升性能。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Atom编辑器mac版下载
最流行的的开源编辑器

Dreamweaver CS6
视觉化网页开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能