NoSQL Basic
MongoDB Introduction
Tutorial:http://www.vue5.com/mongodb/mongodb_1uxs37ih.html
用户角色 Roles
数据库用户角色(Database User Roles)
- read : 授权User只读数据的权限,允许用户读取指定的数据库
- readWrite 授权User读/写数据的权限,允许用户读/写指定的数据库 数据库管理角色(Database Admininstration Roles)
- dbAdmin:在当前的数据库中执行管理操作,如索引的创建、删除、统计、查看等
- dbOwner:在当前的数据库中执行任意操作,增、删、改、查等
- userAdmin :在当前的数据库中管理User,创建、删除和管理用户。 备份和还原角色(Backup and Restoration Roles)
- backup
- restore
跨库角色(All-Database Roles)
- readAnyDatabase:授权在所有的数据库上读取数据的权限,只在admin 中可用
- readWriteAnyDatabase:授权在所有的数据库上读写数据的权限,只在admin 中可用
- userAdminAnyDatabase:授权在所有的数据库上管理User的权限,只在admin中可用
- dbAdminAnyDatabase: 授权管理所有数据库的权限,只在admin 中可用
集群管理角色(Cluster Administration Roles)
- clusterAdmin:授权管理集群的最高权限,只在admin中可用
- clusterManager:授权管理和监控集群的权限
- clusterMonoitor:授权监控集群的权限,对监控工具具有readonly的权限
- hostManager:管理server 超级角色(super master Roles)
- root :超级账户和权限,只在admin中可用
基本概念 Basic Concepts
- Collection:类似于RDBMS中的Table
- Document:类似于RDBMS中的Row
基本数据类型 Basic Data Structure
- ObjectId:自动生成的唯一标识符
- String:字符串
- Boolean:布尔值
- Integer:整数
- Double:浮点数
- Array:数组
- Object:字典
- null:空值
- Timestamp:时间戳
- date:日期
大文件存储 GridFS For Big Files
GridFS 用于存储和恢复那些超过16M(BSON文件限制)的文件(如:图片、音频、视频等)。 GridFS 也是文件存储的一种方式,但是它是存储在MonoDB的集合中。 GridFS 可以更好的存储大于16M的文件。 GridFS 会将大文件对象分割成多个小的chunk(文件片段),一般为256k/个,每个chunk将作为MongoDB的一个文档(document)被存储在chunks集合中。 GridFS 用两个集合来存储一个文件:fs.files与fs.chunks
GridFS存储的基本字段如下图: [Image] metadata可展开
使用GridFS作为文件存储的方式,除默认字段外,添加关系型数据库字段到metadata中用于检索 数据库基本结构如下:(每个Bucket包含files和chunks两个collection)
CourseFileLib
-ExperimentBucket
--metadata: {eid: "..."}
-AssignmentBucket
--metadata: {asid: "..."}
-SubmissionBucket
--metadata: {asid: "...", sid: "..."}
Development Usage
MongoDB Compass下载:管理可视化管理MongoDB数据 https://www.mongodb.com/try/download/compass demo代码:简单的RESTful API实现文件上传、下载、删除等操作 远程连接url:Compass/Springboot可用
# demo db
mongodb://demo-test:test@120.78.65.145:27017/demo?authSource=admin
# CourseFileLib db
mongodb://file-connector:connector@120.78.65.145:27017/CourseLib?authSource=admin
Demo Repo
https://github.com/Tptrix29/DB-demo
相关配置代码(已完成配置)
Docker Config
# Local
docker run -itd --name mongo-data --restart=always -v ~/IdeaProjects/containers/mongodb/demo/data:/data/db -p 27017:27017 mongo --auth
# Server
docker run -itd --name mongo-data --restart=always -v /home/data/mongo_data:/data/db -p 27017:27017 mongo --auth
# Enter Container
docker exec -it mongo-data bash
# Change Mirror & Install Vim
sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
sed -i s@/security.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list
apt clean
apt-get update -y
apt-get install vim
# Change Config to Open port
vim /etc/mongod.conf.orig
DB Config
User
// 用户创建
use admin
// 创建root
db.createUser({ user:'root',pwd:'iamroot',roles:[ "root"]});
db.auth("root", "iamroot")
// 创建文件读写者
db.createUser({ user:'file-connector',pwd:'connector',roles:[ {role: "readWrite", db: "CourseFileLib"}]});
// 创建demo测试者
db.createUser({ user:'demo-test',pwd:'test',roles:[ {role: "readWrite", db: "demo"}]});
DB
// demo测试数据库
use demo
// 测试学生数据
db.students.insertMany( [
{ sid: 22001, name: "Alex", year: 1, score: 4.0 },
{ sid: 21001, name: "bernie", year: 2, score: 3.7 },
{ sid: 20010, name: "Chris", year: 3, score: 2.5 },
{ sid: 22021, name: "Drew", year: 1, score: 3.2 },
{ sid: 17301, name: "harley", year: 6, score: 3.1 },
{ sid: 21022, name: "Farmer", year: 1, score: 2.2 },
{ sid: 20020, name: "george", year: 3, score: 2.8 },
{ sid: 18020, name: "Harley", year: 5, score: 2.8 },
] )
// CrouseFileLib数据库:文件操作通过Java API实现
use CourseFileLib
Redis Introduction
Key-value database
Data Type
- String
- Lists
- Sets
- Hashes
- Sorted sets
- Streams
- Geospatial
- HyperLogLog
- Bitmaps
- Bitfields