MongoDB-1入门介绍

NoSQL

NoSQL(NoSQL = Not Only SQL),意即反SQL运动,指的是非关系型的数据库

优点

1、对数据库高并发读写。

2、对海量数据的高效率存储和访问。

3、对数据库的高可扩展性和高可用性。

弱点:

1、数据库事务一致性需求

2、数据库的写实时性和读实时性需求

3、对复杂的SQL查询,特别是多表关联查询的需求

简介

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。

它支持的数据结构非常松散,数据格式是BSON,一种类似
JSON的二进制形式的存储格式,简称Binary JSON ,和JSON一样支持内嵌的文档对象和
数组对象,因此可以存储比较复杂的数据类型。

Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的
绝大部分功能,而且还支持对数据建立索引。
原则上 Oracle 和 MySQL 能做的事情,MongoDB 都能做(包括 ACID 事务)。

MongoDB术语与SQL术语对比

MongoDB-1入门介绍_第1张图片

MongoDB与关系型数据库性能对比

MongoDB-1入门介绍_第2张图片

特点

半结构化

在一个集合中,文档所拥有的字段并不需要是相同的,而且也不需要对所用的字段进行声明。因此,MongoDB具有很明显的半结构化特点。除了松散的表结构,文档还可以支持多级的嵌套、数组等灵活的数据类型,非常契合面向对象的编程模型。

弱关系

MongoDB没有外键的约束,也没有非常强大的表连接能力。类似的功能需要使用聚合管道技术来弥补

支持海量数据、高可用

复制集提供99.999%高可用
分片架构支持海量数据和无缝扩容
轻松支持TB-PB数量级

应用场景

游戏场景,使用 MongoDB 存储游戏用户信息,用户的装备、积分等直接以内嵌文档的形式存储,方便查询、更新;
物流场景,使用 MongoDB 存储订单信息,订单状态在运送过程中会不断更新,以MongoDB 内嵌数组的形式来存储,一次查询就能将订单所有的变更读取出来;
社交场景,使用 MongoDB 存储存储用户信息,以及用户发表的朋友圈信息,通过地理位置索引实现附近的人、地点等功能;
物联网场景,使用 MongoDB 存储所有接入的智能设备信息,以及设备汇报的日志信息,并对这些信息进行多维度的分析;
视频直播,使用 MongoDB 存储用户信息、礼物信息等;
大数据应用,使用云数据库MongoDB作为大数据的云存储系统,随时进行数据提取分析,掌握行业动态。|

是否使用MongoDB判断

只要有一项需求满足就可以考虑使用MongoDB,匹配越多,选择MongoDB越合适。
MongoDB-1入门介绍_第3张图片

安装

#拉取镜像
docker pull mongo:latest

#创建和启动容器
docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db -d mongo

#进入容器
docker exec -it mymongo/bin/bash

#使用MongoDB客户端进行操作
mongo

show dbs #查询所有的数据库
admin 0.000GB
config 0.000GB
local 0.000GB

相关工具

官方GUI工具——COMPASS

MongoDB图形化管理工具(GUI),能够帮助您在不需要知道MongoDB查询语法的前提下,便利地分析和理解您的数据库模式,并且帮助您可视化地构建查询。
下载地址:https://www.mongodb.com/zh-cn/products/compass
MongoDB-1入门介绍_第4张图片

Mongo shell

使用js

load("books.js")
var tags = ["nosql","mongodb","document","developer","popular"];
var types = ["technology","sociality","travel","novel","literature"];
var books=[];
for(var i=0;i<50;i++){
    var typeIdx = Math.floor(Math.random()*types.length);
    var tagIdx = Math.floor(Math.random()*tags.length);
    var favCount = Math.floor(Math.random()*100);
    var book = {
        title: "book-"+i,
        type: types[typeIdx],
        tag: tags[tagIdx],
        favCount: favCount,
        author: "xxx"+i
    };
    books.push(book)
}
db.books.insertMany(books);

优化手段

索引

B树索引。【Mysql Innodb引擎使用B+树】
MongoDB支持多种索引类型,包括:

单键索引(Single Key Index):只对一个字段进行索引。在MongoDB中,默认创建的_Id索引就是单键索引。
复合索引(Compound Index):对多个字段进行索引。例如,如果经常需要根据两个或更多字段进行查询,那么创建复合索引可以提高查询效率。
多键索引(Multikey Index):针对数组或嵌套文档的字段进行索引。多键索引会为数组的每个元素建立一条索引,允许在数组或嵌套文档字段上进行查询。
地理空间索引(Geospatial Index):对包含地理坐标的字段进行索引,以支持地理位置相关的查询。
文本索引(Text Index):对文本字段进行全文索引,以支持文本搜索和自然语言查询。

使用聚合管道

MongoDB支持聚合管道操作,可以将多个操作合并成一个操作,以减少网络通信和磁盘IO。例如,可以使用聚合管道来实现分页查询,将排序、投影和分页操作合并成一个操作。

使用数据分片

MongoDB支持数据分片,可以将数据分布到多个服务器上,以提高性能和可用性。例如,可以将用户数据按照地理位置进行分片,将用户数据分布到不同的服务器上,这样查询时就会更快

使用副本集

MongoDB支持副本集,可以提高数据的可用性和性能。例如,可以将读操作分发到副本集中的从节点上,以减轻主节点的负载。

定期删除不再使用的数据

你可能感兴趣的:(数据库,mongodb,数据库)