Mongodb分布式文件存储数据库

文章目录

一、MongoDB 简介

基本信息

MongoDB 是由 C++ 语言编写的,基于分布式文件存储的开源数据库系统。在高负载情况下,可通过添加更多节点保证服务器性能。它旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为文档,数据结构由键值(key=>value)对组成,其文档类似于 JSON 对象,字段值可以包含其他文档、数组及文档数组。

特点

  1. 高性能:提供高性能的数据持久性,支持嵌入式数据模型,减少数据库系统上的 I/O 操作;索引支持快速查询,可包含嵌入式文档和数组中的键。
  2. 丰富的语言查询:支持丰富的查询语言,用于读写操作(CRUD)、数据汇总、文本搜索和地理空间索引。
  3. 高可用性:复制工具(副本集)提供自动故障转移和数据冗余。
  4. 水平可扩展性:分片功能可将数据分布在一组计算机上,提供可扩展性。
  5. 支持多种存储引擎:如 WiredTiger 存储引擎、MMAPv1 存储引擎和 InMemory 存储引擎。

内部组件

  1. MongoDB Drivers:官方 MongoDB 客户端库,提供 C、C++、C#、Java、Node.JS、Perl、PHP、Python、Ruby 和 Scala 驱动程序的参考指南。
  2. MongoDB Stitch:为开发人员提供访问 MongoDB 和其他后端服务的 API,保持 MongoDB 功能和灵活性,支持细粒度的数据访问控制配置。
  3. MongoDB Atlas:MongoDB 在云中部署、操作和扩展的最佳方式,适用于 AWS、Azure 和 Google Cloud Platform,可轻松迁移数据,零停机。
  4. MongoDB Cloud Manager:用于管理 MongoDB 部署的软件包,提供监控和备份功能,帮助用户优化群集并降低操作风险。
  5. MongoDB Charts:可快速简单地创建 MongoDB 可视化图表。
  6. MongoDB Connector for BI:允许用户使用 SQL 创建查询,并使用现有的关系商业智能工具(如 Tableau、MicroStrategy 和 Qlik)对 MongoDB Enterprise 数据进行可视化、图形化和报告。
  7. MongoDB Compass:通过随机抽样文档子集,为用户提供 MongoDB 模式的图形视图,降低对数据库的影响并快速产生结果。
  8. MongoDB Spark Connector:可访问所有使用 MongoDB 数据集的 Spark 库,支持 SQL 分析、流式传输、机器学习和图形 API,也可与 Spark Shell 配合使用。

二、MongoDB 部署

1. 安装依赖

bash 复制代码
yum install libcurl openssl -y

2. 解压部署并配置环境变量

bash 复制代码
tar xvf mongodb-linux-x86_64-rhel70-4.4.6.tgz
mv mongodb-linux-x86_64-rhel70-4.4.6 /usr/local/mongodb
mkdir /usr/local/mongodb/{conf,data,logs}

vi /etc/profile
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin

3. 修改配置文件以及启动服务

bash 复制代码
cd /usr/local/mongodb/
vi conf/mongodb.conf
port=39096
dbpath=/usr/local/mongodb/data
logpath=/usr/local/mongodb/logs/mongodb.log
bind_ip=0.0.0.0
#auth=true   ### 开启登录认证,配置完用户名密码在进行开启

# 启动服务
/usr/local/mongodb/bin/mongod --config /usr/local/mongodb/conf/mongodb.conf --logappend

# 连接 mongodb
mongo --port 39096 -uaexcom --authenticationDatabase trade -p

4.数据库权限管理

javascript 复制代码
// 创建并切换数据库
use trade
// 创建用户并授权数据库
db.createUser({user:"aexcom",pwd:"xxx=",roles:[{role:"readWrite",db:"trade"}]})

// 验证是否登录成功
use trade
db.auth("aexcom","xxx=")

三、MongoDB 管理

