MongoDB安装和应用场景介绍

MogonDB介绍

最新研究PowerJob日志依赖于MongoDB,所以学习一下MongoDb应用场景。

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

MongoDB是文档型的NoSQL数据库,数据以文档(对应关系型数据库的记录)的形式在MongoDB中保存,文档实际上就是一个个JSON字符串,使用JSON的好处是非常直观,通过一系列的Key-Value键值对来表示数据,符合我们的阅读习惯。

在Java、Python中对JSON都有很好的支持,数据从MongoDB中读取出来后,可无需转换直接使用;支持丰富的数据结构,Value可以是普通的整型、字符串、数组、嵌套的子文档,使用嵌套的好处是在MongoDB中仅需一次简单的查询就能够获取到你所需的数据。

MongoDB安装(Docker运行)

下载镜像:由于web端不能访问github,所以现在docker search。

[root@localhost conf]# docker search mongo
NAME                                                   DESCRIPTION                                      STARS     OFFICIAL   AUTOMATED
mongo                                                  MongoDB document databases provide high avai…   9717      [OK]       
mongo-express                                          Web-based MongoDB admin interface, written w…   1321      [OK]       
mongodb/mongodb-atlas-kubernetes-operator              The MongoDB Atlas Kubernetes Operator - Kube…   4                    
mongodb/mongodb-community-server                       The Official MongoDB Community Server            24                   
mongodb/mongodb-atlas-kubernetes-operator-prerelease   This is an internal-use-only build of the Mo…   0                    
mongodb/mongodb-enterprise-server                      The Official MongoDB Enterprise Advanced Ser…   3                    
bitnami/mongodb                                        Bitnami MongoDB Docker Image                     228                  [OK]
circleci/mongo                                         CircleCI images for MongoDB                      13                   [OK]
bitnami/mongodb-exporter                                                                                11                   
percona/mongodb_exporter                               A Prometheus exporter for MongoDB including …   4                    
bitnami/mongodb-sharded                                                                                 11                   
rapidfort/mongodb                                      RapidFort optimized, hardened image for Mong…   23                   
rapidfort/mongodb-ib                                   RapidFort optimized, hardened image for Mong…   10                   
rancher/mongodb-conf                                                                                    2                    
rapidfort/mongodb-official                             RapidFort optimized, hardened image for Mong…   11                   
rapidfort/mongodb-perfomance-test                                                                       10                   
bitnamicharts/mongodb                                                                                   0                    
mongodb/apix_test                                      apix test repo                                   0                    
bitnamicharts/mongodb-sharded                                                                           0                    
rancher/mongodb-config                                                                                  0                    
litmuschaos/mongo                                                                                       1                    
noenv/mongo-exporter                                   Prometheus MongoDB Exporter Docker Image         2                    
corpusops/mongo                                        https://github.com/corpusops/docker-images/      0                    
formio/mongotest                                                                                        0                    
noenv/mongo                                            MongoDB Docker Image                             0  

拉取镜像:

[root@localhost ~]# docker pull mongo
Using default tag: latest
latest: Pulling from library/mongo
9d19ee268e0d: Pull complete 
84c1327991fa: Pull complete 
1feec59ecd14: Pull complete 
3af7480eaf55: Pull complete 
d7524ee16ced: Pull complete 
f4742175eefc: Pull complete 
9d688a8d9c18: Pull complete 
b24ebfb25f44: Pull complete 
0ee52198e640: Pull complete 
Digest: sha256:bf1d25bae7c2fd47cd9a89eec3db08e73ccfbef666e43f583fa6b560ca07ac5a
Status: Downloaded newer image for mongo:latest
docker.io/library/mongo:latest

创建本地目录:

mkdir /root/mongodb/backup
mkdir /root/mongodb/conf
mkdir /root/mongodb/data

touch /root/mongodb/conf/mongodb.conf

内容如下:
#数据库数据存放目录
dbpath=/root/mongodb/data
#数据库日志存放目录
logpath=/root/mongodb/backup/log.txt
#以追加的方式记录日志
logappend = true
#端口号 默认为27017
port=27017 
#以后台方式运行进程
fork=true 
#开启用户认证
auth=true

查看镜像

[root@localhost conf]# docker images
REPOSITORY            TAG       IMAGE ID       CREATED         SIZE
mongo                 latest    1f3d6ec739d8   38 hours ago    654MB
app_docker            latest    fc58c235b89f   4 days ago      123MB

启动Docker

docker run -d --name mymongo -p 27017:27017 --restart=always -v /root/mongodb/data:/data/db -v /root/mongodb/backup:/data/backup -v /root/mongodb/conf:/data/configdb -d mongo --auth

 查看启动的容器:

[root@localhost conf]# docker ps
CONTAINER ID   IMAGE              COMMAND                   CREATED       STATUS                 PORTS                                                                                   NAMES
c6e06d8d547b   mongo              "docker-entrypoint.s…"   5 hours ago   Up 5 hours             0.0.0.0:27017->27017/tcp, :::27017->27017/tcp                                           mymongo

登录的容器内部命令行,并查看mongodb版本:

