MongoDB 学习轨迹

NoSQL(NoSQL = Not Only SQL )
在现代的计算系统上每天网络上都会产生庞大的数据量。
这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理
结构化数据存储
数据库革命性运动
ACID规则
A (Atomicity) 原子性
C (Consistency) 一致性 一致性约束
I (Isolation) 独立性 并发的事务之间不会互相影响
D (Durability) 持久性
分布式系统(distributed system)
NoSQL用于超大规模数据的存储
1998年
CAP定理(CAP theorem)
布鲁尔定理(Brewer's theorem)
对于一个分布式计算系统来说,不可能同时满足以下三点:
一致性(Consistency) (所有节点在同一时间具有相同的数据)
可用性(Availability) (保证每个请求不管成功或者失败都有响应)
分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)

在这里插入图片描述

C++语言 基于分布式文件存储的开源数据库系统
WEB应用
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成
MongoDB 工具
监控
网络和系统监控工具Munin Gangila 
GUI

在这里插入图片描述

命令

"show dbs" 命令可以显示所有数据的列表
db 显示当前数据库对象或集合
use"命令,可以连接到一个指定的数据库

数据库
集合 MongoDB 文档组
文档 是一组键值(key-value)对(即 BSON)
元数据 dbname.system.*
MongoDB 数据类型

mongodb://[username:password@]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]

data
数据库管理系统 database management systemDBMS
数据库模型追踪实体、属性和关系
RDBMS、NOSQL
最重要的是NoSQL不使用SQL作为查询语言
1998年 2009年
非关系型、分布式、不提供ACID的数据库设计模式

在这里插入图片描述
Humongous(巨大

在这里插入图片描述
在这里插入图片描述

mongo 10.0.0.152/admin
db.version()
use test;
db db.getName()
show dbs;
show databases;
db.stats()
db.getMongo()
show collections;
db.getCollectionNames()
db.c.insert({name:'clsn'});
db.getCollectionNames()
db.c.find()
db.c.renameCollection("clsn")
db.a.drop()
for(i=0;i<10000;i++){ db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()}); }
db.log.findOne()            # 查看第1条记录
db.log.findOne()            # 查看第1条记录
db.log.count()              # 查询总的记录数
db.log.find({uid:1000});    # 查询UUID为1000的数据
db.log.remove({})             #  删除集合中所有记录
> db.log.stats()          # 查看数据状态
> db.log.dataSize()       # 集合中数据的原始大小
> db.log.totalIndexSize() # 集合中索引数据的原始大小
> db.log.totalSize()      # 集合中索引+数据压缩存储之后的大小
> db.log.storageSize()    # 集合中数据压缩存储的大小
> db.log.find({uid:1000}).pretty()
> db.createUser(
  {
    user: "root",
    pwd: "root",
    roles: [ { role: "root", db: "admin" } ]
  }
)  
show tables; 
system.users  # 用户存放位置
system.version

 db.auth("root","root")

cat >>/application/mongodb/conf/mongod.conf<<-'EOF'
security:
  authorization: enabled
EOF
# 命令行中进行登陆
mongo -uroot -proot admin 
# 在数据库中进行登陆验证
db.auth("root","root")
db.dropUser("app")

1204

Humongous  开源数据库
二级索引,完整的查询系统以及严格一致性
敏捷性和可扩展性
可扩展性,高性能和高可用性
分布式文件存储的数据库
C++ WEB应用提供可扩展的高性能数据存储解决方案
介于关系数据库和非关系数据库之间的产品
面向集合”(Collection-Oriented) 数据集

基于分布式文件存储的NoSQL数据库
面向文档(document-oriented)的数据库
更好的扩展性
“行“(row)  “文档”(document)
预定义模式(predefined schema)  键(key)和值(value)
T级数据  司空见惯
应该如何扩展数据库,分为纵向扩展(更强的机器)和横向扩展(数量)

在这里插入图片描述

偶数为“稳定版”(如:1.6.X,1.8.X)
奇数为“开发版”(如:1.7.X,1.9.X)
--dbpath指定数据存放地点为“db”文件夹
insert 
find  _id GUID全局唯一标识符
update
remove

 SQL 数据库
 Database Server	 mongod mysqld
 Database Client	 mongo mysql

db.createCollection("people")
db.people.insertOne( {
    user_id: "abc123",
    age: 55,
    status: "A"
 } )
crud  (Create)、检索(Retrieve)、更新(Update)和删除(Delete)
強大,靈活、且易於擴展的文件導向式(document-oriented)資料庫
彈性的Schema
橫向擴展	document的數據模型	
不支援事務操作
占用比較多空間  預分配空間	 欄位所占用的空間

Document
{
	name : "mark".
	age : 100 , 
	title : 'Mark BIG BIG'
}
Key  區分大小寫	區分大小寫	

Collection 一組Document	

NoSQL = Not Only SQL RDBMS 1970 数据建模和应用程序编程	 客户服务器编程
结构化数据存储 数据库革命性运动 2009
关系型数据库遵循ACID规则  - 高度组织化结构化数据
transaction 
 A (Atomicity) 原子性  要么全部做完,要么都不做
 C (Consistency) 一致性  事务的运行不会改变数据库原本的一致性约束
 I (Isolation) 独立性  并发的事务之间不会互相影响
 D (Durability) 持久性

