php - 什么应用场景考虑用mongdb?

查看:104
本文介绍了php - 什么应用场景考虑用mongdb?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

mysql和redis现用的很好很熟练,什么场景下我应该舍弃这些工具,转而考虑用mongo去存储数据?

另外:
目前在探索存储文章类型的数据,文章内容的样式化需要保存,又不破坏检索工具对内容的检索能力,性能也得过的去,我需要一套良好的解决方案,对于数据库的特性和比较我自己肯定是会提前查过资料的,所以答案不是单纯的比较数据库特性,我的实际问题可能偏向于实战和经验。

做过日订单百万的APP后台,用的Mysql和Redis,对于一般问题MySQL和Redis都可以支撑,有什么理由或场景会逼我或推荐我去用mongo呢,mongo灵活的数据类型存储,我目前只想到日志的存储用mongo比较好。文章类的网站我新手开发,需要经验指引,先谢谢

解决方案

可以从MongoDB的几大优势来看为什么使用它:

  1. 动态数据模型

  2. 水平扩展

  3. 高可用

你已经注意到数据模型的问题了,但是还没发现它的强大。可以说MongoDB的用户有很多是冲着这点去的。举个常见的例子,同样是一件产品,你有CPU内存硬盘,我有颜色尺码款式,你试着用关系模型描述看看是什么样子。这只是一个最初级的例子,企业用户会遇到比这复杂百倍的问题。历史数据,从不同公司购买的系统,不同部门收集到的数据……一个大公司中查一个客户的信息登录十几个系统是再平常不过的事情了。MongoDB常常被用于整合这些异构的数据中,这就是动态模型的威力。
水平扩展。这个数据爆炸的年代搞个上千万数据似乎不是什么难事。MySQL支撑千万数据已经开始吃力。如果有上亿怎么办?10亿怎么办?分库分表?程序复杂度要怎么办?异地多读多写的应用又怎么部署?不妨看一下MongoDB的分片原理。
高可用。现在的老板一言不合就要7x24,SLA要4条9,你准备怎么办?请参考MongoDB复制集解决方案。
最重要的,上面这些功能只需要简单的配置就能实现。我不是说里面没有坑,任何一项技术都有坑,这就是为什么我们需要经验
任何技术都有其适合和不适合的地方,所以看到诸如"Should Never"之类的字眼,或者有哪篇文章胆敢说"Should Always",我都是给你个眼神自己体会的态度。作为技术人员应该更客观一些看待问题。

EDIT

因为下面已经有人@java_c 表达了明确的反对意见,所以在这里再多说两句。我的观点在上面最后一段已经表达得很明确了,再强调一遍:任何技术都有其适合和不适合的地方,作为技术人员应该更客观一些看待问题。。如果做不到这点,那我们也没有讨论的基础了。
不懂为什么要扯年不年轻的问题,MongoDB大约有8年历史了,但是跟RDBMS的几十年来比,毫无疑问是一项年轻的技术,所以这个为论据想要说明什么问题呢?年轻的技术就没有存在的必要了?就一无是处了?
为什么用JSON和JS语法做查询语言而不用SQL,你归结为一个蹩脚的查询语言,为了不用SQL,以下是wikipedia对SQL的解释:

SQL (Listeni/ˈɛs kjuː ˈɛl/,[4] or Listeni/ˈsiːkwəl/;[5] Structured Query Language68) is a special-purpose programming language designed for managing data held in a relational database management system (RDBMS), or for stream processing in a relational data stream management system (RDSMS).

明白了吗?要求一个NoSQL数据库去用SQL做原生查询语言还觉得理所当然?虽然不想做更多的解释,但是我想你接下来又要提Pig Latin了。即便这样,它无非是一个SQLMap/Reduce的转换器而已。你要类似的东西MongoDB也有,请看BI Connecter的相关资料。请把表面和本质分清楚,不用SQL的深层理由还是在暗示不要用SQL的思路来使用NoSQL
最后,你所说的乱七八糟瞎折腾也正在我想对你现在这个回答的总结。

最后补充一次

Journal是1.8就支持,2.0就默认开启的防异常中断措施。那大概是5、6年前的事了吧,怎么会到现在还在纠结5、6年前就不该纠结的问题……
一直在说客观地看待问题,RDBMS几十年的发展在你眼中就一无是处吗?所以NoSQL支持一些RDBMS的特性有什么问题?要么一棍子打死这个,要么一棍子打死那个,能不能公正客观一点?
拿wikipedia的引用只是在说……再把上面的黑体字读一遍。一会在说NoSQL不应该走RDBMS的老路,一会在说NoSQL应该支持SQL查询,对你这种摇摆不定的观点我也不知道从何说起了。
关于数据结构,怎么会大多数数据都有结构这种看法?我从来都没发现这个世界原来是这么标准化的吗?反正在我个人看来,范式化才是不符合这个世界的本质的,虽然它能工作。牛顿第一定律也能工作,还要搞什么相对论和量子物理。
最后说说这个模式设计的问题,个人从来都不认为把所有东西揉进一个JSON就是MongoDB提倡的模型。为了反范式而反范式这模型设计的大忌(同样用范式化来设计NoSQL模型也是大忌),要知道怎么设计一个数据模型,请移步data schema design或者多参与社区活动和讨论,或者……老板买个全套服务让原厂上门服务讲解一下吧……

这篇关于php - 什么应用场景考虑用mongdb?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