[root@localhost conf]# docker exec -it mymongo /bin/bash
root@c6e06d8d547b:/# mongod --version
db version v6.0.7
Build Info: {
    "version": "6.0.7",
    "gitVersion": "202ad4fda2618c652e35f5981ef2f903d8dd1f1a",
    "openSSLVersion": "OpenSSL 3.0.2 15 Mar 2022",
    "modules": [],
    "allocator": "tcmalloc",
    "environment": {
        "distmod": "ubuntu2204",
        "distarch": "x86_64",
        "target_arch": "x86_64"
    }
}

进入mongodb命令行

root@c6e06d8d547b:/# mongosh                 
Current Mongosh Log ID:	64a63cec6329656ebd7f934a
Connecting to:		mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+1.10.1
Using MongoDB:		6.0.7
Using Mongosh:		1.10.1

For mongosh info see: https://docs.mongodb.com/mongodb-shell/


To help improve our products, anonymous usage data is collected and sent to MongoDB periodically (https://www.mongodb.com/legal/privacy-policy).
You can opt-out by running the disableTelemetry() command.

查看数据库版本

test> db.version()
6.0.7

# 进入amdin数据库
use admin

test> use admin
switched to db admin

 创建超级管理账号

# 创建超级权限root角色的用户,或者userAdminAnyDatabase 等角色权限比较大的用户,我创建的是拥有超级权限root角色的用户root
# 用户名:rootCs,密码:123rootCs456,角色:root,数据库:admin
admin> db.createUser({user:'rootCs',pwd:'123rootCs456',roles:[{role:'root',db:'admin'}]})
{ ok: 1 }

admin> show dbs
MongoServerError: command listDatabases requires authentication
admin> db.auth('rootCs','123rootCs456')
{ ok: 1 }
admin> show dbs
admin   132.00 KiB
config   12.00 KiB
local    40.00 KiB

 新增数据库并创建用户

  • use,切换到指定数据库。没有这个数据库会创建一个。
admin> use myMongo
switched to db myMongo
  • 创建用户:cs,密码:cs123456
myMongo> db.createUser({user:"cs", pwd:"cs123456", roles:[{role: "dbOwner", db:"myMongo" }]})
{ ok: 1 }
  • 登陆/认证用户
myMongo> db.auth('cs','cs123456')
{ ok: 1 }
  • 查看该数据库下面的表(数据)
myMongo> show collections

MongoDB客户端

客户端下载地址

选择对应的版本下载完之后安装即可。

登录后的界面:

MongoDB应用场景

MongoDB事务

MongoDB目前只支持单文档事务,MongoDB暂时不适合需要复杂事务的场景。灵活的文档模型JSON格式存储最接近真实对象模型,对开发者友好,方便快速开发迭代,可用复制集满足数据高可靠、高可用的需求,运维较为简单、故障自动切换可扩展分片集群海量数据存储。

多引擎支持各种强大的索引需求
  • 支持地理位置索引
  • 可用于构建各种O2O应用
  • 文本索引解决搜索的需求
  • TTL索引解决历史数据过期的需求
  • Gridfs解决文件存储的需求
  • aggregation & mapreduce解决数据分析场景需求,可以自己写查询语句或脚本,将请求分发到 MongoDB 上完成。
具体的应用场景

传统的关系型数据库在解决三高问题上的力不从心。

  • High performance - 对数据库高并发读写的需求。
  • Huge Storage - 对海量数据的高效率存储和访问的需求。
  • High Scalability && High Availability- 对数据库的高可扩展性和高可用性的需求。

MongoDB可以完美解决三高问题。 

以下是几个实际的应用案例

(1)游戏场景
使用MongoDB存储游戏用户信息、装备、积分等,直接以内嵌文档的形式存储,方便查询、更新。
(2)物流场景
使用MongoDB存储订单信息、订单状态、物流信息,订单状态在运送过程中飞速迭代、以MongoDB内嵌数组的形式来存储,一次查询就能将订单所有的变更查出来,牛逼plus。
(3)社交场景
使用MongoDB存储用户信息,朋友圈信息,通过地理位置索引实现附近的人、定位功能。
(4)物联网场景
使用MongoDB存储设备信息、设备汇报的日志信息、并对这些信息进行多维度分析。
(5)视频直播
使用MongoDB存储用户信息、点赞互动信息。

 选择MongoDB的场景总结
  • 数据量大
  • 读写操作频繁
  • 数据价值较低,对事务要求不高。

MongoDB的特点

1、高性能
MongoDB提供高性能的数据持久性。对嵌入式数据模型的支持减少了数据库系统上的IO活动。
索引支持更快的查询,并且包含嵌入式文档和数组的键。

  • 文本索引解决搜索的需求;
  • TTL索引解决历史数据自动过期的需求;
  • 地理位置索引可用于构建各种 O2O 应用;

2、高可用性
MongoDB的复制工具称为副本集(reolica set),它包含提供自动故障转移和数据冗余。
3、高可用性
MongoDB提供了水平可扩展性作为其核心功能的一部分。
分片将数据分布在一组集群的机器上。(海量数据存储、服务能力水平扩展)
从3.4起,MongoDB支持基于片键创建数据区域,在一个平衡的集群中,MongoDB将一个区域所覆盖的读写只定向到该区域内的那些片。
4、丰富的查询支持
MongoDB支持丰富的查询语言,支持读写(CRUD)操作、比如数据聚合、文本搜索、地理空间查询等。
5、其他特点
如动态模式、灵活的文档模型。

猜你喜欢

转载自blog.csdn.net/juanxiaseng0838/article/details/131572375