为什么选择MongoDB?

为啥用MongoDB?

赶NoSQL时髦? 
Auto-shard等激动人心的特性? 
•No! 08年,还都是浮云。 
最初的想法是寻找一个可靠的分布式K/V解决MySQL的问题。

NoSQL(NoSQL = Not Only SQL ),意即反SQL运动,是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于目前铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

所以说,NoSQL不仅仅是产品,更是一项运动!

原来的架构

•MySQL(Percona),

Master-Master-Slaves

•HA:MMM

新需求

  • 能够适应多数据源
  • 需要灵活,不确定的schema:不同模型的字段不定,属性不定
  • 属性更新频繁
  • 服务器等硬件资源有限

如何解决?

原有MySQL的方案:

  • 使用文本字段,JSON存储
  1. schema自由度高
  2. 更新容易,直接检索困难
  • 使用关联表
  1. schema自由度有限,类型控制
  2. 更新频繁,query缓存失效

新思路

继续使用Memcached?

  • 缓存失效,内存不足

决定:寻找Memcached替代品

  • 能够持久化的分布式KV

选型条件

  • 同时有PHP/Perl/DotNet/JAVA的良好客户端支持
  • 性能和Memcached相差不要太
  • 支持分布式集群
  • 低碳环保,节约资源
  • 文档清晰,有成功案例

一些候选者

  • Flare
  • Repcached
  • Redis
  • TC/TT

最初的选择

选中Flare:

  • 内置cluster看起来很美好,可靠性有保 
  • 使用Memcached协议,现有改动小

代价

项目开发1个月后:

  • 官方更新显示似乎并非如此可靠
  • 水土不服:

(1)个人能力有限,无法解决一些灵异事件

(2)没有开发者社区

(3)不懂日文

新的候选者

  • Cassandra:技术实力无法支撑,用不起
  • CouchDB:灵活,但性能口碑似乎不佳

重新选择

MongoDB:

  • 读写性能中庸,比Redis逊色
  • Document模型令人满意
  • 内置操作没有Redis惊喜,基本够用
  • MySQL类似的集群机制,上手方便
  • 某些MySQL的优化部署经验可以复用

胆子大一点

MySQL +MongoDB?

  • 多余:很多MySQL的操作MongoDB均 
    可实现
  • 同时维护MySQL <=> MongoDB 的数 
    据,代码逻辑有些复杂
  • 人员流失,培训新人表示鸭梨大

胆子再大一点

能否彻底抛弃MySQL?

  • Transaction?可以没有
  • Joins? 原本少用,可以没有
  • 数据一致性:不太高

胆子再更大一点

好吧,试试:

  • 拿一个旧项目开刀
  • 1人1个星期完成90%代码移植
  • 原有35个table => 10 collection
  • 开发过程很happy!

MongoDB,就是它了

一举两得的加分项:GridFS

  • 简单,符合我们的要求
  • 无需再考虑分布文件系统
  • 放弃了原来的MogileFS,减轻运维压 

综上原因,选对了!

  • SourceForge等一些大站应用增强信心
  • 分享的信息逐渐丰富
  • 10gen核心团队在mailing-list快速响应, 
    有问必答
  • NoSQL开始受到追捧,MongoDB的口 
    碑良好

本文参收集网络资料整理,作为我选择MongoDB的一个参考。

