mongodb系列01--基础篇

    今年入职花旗,刚进来leader 就交待我去研究mongodb,搭建mongodb分布式集群,之前没有接触过这一块硬着头皮开始学习mongodb。 到现在已经过去4个月了,今天把学习mongodb的过程中的一些知识和体会写下来供大叫参考,当然主要可能还是我自己看。
    关于mongodb集群环境的搭建大家可以看我的另一篇博客,我给出了mongodb测试环境集群的详细地搭建过程,当然也给出了高可用分布式生产环境集群的架构策略。

mongodb系列01--基础篇

因为入职一个月之后新人需要开一个技术演说的session,我的选题就是mognodb的研究,这里我会配合我的PPT进行讲解,这个过程会涉及很多基础的计算机知识,相信大家看了应该是大有帮助
mongodb系列01--基础篇

   MongoDB[1]  是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。类似于json的bson组成---二进制形式的json,MongoDB 文档类似于 JSON 对象 。因此可以存储比较复杂的数据类型。字段值可以包含其他文档,数组及文档数组。

mongodb系列01--基础篇

在mongodb中基本的概念是文档、集合、数据库,下面我们挨个介绍
时间换空间
我们可以对比sql和mongodb来了解一下,在关系型数据库中数据库下的基本单位是table,而在mongodb中是用collection,一行数据对应的是mongodb中的一个文档,这就是为什么我们称mongodb为面向文档的数据库,我们注意到mongodb中不存在表连接的情况,关系型数据库的典型特征是表之间存在关联关系,mongodb不存在这种表连接语句,那么文档之间的一对一地以对多,多对多的情况mongodb可以通过在字段中嵌套一个或多个文档来实现这种关系,我认为这是一种以空间换时间的做法,比如有两张表用户表和商品表,一个用户对应多个商品,假设想要查询一个用户下的所有商品信息,在关系型数据库的查询中需要链表查询join,我们知道join必然会带来很多磁盘随机度的操作,随机读无法像顺序读那样的局部性好,缓存效果不好,反观Mongodb这种Nosql系统中,可以将一个用户的对应的所有商品信息嵌套存入该用户对应的文档的字段里面去,也就是说这些信息都存在一个文档中,局部性很好,这样的虽然磁盘冗余了大量的数据,但却大大加快了查询的速度,从当前计算机的发展来看,空间换时间是很正常的,而计算机最关键的技术高速缓存cache技术就是用空间换时间的典范。
mongodb系列01--基础篇
想到这里其实也给了我一些提示,比如很多人在使用Mysql的过程中查询记录过多,比如2000W条数据的时候,数据库性能就开始下降,Nosql给我们的提示就是可以通过宽表冗余一些数据来实现join,这就是一种空间换时间的做法。

  下面给出mongodb的一些常见的CRUD操作,这些都很简单,可以对比SQL语句看一下

mongodb系列01--基础篇
SQL数据库与mongodb的一个对比
mongodb系列01--基础篇
Mongodb的document
mongodb系列01--基础篇
与table对应的collection
mongodb系列01--基础篇
Insert 操作,如果不指定主键的话mongodb会自动生成_id的字段作为标示,当然也作为主索引的关键字,后面会讲道。
mongodb系列01--基础篇
嵌套的使用
mongodb系列01--基础篇
mongodb系列01--基础篇
mongodb系列01--基础篇
mongodb系列01--基础篇
mongodb系列01--基础篇
mongodb系列01--基础篇