展会信息港展会大全

用Mongodb数据库取代Mysql nosql方案
来源:互联网   发布日期:2016-01-27 15:45:56   浏览:3685次  

导读:在项目设计的初期,我当时有了这样的想法,同时也是在满足下面几个条件的情况下来选择最终的nosql方案的: 1、需求变化频繁:开发要更加敏捷,开发成本和维护成本要更低,要能够快速地更新进化,新功能要在最 ...

在项目设计的初期,我当时有了这样的想法,同时也是在满足下面几个条件的情况下来选择最终的nosql方案的:

1、需求变化频繁:开发要更加敏捷,开发成本和维护成本要更低,要能够快速地更新进化,新功能要在最短的周期内上线。

2、客户端/api支持,因为这直接影响开发效率

3、部署简单

4、扩展能力强

5、节省系统资源,对cpu等资源耗费较小

满足这些要求的nosql方案,就剩下了mongodb和redis了,对于redis,我并不是说他不好,而是有一个重要原因,我们的项目的 数据处理格式都是采用JSON的形式来处理的,这一点对于后来两者之间的选择,起到了决定性作用。

当然,Redis对丰富数据类型的操作很吸引人,可以轻松解决一些应用场景,其读写性能也相当高,之前的版本是存储和内存挂钩是挂钩的,这样如 果存储大量的数据需要消耗太多的内存,当然现在的版本已经么有这样的问题了。

MongoDB是一个面向文档的数据库,目前由10gen开发并维护,它的功能丰富,齐全,完全可以替代MySQL。

在我项目实施的过程中,我总结了mongodb的一些很好的亮点:

为什么MongoDB可以替代MySQL?

1、使用JSON风格语法,易于掌握和理解:MongoDB使用JSON的变种BSON作为内部存储的格式和语法。针对MongoDB的操作都 使用JSON风格语法,客户端提交或接收的数据都使用JSON形式来展现。相对于SQL来说,更加直观,容易理解和掌握。这也是根据我自己项目的情况出 发,最后选择了mongodb的一个原因。

2、Schema-less,支持嵌入子文档:MongoDB是一个Schema-free的文档数据库。一个数据库可以有多个 Collection,每个Collection是Documents的集合。Collection和Document和传统数据库的Table和Row 并不对等。无需事先定义Collection,随时可以创建。Collection中可以包含具有不同schema的文档记录。 这意味着,你上一条记录中的文档有3个属性,而下一条记录的文档可以有10个属性,属性的类型既可以是基本的数据类型(如数字、字符串、日期等),也可以 是数组或者散列,甚至还可以是一个子文档(embed document)。这样,可以实现逆规范化(denormalizing)的数据模型,提高查询的速度。

3、简单易用的查询方式:直接使用JSON,支持范围查询、正则表达式查询。

4、CRUD更加简单,支持in-place update:只要定义一个数组,然后传递给MongoDB的insert/update方法就可自动插入或更新;对于更新模式,MongoDB支持一个 upsert选项,即: 如果记录存在那么更新,否则插入 。MongoDB的update方法还支持Modifier,通过Modifier可实现在服 务端即时更新,省去客户端和服务端的通讯。这些modifer可以让MongoDB具有和Redis、Memcached等KV类似的功能:较之 MySQL,MonoDB更加简单快速。Modifier也是MongoDB可以作为对用户行为跟踪的容器。在实际中使用Modifier来将用户的交互 行为快速保存到MongoDB中以便后期进行统计分析和个性化定制

5、所有的属性类型都支持索引,甚至数组:这可以让某些任务实现起来非常的轻松。在MongoDB中, _id 属性是主键,默认 MongoDB会对_id创建一个唯一索引。

6、性能高效,速度快: MongoDB使用c++/boost编写,在多数场合,其查询速度对比MySQL要快的多,对于CPU占用非常校部署也很简单,对大多数系统,只需下 载后二进制包解压就可以直接运行,几乎是零配置。

7、服务端脚本和Map/Reduce:MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也 可以把函数的定义存储在服务端,下次直接调用即可。MongoDB不支持事务级别的锁定,对于某些需要自定义的 原子性 操作,可以使用Server side脚本来实现,此时整个MongoDB处于锁定状态。Map/Reduce也是MongoDB中比较吸引人的特性。Map/Reduce可以对大数 据量的表进行统计、分类、合并的工作,完成原先SQL的GroupBy等聚合函数的功能。并且Mapper和Reducer的定义都是用 Javascript来定义服务端脚本

赞助本站

人工智能实验室

相关热词: Mongodb Mysql 数据库

相关内容
AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港