为什么选择MongoDB?的更多相关文章

  1. 开篇有益:为什么选择MongoDB?

    为啥用MongoDB? 赶NoSQL时髦? Auto-shard等激动人心的特性? •No! 08年,还都是浮云. 最初的想法是寻找一个可靠的分布式K/V解决MySQL的问题. NoSQL(NoSQL ...

  2. 大数据时代的数据存储,非关系型数据库MongoDB

    在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构. ...

  3. 了解mongodb

    本文大纲 基础了解mongodb(mongodb介绍,跟其他nosql区别,跟内存服务器区别等,使用场景) 在使用前,强力建议看哈http://wenku.baidu.com /link?url=lu ...

  4. MongoDB自学笔记2---1.2 初识MongoDB

    1.2.1MongoDB简介 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.旨在为WEB应用提供可扩展的高性能数据存储解决方案. MongoDB是一个介于关系数据库和非关系数据库之 ...

  5. 大数据时代的数据存储,非关系型数据库MongoDB(一)

    原文地址:http://www.cnblogs.com/mokafamily/p/4076954.html 爆炸式发展的NoSQL技术 在过去的很长一段时间中,关系型数据库(Relational Da ...

  6. Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程

    Asp.Net Core Web Api图片上传及MongoDB存储实例教程(一) 图片或者文件上传相信大家在开发中应该都会用到吧,有的时候还要对图片生成缩略图.那么如何在Asp.Net Core W ...

  7. 非关系型数据库MongoDB

    爆炸式发展的NoSQL技术 在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来 ...

  8. MongoDB拥有SSD秒杀高富帅使用过程分享

    [IT168现场报道]2013年4月18-20日,第四届中国数据库技术大会(DTCC 2013)在北京福朋喜来登酒店拉开序幕.在为期三天的会议中,大会将围绕大数据应用.数据架构.数据管理(数据治理). ...

  9. HowToDoInJava 其它教程 1 &#183; 翻译完成

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 Maven 教程 如何在 ...

随机推荐

  1. 题目1380:lucky number

    转载请注明文本链接 http://blog.csdn.net/yangnanhai93/article/details/40441709 题目链接地址:http://ac.jobdu.com/prob ...

  2. Fileupload-1.2.1使用简单样例

    在測试本例至少须要在web程序的WEB-INF/lib下包括commons-fileupload- 1.2.1和commons-io-1.3.2两个类库. fileupload.jsp <%@ ...

  3. NET MVC中使用FluentValidation

    ASP.NET MVC中使用FluentValidation验证实体   1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion ...

  4. .Net 2.0实例学习:WebBrowser页面与WinForm交互技巧

    原文:.Net 2.0实例学习:WebBrowser页面与WinForm交互技巧 最近看到博客园入门教学文章比较流行,自己最近又偷懒比较多,没啥心得,不妨写一篇没啥深度的入门文章吧. 话说有了WebB ...

  5. c# 数据类型转换 as(C# 参考)

    as    运算符类似于强制转换操作.               但是,因此,如果转换是不可能的,as 返回 null 而不引发异常.  请看下面的示例: expression is type ? ...

  6. Facebook Hack 语言 简介

    1. Hack 是什么? Hack 是一种基于HHVM(HipHop VM 是Facebook推出的用来执行PHP代码的虚拟机,它是一个PHP的JIT编译器,同时具有产生快速代码和即时编译的优点.)的 ...

  7. 《全体育&#183;瑜伽》

    今天出去吃饭,本来是想买<印象>创刊号的,结果没找着,看到一本<瑜伽>创刊号.作为一个伪瑜伽爱好者,我掏了20元大洋买了一本,你知道如今的时尚杂志都非常坏,用塑料膜封着,不能翻 ...

  8. Linux server关闭自己主动

    公司linux server发生错误.mysql server没有理由关闭,我找不到理由.Version: '5.6.13-enterprise-commercial-advanced' socket ...

  9. SQL常规查询详解

    一.交叉连接(cross join) 交叉连接(cross join):有两种,显式的和隐式的,不带on子句,返回的是两表的乘积,也叫笛卡尔积. 例如:下面的语句1和语句2的结果是相同的. 语句1:隐 ...

  10. TDD(测试驱动开发)

    TDD(测试驱动开发)培训录 2014年我一直从事在敏捷实践咨询项目,这也是我颇有收获的一年,特别是咨询项目的每一点改变,不管是代码质量的提高,还是自组织团队的建设,都能让我们感到欣慰.涉及人的问题都 ...