MongoDB day01
MongoDB芒果数据库
数据存储阶段
文件管理阶段(.txt .doc .xlc)
优点:数据可以长期保存;数据有一定格式化规范;可以大量存储;使用简单方便
缺点:数据一致性差;用户查找修改不方便;数据冗余
数据库管理阶段
优点:数据组织结构化,降低了冗余;提高了增删改查的效率;便于扩展,方便程序调试做自动化处理
缺点:数据库的使用专业性较强,相对比较复杂
几个概念
数据:能够输入到计算机中并被识别处理的信息的集合
数据结构:研究组成数据集合中数据之间关系的学科
数据库:按照数据结构,存储管理数据的仓库。是在数据管理系统软件软件管理和控制下创建在一定介质上的数据集合
数据管理系统:数据管理软件,用于维护管理数据库
数据库系统:用数据库,数据库管理系统,开发工具等组成的工具
关系型数据库(Oracle、DB2、SQLServer、Mysql、sqlite)
采用关系模型来组织数据结构的数据库(二维表)
优点:容易理解,逻辑类似常见的表格;使用方便,都是用sql语句,sql语句非常成熟;数据一致性高,冗余低,完整度号;技术成熟,可以使用外部链接等复杂操作
缺点:每次操作都需要SQL语句解析,消耗较大;不能很好的满足并发需求,应对海量数据爆发力不从心;关系型数据库内存存在大量的加锁操作,读写能力受到限制;数据不够灵活,有时会导致结构复杂化
非关系型数据库 (NoSql --》 not only sql)
优点:高并发,读写能力强、扩展性强、使用灵活、弱化了数据结构、降低数据一致性
缺点:通用性差,并没有sql那样统一的操作语句;操作灵活,容易混乱;没有join等复杂操作,版本更新快
Noaql的使用情况
1、数据的一致性要求低
2、处理数据的海量并发
3、数据库大小不容易确定。需要分布扩展
4、给定的数据结构构建立非关系模型更加容易
Nosql分类:
键值数据库 Redis
列存储数据库
文档数据库 MongoDB
图形数据库
MongoDB数据库(非关系型数据库------》 文档型数据库)
1、由c++编写的数据库管理系统
2、支持丰富的增删改查功能
3、支持丰富的数据类型
4、支持众多的编程语言结构(python php c++ js C#)
5、在NoSql中技术相对比较成熟
MongoDB安装
自动安装
sudo apt-get install mongodb
默认安装路径:/var/lib/mongodb
配置文件:/etc/mongodb.conf
命令集:/usr/bin /usr/local/bin
whereis 软件名:查看一个软件的位置
手动安装
1、下载合适版本的mongodb
www.mongodb.com ---> get Mongodb --> community server
2. 选择合适的位置解压 (/usr/local /opt)
解压后得到mongodb文件夹
3. 将文件夹下bin文件夹加入到环境变量
(bin中就是命令集)
PATH=$PATH:/opt/mongodb.../bin
export PATH
将以上两句写入 /etc/rc.local
4. 重启系统
mongodb命令
mongo --dbpath 目录 设置数据库的存储位置 e.g. mongdb --dbpath dbs
mongo --port 8080 设置数据库的端口,默认是27017
mongo 进入mongo shell,mongodb的交互模式,用于操作mongodb数据库,
quit()或者ctrl+c 退出mongo shell
mongodb数据组成结构
组织结构:键值对----》文档-----》集合-----》数据库
--------------------------------------
ID | name | age
---------------------------------------
1 | Lily | 17
---------------------------------------
2 | Lucy | 18
---------------------------------------
{
"_id":1,
"name":"Lily",
"age":17
},
{
"_id":2,
"name":"Lucy",
"age":18
}
概念对比
mysql 和 mongodb概念比较
mysql mongdb 含义
database database 数据库
table collection 表/集合
column field 字段/域
row document 记录/文档
index index 索引
ues databaseName 创建数据库 e.g. use stu 创建一个叫stu的数据库
* 实际ues是选择使用哪个数据库。当选择的数据库不存在是就会自动创建
* 只有向数据库中插入数据时数据库才会被真实创建出来,而use后不会马上创建
show dbs 查看数据库
系统数据库
admin:存放用户的权限
local:存放本地化数据
config:存放分片信息
数据库的命名规则
1、使用utf-8字符
2、不能含有空格 . / \ '0'字符
3、长度不能超过64字节
4、不能和系统数据库重名
* 习惯上使用小写字母,表达数据库的含义
db:mongo系统全局变量,代表当前正在使用的数据库
* 当不使用use选择任何数据库的时候,db表示test。此时插入数据则创建test数据库
数据库的备份和恢复
备份 mongodump -h dbhost -d dbname -o dbdir
e.g. 将127.0.0.1上的stu数据库备份到bak目录中
mongodump -h 127.0.0.1 -d syu -o bak
恢复 mongostore -h host:port -d dbname dbpath
e.g. 将stu数据库恢复到127.0.0.1上的student数据库中。如果student数据库不存在则自动创建
mongorestore -h 127.0.0.1:27017 -d student bak/stu
数据库的检测命令
mongostat
insert query updata delete:每秒增删改查的次数
command 每秒运行命令的次数
flushes 每秒和磁盘交互的次数
vsize 使用虚拟内存大小
mongotop 检测每个数据读写时长
ns total read write
数据集合 总时长 读时长 写时长
db.dropDatabase() 删除db所代表的数据库
db.createCollection(collection_name) 创建集合,e.g. 创建一个叫class1的集合,db.createCollection('class1')
* 当向这个数据插入数据的时候哦,如果这个集合不存在则自动创建
db.collection.insert(...) e.g.如果class2不存在则创建这个集合并插入数 db,class2.insert({"name":"Lucy","age":18})
show tables 查看集合
show collections 查看集合
集合的命名规则:
1、合法的utf-8字符串
2、不能有'\0'
3、不能以system开头。是系统的保留前缀
4、不能和关键字重复
db.collection.drop() 删除集合 e.g. 删除class2集合 db.class2.drop()
db.collection.renameCollection("new_name") 集合重命名
e.g.将class重命名为class0 db.class.renameCollection("class0")
文档
mongdb中数据的组织形式---》文档
mongodb文档:以键值对的形式组成的类似于字典的数据结构结合。是对数据的一种描述
键:即文档的域
命名规则
1. utf-8 格式字串
2. 不能有'\0'
3. 一个文档中的键不能重复
* 文档中键值对是有序的,mongodb严格区分大小写
值:即文档存储数据,也就是mongodb支持的数据类型
bson ---> json ----> JavaScript
值类型 数值
整型 整数 1 2 3 -1 -3
布尔类型 true false
浮点型 小数 1.234
Array 数组 [1,2,3]
Timestamp 时间戳
Date 时间日期
Object 内部文档
Null 空值 null
String 字符串
Symbol 特殊字符串
Binary data 二进制字符串
code 代码
regex 正则表达式
ObjectId ObjectId对象
ObjectId
"_id" : ObjectId("5b764646d4ff0ad8f415f977")
_id : 如果在插入文档时没有指定_id域,则系统会自动添加该域作为主键。值则是一个ObjectId类型数据
24 位 16进制数 --》 保证所有的_id值的唯一性
8位的 文档创建时间 6位 机器ID 4位 进程id 6位计数器
集合中的文档
* 集合中的文档不一定域的个数相同
* 集合中的文档不一定有相同的域
(关系型数据库: 表决定字段,mongodb中 文档决定域
集合设计原则
1. 集合中的文档应该尽可能描述同一类内容。有更多相同的域
2. 同一类数据信息,不要过多分散集合存放
3. 集合中文档的层次不要包含太多
插入文档
db.collection.insert()
插入单个文档
e.g.
db.class0.insert({'name':"Lucy","age":18})
db.class0.insert({name:"Tom",age:17,sex:'m'})
* 查看插入结果 : db.class0.find()
* 文档中键可以不加引号
* _id为系统自动添加主键,如果自己写也可以,但是不能重复
插入多条文档
db.collection.insert([{},{},{}])
e.g.
db.class1.insert([{name:'阿宝',age:33,sex:'m'},{name:'阿蓉',age:27,sex:'w'},{name:'阿哲',age:32,sex:'m'}])
save 插入文档
db.collection.save()
e.g.
db.class0.save({name:'Davil',age:16,sex:'m'})
db.class1.save([{name:'小白',age:30,sex:'w'},{name:'小陈',age:34,sex:'m'}])
* 如果不适用_id则save用法同insert一样
* 如果加_id项,此时文档已经存在时则会替换原有文档
MongoDB day01的更多相关文章
- day01 mysql认识 安装 配置 起服务 密码 字符集 用户授权
day01 mysql 一.认识mysql 关系型数据库: 最流行的关系型数据库管理系统,支持大型数据库,处理上千万条记录 关系型: oracle, ...
- day01 MySQL发展史
day01 MySQL发展史 今日内容概要 数据库演变史 软件开发架构 数据库本质 数据库中的重要概念 MySQL下载与安装 基本SQL语句 今日内容详细 数据库演变史 # 1.文件操作阶段 jaso ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- MongoDB系列(二):C#应用
前言 上一篇文章<MongoDB系列(一):简介及安装>已经介绍了MongoDB以及其在window环境下的安装,这篇文章主要讲讲如何用C#来与MongoDB进行通讯.再次强调一下,我使用 ...
随机推荐
- kali linux下不能以root权限运行vlc的解决办法
习惯了在Linux下面使用VLC播放视频和音乐, 但是 VLC 的 linux 版本并不支持在root下面运行. 终端运行vlc命令报错,错误信息如下 root@kbdancer:~# vlc VLC ...
- Linux:split命令详解
split 可以将一个大文件分割成很多个小文件,有时需要将文件分割成更小的片段,比如为提高可读性,生成日志 语法 split(选项)(file)PREFIX 选项 -b:值为每一输出档案的大小,单位为 ...
- 记录一下前端ajax实现增删改功能的步骤
主要依赖三个按钮:新增,删除,编辑 新增:点击时创建新的LI或者TR并append到父级里,此时无需调动后台接口(如果新增需要弹窗输入val则可以调用): 删除:判断this是否有后台传过来的id值, ...
- iOS限制输入表情(emoji),出现九宫格不能输入的解决方法
在提交数据发送网络请求,由于用户输入了emoji表情,服务端返回系统异常,体验感很差.为了解决服务器不能验证emoji编码的问题,需要在本地进行emoji的输入控制(一般情况应该由服务器在数据库中添加 ...
- 汇编语言---键盘KeyCode值列表
键盘KeyCode值列表 收藏 keycode 0 =keycode 1 =keycode 2 =keycode 3 =keycode 4 =keycode 5 =keycod ...
- vim 强大复制链接
参考文献: http://blog.csdn.net/xiyuan1999/article/details/5680102 vi编辑器中的整行(多行)复制与粘贴就非常必要了. 1.复制 1)单行复制 ...
- 【剑指offer】把二叉树打印成多行,C++实现
原创文章,转载请注明出处! 本题牛客网地址 博客文章索引地址 博客文章中代码的github地址 1.题目 从上到下按层打印二叉树,同一层结点从左至右输出,每一层输出一行.例如:下面二叉树的 ...
- 博客迁移至“零一积流|it-refer.com”
虽然在博客园写了没几篇文章,考虑到个人发展,自己还是建立一个独立的站点:零一积流. 以后直接在自己网站上写东西了,此处只用做文章收藏.
- windows中的oracle12SE后启动的系统服务的列表
下图是我安装在windows 10下安装好oracle12.10SE之后的启动的系统服务的列表. 通常,我是将其全部修改为手动启动.当需要用oracle服务的时候,只需要启动对应的实例的服务和tnsl ...
- Filter学习(二)Filter使用Decorator设计模式
在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目 ...