虽然学了大半个学期的数据库…但是还是很懵逼的…
面试官问我为什么博客是用mongodb而不是其他的…我知道要说mongodb的优点…然而我却说不上来,,扯了两种数据库,然后还说是随便选的QUQ。这个问题应该是小班课的时候看过的QUQ。不过确实没有搞清楚。
目录:
1.关系型数据库和非关系型数据库的区别(优缺点,适用环境)
2.为什么是mongodb
1.关系型
关系型数据库的表是二维表,结构稳定,修改不易。经常需要联表查询。
优点:
1.查询能力高,可以操作很复杂的查询
2.一致性高。由于并发高,在数据同步的时候一般采用锁来保证数据的可靠性(还有时间戳什么的方法),在处理数据的时候对表进行封锁来保证操作的时候其他的操作不能改变当前查询范围内的数据的值。
3.由于表具有逻辑性,易于理解。
既然它现在有些过气了(2333)自然有原因,随着大数据时代的到来,关系型数据库的严谨变得有些不适用:
1.不适用高并发读写
2.不适用海量数据高效读写
3.层次多,扩展性低
4.维护一致性开销大
5.涉及联表查询,复杂,慢
2.非关系型
非关系型数据库主要是使用key-value的方式存储数据的,即是『no relational』,这是『显然』区别于关系型数据库的特点之一。由于数据间没有关联性,相对来说层级扁平。
优点:
1.由于数据之间没有关系,所以易扩展,也易于查询
2.数据结构灵活,每个数据都可以有不同的结构
3.由于降低了一致性的要求,所以查询速度更快
非关系型数据库的产生是因为随着网站的进化,并发性增加,扩展性高,一致性要求降低。这样关系型数据库最重要的一致性维护就显得有点多余,并且消耗着性能。因此有了非关系型数据库,它可以算是关系型数据库的一种弱化的结果,在海量数据存储和查询上更胜一筹。
两种数据库没有好坏之分,只是使用的环境不一样。关系型数据库可以说是更严谨的,可靠性更强的数据库,在对于数据精度要求高的环境,比如说银行系统这样自然是像mysql这样的数据库适合。非关系型数据库胜在处理大数据的速度,但是对于数据的准确度没有那么高,对于操作量大的环境比如当前大部分web2.0的网站更加适用一些。
3.Why mongodb
主要比较下mongodb和redis。
『
MongoDB更类似MySQL,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询JSON数据,能存储海量数据,但是不支持事务。
Mysql在大数据量时效率显著下降,MongoDB更多时候作为关系数据库的一种替代。
内存管理机制
Redis数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的LRU算法删除数据。
MongoDB和mysql一样,只是把索引文件放到内存中。由linux系统mmap实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。
支持的数据结构
Redis支持的数据结构丰富,包括hash、set、list等。
MongoDB数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。
性能
redis更适用于较小数据量的性能及运算
mongodb则在海量数据的访问下性能更优
可靠性
二者均支持持久化。
集群
MongoDB集群技术比较成熟,Redis从3.0开始支持集群。
不适用场景
Ø 需要使用复杂sql的操作
Ø 事务性系统
』
——部分(23333)摘自:http://blog.csdn.net/dodolzg/article/details/43865241
顺便说一点,mongodb更吃内存,因为当mongo发现内存不够的时候,是以2的指数级别来申请内存的。所以一般都建议把mongodb单独放。
其实个可以说redis更像缓存机制,cookie,也可以设定数据的过期时间,当然也可以永久存储(但是好像稍逊色?)。mongodb是文档式的存储,在类似于博客系统这样,可以把每篇博客,包括日期,评论什么的都当做一篇文档来看。这样在博客数据库选择的时候,自然是mongodb更加贴近一些(如果选择非关系型数据库), 也相较于redis更适合永久存储。