一, NoSQL 介绍
1, 什么是 NoSQL
NoSQL(NoSQL = Not Only SQL ), 意即 "不仅仅是 SQL".
NoSQL, 指的是非关系型的数据库. NoSQL 有时也称作 Not Only SQL 的缩写, 是对不同于传统的关系型数据库的数据库管理系统的统称.
NoSQL 用于超大规模数据的存储.(例如谷歌或 Facebook 每天为他们的用户收集万亿比特的数据). 这些类型的数据存储不需要固定的模式, 无需多余操作就可以横向扩展.
2, 为什么使用 NoSQL ?
今天我们可以通过第三方平台 (如: Google,Facebook 等) 可以很容易的访问和抓取数据. 用户的个人信息, 社交网络, 地理位置, 用户生成的数据和用户操作日志已经成倍的增加. 我们如果要对这些用户数据进行挖掘, 那 SQL 数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据.
3,NoSQL 的优点 / 缺点
优点:
- 高可扩展性
- 分布式计算
- 低成本
- 架构的灵活性, 半结构化数据
- 没有复杂的关系
缺点:
- 没有标准化
- 有限的查询功能(到目前为止)
- 最终一致是不直观的程序
4,NoSQL 数据库分类
二, MongoDB 介绍
MongoDB 是由 C++ 语言编写的, 是一个基于分布式文件存储的开源数据库系统.
在高负载的情况下, 添加更多的节点, 可以保证服务器性能.
MongoDB 旨在为 web 应用提供可扩展的高性能数据存储解决方案.
MongoDB 将数据存储为一个文档, 数据结构由键值 (key=>value) 对组成. MongoDB 文档类似于 JSON 对象. 字段值可以包含其他文档, 数组及文档数组.
主要特点
MongoDB 是一个面向文档存储的数据库, 操作起来比较简单和容易.
你可以在 MongoDB 记录中设置任何属性的索引 (如: FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序.
你可以通过本地或者网络创建数据镜像, 这使得 MongoDB 有更强的扩展性.
如果负载的增加(需要更多的存储空间和更强的处理能力) , 它可以分布在计算机网络中的其他节点上这就是所谓的分片.
Mongo 支持丰富的查询表达式. 查询指令使用 JSON 形式的标记, 可轻易查询文档中内嵌的对象及数组.
MongoDB 使用 update()命令可以实现替换完成的文档 (数据) 或者一些指定的数据字段 .
MongoDB 中的 Map/reduce 主要是用来对数据进行批量处理和聚合操作.
Map 和 Reduce.Map 函数调用 emit(key,value)遍历集合中所有的记录, 将 key 与 value 传给 Reduce 函数进行处理.
Map 函数和 Reduce 函数是使用 JavaScript 编写的, 并可以通过 db.runCommand 或 mapreduce 命令来执行 MapReduce 操作.
GridFS 是 MongoDB 中的一个内置功能, 可以用于存放大量小文件.
MongoDB 允许在服务端执行脚本, 可以用 JavaScript 编写某个函数, 直接在服务端执行, 也可以把函数的定义存储在服务端, 下次直接调用即可.
MongoDB 支持各种编程语言: Ruby,PYTHON,JAVA,C++,PHP,C# 等多种语言.
MongoDB 安装简单.
三, MongoDB 下载安装(Ubuntu 系统)
MongoDB 官网地址: https://www.mongodb.com/
MongoDB 官方英文文档: https://docs.mongodb.com/manual/
MongoDB 各平台下载地址: https://www.mongodb.com/download-center#community
MongoDB 的下载安装, 分为 Windows/Mac/Linux 不同的平台, 但是操作大同小异, 这里我已 Linux 平台下给大家演示
1, 下载好了之后, 进入到下载的目录里面解压
tar -zxvf MongoDB-Linux-x86_64-ubuntu1604-4.0.10.tgz
2, 在系统文件夹 / usr/local 里面新建一个文件夹 MongoDB, 将解压好的 MongoDB 文件夹移动到系统的 / usr/local/MongoDB 里面, 也可以不用命令, 直接拖拽一样, 只不过 usr 是系统文件夹, 需要 root 用户才能操作, 所以使用 sudo
houlei@Ubuntu:~/Downloads$ sudo mv MongoDB-Linux-x86_64-ubuntu1604-4.0.10 /usr/local/MongoDB
3,MongoDB 的可执行文件位于 bin 目录下, 所以可以将其添加到 PATH 路径中:
export PATH=/usr/local/MongoDB/bin:$PATH
4, 安装 MongoDB
houlei@Ubuntu:/usr/local/MongoDB/bin$ sudo apt install MongoDB
四, MongoDB 后台管理 shell
如果你需要进入 MongoDB 后台管理, 你需要先打开 MongoDB 装目录的下的 bin 目录, 然后执行 mongo 命令文件.
MongoDB Shell 是 MongoDB 自带的交互式 JavaScript shell, 用来对 MongoDB 进行操作和管理的交互式环境.
当你进入 MongoDB 后台后, 它默认会链接到 test 文档(数据库):
houlei@Ubuntu:/usr/local/MongoDB/bin$ ./mongo
做一个简单的插入和查询的测试
- > db.hero.insert({
- h_name:"李白"
- }) # 插入
- WriteResult({
- "nInserted" : 1
- })
- > db.hero.find() # 查询
- {
- "_id" : ObjectId("5d28a0aad9b981703296bede"), "h_name" : "李白"
- }
五, MongoDB 创建用户和删除用户
1, 创建用户
- db.createUser
- (
- {
- user:<name_string>, #字符串
- pwd:<password_string>, #字符串
- roles:[{role:<role_name>,db:<db_name>}] #数组 + 对象
- }
- )
user 文档字段介绍:
user 字段, 为新用户的名字;
pwd 字段, 用户的密码;
cusomData 字段, 为任意内容, 例如可以为用户全名介绍;
roles 字段, 指定用户的角色, 可以用一个空数组给新用户设定空角色;
在 roles 字段, 可以指定内置角色和用户定义的角色.
- > db.createUser({user:"Se7eN_HOU",pwd:"123456",roles:[{role:"readWrite",db:"Hero"}]})
- Successfully added user: {
- "user" : "Se7eN_HOU",
- "roles" : [
- {
- "role" : "readWrite",
- "db" : "Hero"
- }
- ]
- }
- >
- houlei@Ubuntu:~$ mongo Hero -u "Se7eN_HOU" -p "123456"
2, 删除用户
db.dropUser(<user_name>) 删除某个用户, 接受字符串参数
db.dropUser("Se7eN_HOU")
db.dropAllUser() 删除当前库的所有用户
六, 基于角色的访问控制(Role-Based Access Control)
角色是授予 User 在指定资源上执行指定操作的权限, MongoDB 官方手册对角色的定义是:
A role grants privileges to perform the specified actions on resource.
MongoDB 为了方便管理员管理权限, 在 DB 级别上预先定义了内置角色; 如果用户需要对权限进行更为细致的管理, MongoDB 允许用户创建自定义的角色, 能够在集合级别上控制 User 能够执行的操作. MongoDB 使用角色 (Role) 授予 User 访问资源的权限, Role 决定 User 能够访问的数据库资源和执行的操作. 一个 User 能够被授予一个或多个 Role, 如果 User 没有被授予 Role, 那么就没有访问 MongoDB 系统的权限.
A user is granted one or more roles that determine the user's access to database resources and operations. Outside of role assignments, the user has no access to the system.
1, 内置角色(Built-In Roles)
内置角色是 MongoDB 预定义的角色, 操作的资源是在 DB 级别上. MongoDB 拥有一个 SuperUser 的角色: root, 拥有最大权限, 能够在系统的所有资源上执行任意操作.
数据库用户角色(Database User Roles):
read: 授予 User 只读数据的权限
readWrite: 授予 User 读写数据的权限
数据库管理角色(Database Administration Roles):
dbAdmin: 在当前 dB 中执行管理操作
dbOwner: 在当前 DB 中执行任意操作
userAdmin: 在当前 DB 中管理 User
备份和还原角色(Backup and Restoration Roles):
backup
restore
跨库角色(All-Database Roles):
readAnyDatabase: 授予在所有数据库上读取数据的权限
readWriteAnyDatabase: 授予在所有数据库上读写数据的权限
userAdminAnyDatabase: 授予在所有数据库上管理 User 的权限
dbAdminAnyDatabase: 授予管理所有数据库的权限
集群管理角色(Cluster Administration Roles):
clusterAdmin: 授予管理集群的最高权限
clusterManager: 授予管理和监控集群的权限, A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
clusterMonitor: 授予监控集群的权限, 对监控工具具有 readonly 的权限
hostManager: 管理 Server
七, MongoDB 的删除
1,Ubuntu 环境下下载 MongoDB
1.1, 卸载只是 MongoDB, 这将删除只是 MongoDB 包本身.
sudo apt-get remove MongoDB
1.2, 卸载 MongoDB 和它的依赖项. 这将删除 MongoDB 软件包和不再需要的任何其依赖包
sudo apt-get remove --auto-remove MongoDB
1.3, 清除您的配置数据
如果你还想要删除您的本地 / config 文件为 MongoDB, 那么这将工作.
sudo apt-get purge MongoDB
八, MongoDB 安装及连接遇到的问题及解决方案
说明: 不同平台下 MongoDB 同样的问题解决方案不一样, 应为 Windows,Linux,Mac 不同平台下的命令是有差异的, 所以大家在网上搜索 MongoDB 安装和链接的问题的时候最好说明是什么平台下的问题, 不然你使用的 Mac 系统, 解决搜索出来的是 Linux 下的解决方案也不一样能解决问题.
1,Failed to start mongod.service: Unit mongod.service not found.(Ubuntu)
1.1, 也就是说 mongod.service 文件没有找到, 需要我们手动创建一个
- [Unit]
- Description=High-performance, schema-free document-oriented database
- After=network.target
- Documentation=https://docs.mongodb.org/manual
- [Service]
- User=MongoDB
- Group=MongoDB
- ExecStart=/usr/bin/mongod --quiet --config /etc/mongod.conf
- [Install]
- WantedBy=multi-user.target
1.2, 然后执行 (激活 mongod service)
sudo systemctl enable mongod
1.3, 启动, 重启和关闭命令
- sudo service mongod start
- sudo service mongod restart
- sudo service mongod stop
- 2,Error: couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.JS
2.1, 先看服务启动没有, 如果没有启动服务先启动服务: sudo service mongod start
2.2 如果服务已经启动了, 那有可能是上次不正常关闭 mongo, 导致存放数据的文件被占用了, 被锁住了
houlei@Ubuntu:~$ /usr/local/MongoDB/bin/mongod --repair #/usr/local/MongoDB 是 mongo 的安装目录
或者
houlei@Ubuntu:~$ rm -f /usr/local/data/db/mongod.lock #/usr/locak/data/db 是 mongo 的数据库文件路径
2.3, 如果上一步解决不了, 那么就是路径设置有问题, 通过重新对路径的设置解决此问题
houlei@Ubuntu:~$ /usr/local/MongoDB/bin/mongod --dbpath=/usr/local/data/db
3, 找不到 mongod 或者 mong 命令(Mac 系统)
- houleideMacPro:~ Se7eN_HOU$ mongod
- -bash: mongod: command not found
解决方案: 出现这个问题多数是应为, mongod 或者 mongo 的路径不做 PATH 里面
- export MONGO_PATH=/usr/local/MongoDB
- export PATH=$PATH:$MONGO_PATH/bin
来源: https://www.cnblogs.com/Se7eN-HOU/p/11179118.html