分布式系统是建立在网络之上的软件系统
内聚性和透明性 高内聚性代表低耦合性
可靠性(容错) 可扩展性:资源共享:灵活性:
更快的速度:更快的速度:更高的性能: 
集中式计算机网络集群

超大规模数据的存储 不需要固定的模式 横向扩展 
横向扩展  没有预定义的模式 1998年
Key-Value Stores和文档数据库的优点,而不是单纯的反对RDBMS
 CAP定理(CAP theorem) 布鲁尔定理(Brewer's theorem)
 一致性(Consistency) (所有节点在同一时间具有相同的数据)
 可用性(Availability) (保证每个请求不管成功或者失败都有响应)
 分隔容忍(Partition tolerance) (系统中任意信息的丢失或失败不会影响系统的继续运作)
BASE:Basically Available, Soft-state, Eventually Consistent
C++语言	基于分布式文件存储的开源数据库系统 高负载	 WEB应用 高性能数据存储解决方案
MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成

在这里插入图片描述

 索引  查询表达式
 MongoDB 工具 监控 GUI
 MongoDB 下载
 创建数据目录

数据存储目录 日志文件目录
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --fork
tail -10f /var/log/mongodb/mongod.log
--dbpath 设置数据存放目录
--logpath 设置日志存放目录
--fork 在后台运行
文档、集合、数据库

在这里插入图片描述
在这里插入图片描述

"show dbs" 命令可以显示所有数据的列表。
执行 "db" 命令可以显示当前数据库对象或集合
运行"use"命令,可以连接到一个指定的数据库。

文档是一组键值(key-value)对(即 BSON)
MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型

在这里插入图片描述

文档(Document)
集合 文档组
元数据
数据库的信息是存储在集合中
dbname.system.*

在这里插入图片描述

MongoDB 数据类型

在这里插入图片描述
在这里插入图片描述

BSON 字符串都是 UTF-8 编码。
mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]
mongodb://localhost
mongodb://admin:123456@localhost/
mongodb://fred:foobar@localhost/baz
创建数据库 use DATABASE_NAME
删除数据库 db.dropDatabase()
删除集合 db.collection.drop()
创建集合 db.createCollection(name, options)
查看已有集合  show collections 或 show tables 
db.createCollection("mycol", { capped : true, autoIndexId : true, size : 
   6142800, max : 10000 } )
删除集合  db.collection.drop()
插入文档
db.COLLECTION_NAME.insert(document)
或
db.COLLECTION_NAME.save(document)  # 该方法新版本中已废弃
db.collection.insertOne() 或 db.collection.replaceOne() 
db.collection.insertOne(
   <document>,
   {
      writeConcern: <document>
   }
)
db.collection.insertMany(
   [ <document 1> , <document 2>, ... ],
   {
      writeConcern: <document>,
      ordered: <boolean>
   }
)
更新文档
	db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
db.col.find().pretty()
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)
删除文档
db.collection.remove(
   <query>,
   <justOne>
)
如删除集合下全部文档:
db.inventory.deleteMany({})
删除 status 等于 A 的全部文档:
db.inventory.deleteMany({ status : "A" })
删除 status 等于 D 的一个文档:
db.inventory.deleteOne( { status: "D" } )
db.collection.find(query, projection)

在这里插入图片描述

>db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()
db.col.find({likes : {$gt : 100}})
$type 操作符
db.COLLECTION_NAME.find().limit(NUMBER) 
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
>db.COLLECTION_NAME.find().sort({KEY:1})
>db.collection.createIndex(keys, options)
>db.col.createIndex({"title":1,"description":-1})
1、查看集合索引
db.col.getIndexes()
2、查看集合索引大小
db.col.totalIndexSize()
3、删除集合所有索引
db.col.dropIndexes()
4、删除集合指定索引
db.col.dropIndex("索引名称")
MongoDB 聚合
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
MongoDB 复制(副本集)

在这里插入图片描述

mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"
mongod --port 27017 --dbpath "D:\set up\mongodb\data" --replSet rs0
rs.initiate() 启动一个新的副本集
rs.conf()来查看副本集的配置
查看副本集姿态使用 rs.status() 命令
rs.add()方法来添加副本集的成员
rs.add(HOST_NAME:PORT)
db.isMaster() 

分片技术

在这里插入图片描述

mongodump
mongodump -h dbhost -d dbname -o dbdirectory
mongorestore -h dbhost -d dbname --directoryperdb dbdirectory
mongostat 和 mongotop 两个命令来监控MongoDB的运行情况
1:1 (1对1)
1: N (1对多)
N: 1 (多对1)
N: N (多对多)
嵌入式关系
引用式关系

MongoDB 查询文档使用 find() 方法
find().pretty()方法 查询出来的数据在命令行中更加美观的显示,不至于太紧凑
db.collection.find(query, projection)	
AND 条件
db.col.find({key1:value1, key2:value2}).pretty()
OR 条件
	db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()
	
