为啥用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. 2019 年起如何开始学习 ABP 框架系列文章-开篇有益

    2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/lates ...

  2. [转]NHibernate之旅(1):开篇有益

    本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 作者注:2009-11-06已更新 NHibernate开篇有益 学习 ...

  3. 为什么选择MongoDB?

    为什么选择MongoDB? 阅读目录 开始 为啥用MongoDB? 原来的架构 新需求 如何解决? 新思路 选型条件 一些候选者 最初的选择 代价 新的候选者 重新选择 胆子大一点 胆子再大一点 胆子 ...

  4. Nhibernate学习教程(1)-- 开篇有益

    NHibernate之旅(1):开篇有益 本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 作者注:2009-11-06 ...

  5. slickgrid ( nsunleo-slickgrid ) 1 开篇有益

    slickgrid (nsunleo-slickgrid)  1 开篇有益  作为专职的程序猿,自认为是老菜鸟或老民工,以前一直在某浪上写博客,上知天文,下达地理.做了N年的.net,又转Java,从 ...

  6. 开篇有益-解析微软微服务架构eShopOnContainers(一)

    为了推广.Net Core,微软为我们提供了一个开源Demo-eShopOnContainers,这是一个使用Net Core框架开发的,跨平台(几乎涵盖了所有平台,windows.mac.linux ...

  7. 跟我学ASP.NET MVC之一:开篇有益

    摘要: ASP.NET MVC是微软的Web开发框架,结合了模型-视图-控制器(MVC)架构的有效性和整洁性,敏捷开发最前沿的思想和技术,以及现存的ASP.NET平台最好的部分.它是传统ASP.NET ...

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

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

  9. 了解mongodb

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

随机推荐

  1. CSS中behavior属性语法简介

    本文和大家重点讨论一下CSS中behavior属性语法的使用,在进行CSS网页布局的时候,我们经遇到刷新要保留表单里内容的时候,习惯的做法使用cookie,但是那样做实在是很麻烦,CSS中的behav ...

  2. 【Sudoku Solver】cpp

    题目: Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated b ...

  3. 【NOIP 2017 普及组】 跳房子

    裸的单调队列优化dp+二分 我居然还调了挺久 日常审题错误 #include <bits/stdc++.h> using namespace std; typedef long long ...

  4. Python-S9-Day99——Web前端框架之Vue.js

    01课程安排 02let和const: 03 箭头函数 04 对象的单体模式 05 Node.js介绍和npm操作 06 Webpack,babel介绍和Vue的第一个案例 01课程安排 1.1 ht ...

  5. STL之vector使用简介

    Vector成员函数 函数 表述 c.assign(beg,end)c.assign(n,elem) 将[beg; end)区间中的数据赋值给c.将n个elem的拷贝赋值给c. c.at(idx) 传 ...

  6. [oldboy-django][5python基础][内置函数]zip

    python3中,把两个或两个以上的迭代器封装成生成器,在循环遍历生成器中,不断产生元组. 如果提供的迭代器长度不对等,生成器的长度为最短迭代器的长度. # coding= utf-8 # zip 多 ...

  7. 函数的apply、call方法和length属性

    函数的apply.call方法和length属性JavaScript为函数对象定义了两个方法:apply和call,它们的作用都是将函数绑定到另外一个对象上去运行,两者仅在定义参数的方式有所区别:Fu ...

  8. Junit单元测试--01

    如何编写单元测试 燕双龙 一 单元测试简介 单元测试是代码正确性验证的最重要的工具,也是系统测试当中最重要的环节.也是唯一需要编写代码才能进行测试的一种测试方法.在标准的开发过程中,单元测试的代码与实 ...

  9. HTML5与HTML4的比较

    HHTML5封装一些标签和属性,方便了开发. <form> <p> <label>Username:<input name="search" ...

  10. 【Luogu】P4067储能表(数位DP)

    题目链接 好的 看到这题之后我一直在想反演,然后想不出来,一度以为自己脑子有问题 然后我脑子真的有问题,这题tm根本就不是反演 设f[i][j][k][l]表示现在已经DP到从高位往低数的第i位,有没 ...