1. 角色权限

  • Read:允许用户读取指定数据库。
  • readWrite:允许用户读写指定数据库。
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile。
  • userAdmin:允许用户向 system.users 集合写入,可在指定数据库里创建、删除和管理用户。
  • clusterAdmin:只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读权限。
  • readWriteAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读写权限。
  • userAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限。
  • dbAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限。
  • root:只在 admin 数据库中可用,超级账号,拥有超级权限。

2. 操作命令

用户管理命令
javascript 复制代码
db.auth() // 将用户验证到数据库。
db.changeUserPassword() // 更改现有用户的密码。
db.createUser() // 创建一个新用户。
db.dropUser() // 删除单个用户。
db.dropAllUsers() // 删除与数据库关联的所有用户。
db.getUser() // 返回有关指定用户的信息。
db.getUsers() // 返回有关与数据库关联的所有用户的信息。
db.grantRolesToUser() // 授予用户角色及其特权。
db.removeUser() // 已过时,从数据库中删除用户。
db.revokeRolesFromUser() // 从用户中删除角色。
db.updateUser() // 更新用户数据。
常用命令(Mongo4.2.8)
数据库相关
javascript 复制代码
// 切换/创建数据库
use "dbname";
// 查询所有数据库
show dbs;
// 查看当前使用的数据库
db.getName();
// 查看数据库版本
db.version();
// 查看当前 db 的链接地址
db.getMongo();
用户相关
javascript 复制代码
// 创建普通用户(创建用户 cg,对 mytest 数据库读写权限)
db.createUser({user:"cg",pwd:"lianshi",roles:[{role:"readWrite",db:"mytest"}]})
// 删除用户
db.dropUser("yonghu")
// 修改用户密码
db.updateUser("cg",{pwd:"123456"})
// 进入数据 mytest,用户名密码认证
db.auth("cg","lianshi");
集合 Collection 相关
javascript 复制代码
// 获得数据聚合(表)
db.getCollectionNames();
// 集合(表)插入数据
db.student.insert({"id":"2","name":"yxy"})
// 查询数据
db.student.find();
// 查询唯一字段值
db.student.distinct("name");
// 查询 name = yxy 的记录
db.student.find({"name":"yxy"});
// 插入 int32 字段类型的数据
db.student.insert({"id":NumberInt(1234567),"name":"hu"});
// 插入 int64 字段类型数据
db.student.insert({"age":NumberLong(22),"name":"hu"});
// 插入 Decimal 字段类型数据
db.student.insert({"va":NumberDecimal("22.3"),"name":"hu"});
// 查询语句
db.student.find({})
  .projection({})
  .sort({_id:-1})
  .limit(100)
// 删除(集合)表
db.student.drop();
相关推荐
小白学大数据19 分钟前
Python+Selenium爬虫:豆瓣登录反反爬策略解析
分布式·爬虫·python·selenium
笨蛋不要掉眼泪27 分钟前
SpringAOP
java·数据库·spring·log4j
IvanCodes29 分钟前
九、HQL DQL七大查询子句
大数据·数据库·hive
Channing Lewis39 分钟前
如何判断一个网站后端是用什么语言写的
前端·数据库·python
fjkxyl1 小时前
Kafka消息路由分区机制深度解析:架构设计与实现原理
分布式·kafka
只因只因爆1 小时前
spark数据清洗
大数据·分布式·spark
難釋懷1 小时前
Android开发-数据库SQLite
android·数据库·sqlite
码农捻旧1 小时前
解决Mongoose “Cannot overwrite model once compiled“ 错误的完整指南
javascript·数据库·mongodb·node.js·express
tanyyinyu2 小时前
Python函数返回值的艺术:为何True/False是更优实践及例外情况分析
运维·数据库·python
大新新大浩浩2 小时前
记录一下seata后端数据库由mariadb10切换到mysql8遇到的SQLException问题
数据库