更为灵活的文档来作为数据模型用来取代RDBMS中的行
大数据领域
数据库表中的字段名称、字段类型、进行规定
数据的完整性
MongoDB不支持事务
database ==> 数据库;

collection ==> 集合(表);

document ==> 文档(数据记录);

field ==> 域(数据字段);

index ==> 索引;

primary key ==> 主键,MongoDB自动将_id字段设置为主键。
创建数据库
use databasename
db.getName()
show dbs;
db
 db.mongotest.insert({"id":10001,"name":"tianyongtao","regtime":Date()})
 db.dropDatabase()
 db.createCollection("userinfo")
 show collections
 db.recharge.drop()
  db.collection.insertOne():向指定集合中插入一条文档数据
  db.collection.insertMany():向指定集合中插入多条文档数据
更新
	db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );
db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );
db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );
db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );
db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );
db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
>db.COLLECTION_NAME.find().sort({KEY:1})


MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统
分布式文件存储的NoSQL数据库
可扩展的高性能数据存储解决方案
模式自由
面向集合的存储:适合存储 JSON风格文件的形式

在这里插入图片描述

	基于分布式文件存储的数据库
	WEB 应用提供可扩展的高性能数据存储解决方案
	介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库
	NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"
	关系数据库管理系统(RDBMS)
	数据建模和应用程序编程更加简单
	关系模型是非常适合于客户服务器编程
	结构化数据存储
	ACID规则

 Linux 平台依赖包
 yum install libcurl openssl
 wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz    # 下载
 tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz                                    # 解压
 mv mongodb-src-r4.2.8  /usr/local/mongodb4                          # 将解压包拷贝到指定目录
 export PATH=/usr/local/mongodb4/bin:$PATH
 tar -zxvf mongodb-linux-x86_64-rhel62-4.4.2.tgz
 rpm -qa | grep openssl
  cd /usr/lib64


创建仓库文件:
vi /etc/yum.repos.d/mongodb-org-3.4.repo


https://www.cnblogs.com/layezi/p/7290082.html

在这里插入图片描述
在这里插入图片描述

MongoDB的单个实例可以容纳多个独立的数据库,
每一个都有自己的集合和权限,
不同的数据库也放置在不同的文件中
use local
db
mongodb://fred:foobar@localhost
mongodb://fred:foobar@localhost/baz
replica pair
use DATABASE_NAME
db.runoob.insert({"name":"菜鸟教程"})
db.dropDatabase()
db.dropDatabase() 	
db.createCollection(name, options)

在这里插入图片描述
在这里插入图片描述

	启动配置参数

在这里插入图片描述

mongo server_ip:port/dbname -u user -p password
db.collection.insert(document)
use database_name
db
show dbs
db.collection.insert(document)
db.user.find().pretty()
db.user.remove({})
db.collection.find(query, projection)
db.user.find({"addr":"ShenZhen","age":25},{"_id":0}).pretty()
范围操作符

在这里插入图片描述

db.col.find(
   {
      $or: [
	     {key1: value1}, {key2:value2}
      ]
   }
).pretty()
db.user.find({$or:[{"addr":"ShenZhen"},{"age":{$gte:30}}]}).pretty()

db.collection.find().sort({KEY:1})
db.collection.aggregate(AGGREGATE_OPERATION)
db.user.aggregate([{$group:{_id:{userAddr:'$addr'},totalCount:{$sum:1}}}])
	db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
db.user.update({'name':'chenyurong'},{$set:{'age':25}})
	db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)
查看当前数据库:db
查看所有数据库:show dbs
查看当前数据库所有集合(表格):show collections
可扩展的高性能数据存储解决方案
WEB 应用
分布式文件存储的数据库

在这里插入图片描述

Robo3T数据库可视化工具
	db.getCollection('test_data_1').insertOne(
    {
        "name":8888,
        "address":"changsha"
    }
)
db.getCollection('test_data_1').insertMany([
        {
            "name":"名字1",
        },
        {
            "name":"名字2",
        },
        {
            "address":"湖南"
        },
    ]
)
db.getCollection('test_data_1').find({})
db.getCollection('test_data_1').find({"字段1":"固定值1","字段2":"固定值2"})
db.getCollection('test_data_1').find(
    {
        "字段1":{"操作符1":边界1,"操作符2":边界2},
     	"字段2":{"操作符1":边界1,"操作符2":边界2}
    }
)
db.getCollection('test_data_1').find(用于过滤的条件,用于限定的条件)
db.getCollection('test_data_1').find({}).count()
db.getCollection('test_data_1').find({}).limit(限制返回的数量)
db.getCollection('test_data_1').find({}).sort({"字段名":-1或者1})
db.getCollection('test_data_1').updateMany(
    // 下面是查询条件
    { 
       "字段名1":"查找条件1","字段名2":"查找条件2"
     },
   // 进行修改
    {
        "$set":{"字段名":"新的数据","字段名":"新的数据"}
    } 
)
db.getCollection('test_data_1').deleteMany(
    // 删除的条件
    {
        "字段名1":"值","字段名2":"值2"
    }
)
db.getCollection('test_data_1').distinct(去重的字段名,去重的条件)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值