开篇有益:为什么选择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存储
- schema自由度高
- 更新容易,直接检索困难
- 使用关联表
- schema自由度有限,类型控制
- 更新频繁,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?的更多相关文章
- 2019 年起如何开始学习 ABP 框架系列文章-开篇有益
2019 年起如何开始学习 ABP 框架系列文章-开篇有益 [[TOC]] 本系列文章推荐阅读地址为:52ABP 开发文档 https://www.52abp.com/Wiki/52abp/lates ...
- [转]NHibernate之旅(1):开篇有益
本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 作者注:2009-11-06已更新 NHibernate开篇有益 学习 ...
- 为什么选择MongoDB?
为什么选择MongoDB? 阅读目录 开始 为啥用MongoDB? 原来的架构 新需求 如何解决? 新思路 选型条件 一些候选者 最初的选择 代价 新的候选者 重新选择 胆子大一点 胆子再大一点 胆子 ...
- Nhibernate学习教程(1)-- 开篇有益
NHibernate之旅(1):开篇有益 本节内容 NHibernate是什么 NHibernate的架构 NHibernate资源 欢迎加入NHibernate中文社区 作者注:2009-11-06 ...
- slickgrid ( nsunleo-slickgrid ) 1 开篇有益
slickgrid (nsunleo-slickgrid) 1 开篇有益 作为专职的程序猿,自认为是老菜鸟或老民工,以前一直在某浪上写博客,上知天文,下达地理.做了N年的.net,又转Java,从 ...
- 开篇有益-解析微软微服务架构eShopOnContainers(一)
为了推广.Net Core,微软为我们提供了一个开源Demo-eShopOnContainers,这是一个使用Net Core框架开发的,跨平台(几乎涵盖了所有平台,windows.mac.linux ...
- 跟我学ASP.NET MVC之一:开篇有益
摘要: ASP.NET MVC是微软的Web开发框架,结合了模型-视图-控制器(MVC)架构的有效性和整洁性,敏捷开发最前沿的思想和技术,以及现存的ASP.NET平台最好的部分.它是传统ASP.NET ...
- 大数据时代的数据存储,非关系型数据库MongoDB
在过去的很长一段时间中,关系型数据库(Relational Database Management System)一直是最主流的数据库解决方案,他运用真实世界中事物与关系来解释数据库中抽象的数据架构. ...
- 了解mongodb
本文大纲 基础了解mongodb(mongodb介绍,跟其他nosql区别,跟内存服务器区别等,使用场景) 在使用前,强力建议看哈http://wenku.baidu.com /link?url=lu ...
随机推荐
- luogu3810 【模板】三维偏序(陌上花开)
ref1 ref2 ref3 ref4 #include <algorithm> #include <iostream> #include <cstdio> usi ...
- luogu4169 [Violet]天使玩偶/SJY摆棋子 / bzoj2648 SJY摆棋子 k-d tree
k-d tree + 重构的思想,就能卡过luogu和bzoj啦orz #include <algorithm> #include <iostream> #include &l ...
- Asp.net自定义控件开发任我行(8)-数据集绑定
摘要 已经有好几天没有写博客了,今天继续,前几天写到了注册自定义事件,今天我们来讲数据集绑定. 先把运行效果截个图给大家看,让大家心里也有个底.(大家要从第一章开始看起,我们每一章都是接着前面没做完的 ...
- 设计模式之第4章-装饰模式(Java实现)
设计模式之第4章-装饰模式(Java实现) “怎么了,鱼哥?” “唉,别提了,网购了一件衣服,结果发现和商家描述的差太多了,有色差就算了,质量还不好,质量不好就算了,竟然大小也不行,说好的3个X,邮的 ...
- Leetcode 556.下一个更大元素III
下一个更大元素III 给定一个32位正整数 n,你需要找到最小的32位整数,其与 n 中存在的位数完全相同,并且其值大于n.如果不存在这样的32位整数,则返回-1. 示例 1: 输入: 12 输出: ...
- Leetcode 552.学生出勤记录II
学生出勤记录II 给定一个正整数 n,返回长度为 n 的所有可被视为可奖励的出勤记录的数量. 答案可能非常大,你只需返回结果mod 109 + 7的值. 学生出勤记录是只包含以下三个字符的字符串: ' ...
- alpha(4/10)
目录 摘要 团队部分 个人部分 摘要 队名:小白吃 组长博客:hjj 作业博客:冲刺4 团队部分 后敬甲 过去两天完成了哪些任务 文字描述 主页部分图标的替换 -拍照按钮的设计和测试 GitHub代码 ...
- 浅谈JavaScript中的函数问题
前面的话:JavaScript可运行在所有主要平台的主流浏览器上,也可运行在每一个主流操作系统的服务器端上.所以呢,要想成为一名优秀的全栈工程师,必须懂得JavaScript语言.这是我整理的JS的部 ...
- proteus仿真 引脚显示电平变化但不能显示波形
proteus仿真 引脚显示电平变化但不能显示波形 原来是没有选择通道问题,proteus默认优先使用A通道才会显示波形,如果优先使用B,C,D通道,需要选择...
- POJ 2286 The Rotation Game(IDA*)
The Rotation Game Time Limit: 15000MS Memory Limit: 150000K Total Submissions: 6396 Accepted: 21 ...