当前位置:Gxlcms > 数据库问题 > MongoDB入门篇

MongoDB入门篇

时间:2021-07-01 10:21:17 帮助过:18人阅读

,是Carlo Strozzi开发的一个轻量、开源、不提供SQL功能的关系数据库。

  2009,Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL的概念,这时的NoSQL主要指非关系型、分布式、不提供ACID的数据库设计模式。

  2009年在亚特兰大举行的"no:sql(east)"讨论会是一个里程碑,其口号是"select fun, profit from real_world where relational=false;"。因此,NoSQL最普遍的解释是“非关联型的”,强调Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS

  基于2014年的收入,NoSQL市场领先企业是MarkLogic,MongoDB和Datastax。基于2015年的人气排名,最受欢迎的NoSQL数据库是MongoDB,Apache Cassandra和Redis.

1.2.2 NoSQL数据库四大家族

NoSQL中的四大家族主要是:列存储、键值、图像存储、文档存储,其类型产品主要有以下这些。

存储类型

NoSQL

键值存储

最终一致性键值存储

CassandraDynamoRiakHibariVirtuosoVoldemort

内存键值存储

MemcachedRedisOracle CoherenceNCache HazelcastTuple spaceVelocity

持久化键值存储

BigTableLevelDBTokyo CabinetTarantoolTreapDBTuple space

文档存储

MongoDBCouchDBSimpleDB Terrastore BaseX Clusterpoint RiakNo2DB

图存储

FlockDBDEXNeo4JAllegroGraphInfiniteGraphOrientDBPregel

列存储

HbaseCassandraHypertable

1.2.3 NoSQL的优势

  高可扩展性、分布式计算、没有复杂的关系、低成本

  架构灵活、半结构化数据

1.2.4 NoSQL与RDBMS对比 

NoSQL

RDBMS

代表着不仅仅是SQL

没有声明性查询语言

没有预定义的模式

- 值对存储,列存储,文档存储,图形数据库

最终一致性,而ACID属性

非结构化和不可预知的数据

CAP定理

高性能,高可用性和可伸缩性

高度组织化结构化数据

结构化查询语言(SQL (SQL)

数据和关系都存储在单独的表中。

数据操纵语言,数据定义语言

严格的一致性

基础事务

1.3 MongoDB简介

1.3.1 MongoDB是什么

技术分享图片 

    MongoDB并非芒果的意思,而是源于 Humongous(巨大)一词。

1.3.2 MongoDB的特性

  MongoDB的3大技术特色如下所示:

 技术分享图片

除了上图所示的还支持

  二级索引、动态查询、全文搜索 、聚合框架、MapReduce、GridFS、地理位置索引、内存引擎 、地理分布等一系列的强大功能。

但是其也有些许的缺点,例如:

  多表关联: 仅仅支持Left Outer Join

  SQL 语句支持: 查询为主,部分支持

  多表原子事务: 不支持

  多文档原子事务:不支持

  16MB 文档大小限制,不支持中文排序 ,服务端 Javascript 性能欠佳

1.3.3 关系型数据库与mongodb对比

存储方式对比

     在传统的关系型数据库中,存储方式是以表的形式存放,而在MongoDB中,以文档的形式存在。

技术分享图片 

   数据库中的对应关系,及存储形式的说明

 技术分享图片

MongoDB与SQL的结构对比详解

SQL Terms/Concepts

MongoDB Terms/Concepts

database

database

table

collection

row

document or BSON document

column

field

index

index

table joins

embedded documents and linking

primary key

Specify any unique column or

column combination as

primary key.

primary key

In MongoDB, the primary key is

automatically set to the _id field.

aggregation (e.g. group by)

aggregation pipeline

See the SQL to Aggregation Mapping

Chart.

1.3.4 MongoDB数据存储格式

JSON格式

  JSON 数据格式与语言无关,脱胎于 JavaScript,但目前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json。

  MongoDB 使用JSON(JavaScript ObjectNotation)文档存储记录。

  JSON数据库语句可以容易被解析。

  Web 应用大量使用,NAME-VALUE 配对

技术分享图片 

BSON格式

  BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式。BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性。 

  二进制的JSON,JSON文档的二进制编码存储格式

  BSON有JSON没有的Date和BinData

  MongoDB中document以BSON形式存放

例如:

> db.meeting.insert({meeting:“M1 June",Date:"2018-01-06"});

1.3.5 MongoDB的优势

    ?? MongoDB是开源产品

    ?? On GitHub Url:https://github.com/mongodb

    ??  Licensed under the AGPL,有开源的社区版本

    ?? 起源& 赞助by MongoDB公司,提供商业版licenses 许可

     这些优势造就了mongodb的丰富的功能:

  JSON 文档模型、动态的数据模式、二级索引强大、查询功能、自动分片、水平扩展、自动复制、高可用、文本搜索、企业级安全、聚合框架MapReduce、大文件存储GridFS

1.3.6 高可用的复制集群

  自动复制和故障切换

  多数据中心支持滚动维护无需关机支持最多50个成员

技术分享图片

1.3.7 水平扩展

  这种方式是目前构架上的主流形式,指的是通过增加服务器数量来对系统扩容。在这样的构架下,单台服务器的配置并不会很高,可能是配置比较低、很廉价的 PC,每台机器承载着系统的一个子集,所有机器服务器组成的集群会比单体服务器提供更强大、高效的系统容载量。

技术分享图片 

  这样的问题是系统构架会比单体服务器复杂,搭建、维护都要求更高的技术背景。分片集群架构如下图所示:

技术分享图片

1.3.8 各存储引擎的对比

 

MySQL InnoDB

MySQL NDB

Oracle

MongoDB MAPI

MongoDB WiredTiger

事务

YES

YES

ES

NO

NO

锁粒度

ROW-level

ROW-level

ROW-level

Collection-level

Document-level

Geospatial

YES

YES

YES

YES

YES

MVCC

YES

NO

YES

NO

NO

Replication

YES

YES

YES

YES

YES

外键

YES

YES(From 7.3)

YES

NO

NO

数据库集群

NO

YES

YES

YES

YES

B-TREE索引

YES

YES

YES

YES

YES

全文检索

YES

NO

YES

YES

YES

数据压缩

YES

NO

YES

NO

YES

存储限制

64TB

384EB

NO

NO

NO

表分区

YES

YES

YES

人气教程排行