MongoDB系列(1)之初识

目前,NoSQL在业界正发展的如火如荼,Google、Yahoo、Facebook、Twitter、Amazon都在大量应用NoSQL数据库,MongoDB是其中十分优秀的一员,它是一个基于分布式文件存储的数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案,在本系列中,我们将对MongoDB做比较详细的介绍。 

在讲MongoDB之前,可能很多人对NoSQL还不是特别的了解,在这一节,让我们先来了解一下NoSQL

 

NoSQL的概念

NoSQL指的是非关系型的数据库,一般理解为“Non-relational”或者“Not Only SQL”。它无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,而且数据之间无关系,不保证关系数据的ACID(原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability))的特性。

为什么要用NoSQL?

传统的关系数据库具有不错的性能,高稳定型,久经历史考验,而且使用简单,功能强大,同时也积累了大量的成功案例。在互联网领域,MySQL成为了绝对靠前的王者,但是随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的社交类型的web2.0纯动态网站已经显得力不从心,在历经Memcached, 主从读写分离,分表分库等措施来缓解数据增长的问题之后,关系型数据库仍然面临着性能的瓶颈。可以说,关系数据库很强大,但是它并不能很好的应付所有的应用场景,而非关系型的数据库则由于其本身的特点可以弥补关系数据在某些方面的不足。

NoSQL数据之间无关系,这样就非常容易扩展。也无形之间,在架构的层面上带来了可扩展的能力。同时NoSQL数据库也具有非常高的读写性能,尤其在大数据量下,同样表现优秀。这得益于它的无关系性,数据库的结构简单。

一般MySQL使用Query Cache,每次表的更新Cache就失效,是一种大粒度的Cache,在针对web2.0的交互频繁的应用,Cache性能不高。而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面上来说就要性能高很多了。另外,NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构。

NoSQL核心思想

CAP,BASE理论是NoSQL数据库存在的基石。

CAP理论

CAP指的是Consistency(一致性)、Availability(可用性)、Tolerance to network Partitions)分区容错性):其中Consistency是说任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的。Availability是说服务能一直保证是可用的状态,当用户发出一个请求,服务能在有限时间内返回结果,Tolerance to network Partitions是说在分布式应用中,有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求。

CAP理论告诉我们,任何分布式系统只可能同时满足二点,没法三者兼顾。架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。下面是一个简单的例子:

两个节点数据冗余,第一个节点先有一个写操作,第二个节点后有一个读操作。下面的图中a是整个过程,要具有一致性的话需要等待a1进行write,然后同步到a2,然后a2再进行write,只有整个事务完成以后,a2才能够进行read。但是这样的话使得整个系统的可用性下降,a2一直阻塞在那里等待a1同步到a2。这个时候如果对一致性要求不高的话,a2可以不等待a1数据对于a2的写同步,直接读取,这样虽然此时的读写不具有一致性,但是在后面可以通过异步的方式使得a1和a2的数据最终一致,达到最终一致性。

BASE理论

BASE理论是CAP理论结合实际的产物。 BASE(Basically Available, Soft-state,Eventuallyconsistent)恰好和ACID是相对的,在英文中BASE有碱的意思,而ACID有酸的意思,意义相对,很有意思。BASE的核心思想是即便不能达到强一致性(Strong consistency),但可以根据应用特点采用适当的方式来达到最终一致性(Eventual consistency)的效果。 

NoSQL简单分类

按照功能来分,NoSQL可以分为:

Key-value 键值存储,键值数据库就像在传统语言中使用的哈希表。你可以通过key来添加、查询或者删除数据,如比较有名的Redis, Memcache等。

Column-oriented 列式存储,通常不支持join操作,与传统关系型数据库的行式存储相比它的存储是列式的,这样会让很多统计聚合操作更简单方便。比较有名的有HBase,Cassandra等。

Document-oriented 文档型存储,通常是将数据存在Json或者Xml,同样不支持join操作。这种存储方式可以很容易地被面向对象的语言所使用。我们后面将要介绍的MongoDB就是文档型数据库,其它的还有CouchDB。

Graph- oriented图形存储,图数据库允许我们将数据以图的方式储存。如Neo4J,Infinite Graph等都是属于这一类。

 

本章首先介绍了什么是NoSQL,以及NoSQL的一些优势,然后介绍了NoSQL的思想以及NoSQL的基本分类。在下章里,我们将开始介绍Mongodb的概念,安装部署以及基本操作。

敬请期待~

posted @ 2017-12-07 11:00  尘封の家  阅读(26)  评论(0)    收藏  举报