1、数据存储阶段
1、文件管理阶段(.txt .doc .xls)
优点:
1、数据可以长期保存2、可以存储大量的数据
3、使用简单
缺点:
1、数据一致性差2、数据查找修改不方便
3、数据冗余度可能比较大
2、数据库管理阶段
优点:
将数据组织结构化降低了冗余度提高了增删改差的效率
容易扩展
方便程序调用做自动化处理
缺点:
需要使用SQL 或者 其他特定的语句,相对比较复杂2、几个概念
1、数据
能否输入到计算机中并被识别处理的信息集合2、数据结构
研究一个数据集合中数据之间关系的3、数据库
按照数据结构,存储管理数据的仓库.数据库是在数据库管理系统管理和控制下,在一定介质上的数据集合4、数据库管理系统
管理数据库的软件,用于建立和维护数据库5、数据库系统
由数据库和数据库管理系统,开发工具等组成的集合3、关系型数据库与非关系型数据库
1、关系型数据库
采用关系模型来组织数据结构的数据库(二维表)Oracla(甲骨文) DB2 SQLServer MySQL SqLite(python 标准库支持)
优点:
1、容易理解,类似我们常见的表格2、使用方便,都是使用SQL语句,SQL语句非常成熟
3、数据一致性高,冗余度低,完整性好
4、技术成熟,可是使用外部连接等复杂的操作
缺点:
1、不能很好的满足高并发的需求,每次都需要进行SQL语句的解析2、针对海量数据瞬间爆发读写性能不足,关系型数据库内部每步操作都需要加锁,保证操作的原子性
3、数据扩展普遍比非关系型困难
4、数据一致性高,有时会浪费大量空间
2、非关系型数据库(NoSql ----> Not only Sql)
优点:
1、高并发,大数据读写能力强2、支持分布式,容易扩展
3、弱化了数据结构,降低了数据的一致性
缺点:
1、通用性差,没有像SQL语句那样一致的操作2、操作灵活,容易混乱
3、没有join,有的数据库没有事物支持等操作
4、NoSql的使用情况:
1、数据一致性低2、数据库并发处理要求高
3、数据库设计时对大小的估算不确定,需要分布拓展
4、给定的数据比较容易建立起NoSql的模型
5、NoSql分类:
1、键值型数据库
Redis Oracle BDB Tokyo2、列存储数据库
HBase3、文档型数据库
MongoDB CouchDB4、图形数据库
6、MongoDB(非关系型 --> 文档型数据库)
特点:1、由C++编写的数据库管理系统
2、支持非常丰富的增删改查数据操作
3、支持非常丰富的数据类型
4、使用方便,便于部署,支持分布,容易扩展
5、支持众多的编程语言接口(Python,ruby,C++,C#,PHP)
7、MongoDB 安装
1、自动安装
sudo apt-get install mongodb
默认安装位置:/var/lib/mongodb
默认配置文件:/etc/mongodb.conf
默认安装命令集:/usr/bin 或 /usr/local/bin2、手动安装(Linux)
1、下载MongoDB
www.mongodb.com|
Download
|
community server
|
选择合适版本下载
2、解压选择安装目录解压(建议安装在/usr/local 或 /opt)
tar解压后得到mongodb文件夹3、将文件夹下的命令集目录(bin目录)添加到环境变量
PATH=$PATH:/opt/monge.../bin
export PATH
将以上两句写在/etc/rc.local4、重启系统
8、MongoDB命令
1、mongod 命令
1、设置数据库存储位置
mongod --dbpath 目录2、设置端口号
mongod --port 端口号(如8888)注:如果不设置使用默认端口号27017
2、mongo 命令
进入mongo shell界面 MongoDB的交互界面用来操作数据库退出mongo shell : quit()
3、数据库操作
1、创建数据库
命令:use databasename
示例:
创建一个stu的数据库
use stu
注:
1、use实际功能是表示选择使用哪个数据库,当这个数据库不存在时即表示创建该数据库
2、使用use后数据库并不会马上被创建,而是需要插入数据后数据库才会被创建
2、查看数据库
命令:show dbs
3、变量
1、dbmongo系统全局变量 代表当前系统正在使用的数据库
db 默认为test 如果插入数据即创建test数据库
4、数据库的检测命令
1、监测数据库的状态
命令:mongostat
显示的字段含义:
insert query update delete :每秒增查改删的次数
增 查 改 删
getmore command :每秒运行命令次数
dirty used flushes :每秒操作磁盘的次数
vsize res :使用虚拟内存和物理内存的情况
虚拟内存 物理
2、监测每个数据库的读写时长
命令:mongotop
显示的字段含义:
ns total read write
数据集合 总时长 读时长 写时长
5、数据库的备份和恢复
1、备份
命令:mongodump -h dbhost -d dbname -o dbdir(目标路径)
示例:
mongodump -h 127.0.0.1 -d stu -o student
将本机下stu数据库被分到当前目录的student文件夹中,
会在student文件夹中自动生成一个stu文件夹为备份文件
结果:
tarena@tedu:~$ ls student/stu/
class1.bson class1.metadata.json
2、恢复
命令:mongorestore -h <dbhost>:<port> -d dbname <path>(备份文件夹的位置)
示例:
mongorestore -h 127.0.0.1:27017 -d test student/stu/
将student文件夹下的备份文件stu恢复到本机的test数据库
结果:
> use test
switched to db test
> show tables
class1
> db.class1.find()
{ "_id" : ObjectId("5b03b85a96e1ba6c12878799"), "name" : "Lily", "age" : 17 }
6、删除数据库
命令:db.dropDatabase()
删除db所代表的数据库
7、集合
1、创建集合
1、查看数据库中集合
命令:show tables
show collections
2、集合命名规则:
1、不能有空字符串,不能有'\0'2、不能以system.开头 这是系统集合的保留前缀
3、不能和保留字重复
3、、创建集合
1、方法一
命令:db.createCollection(collection_name)
示例:
db.createCollection('class2')
在当前数据库下创建一个名为class2的集合
2、方法二
当向一个集合插入一个文档时,如果该集合不存在则自动创建命令:
db.collectionName.insert()
示例:
db.class0.insert({a:1})
如果class0不存在则会创建class0集合并插入数据
2、删除集合
命令:db.collectionName.drop()
示例:
db.class0.drop()
删除class0集合
3、集合重命名
命令:db.collectionName.renameCollection('new_name')
示例:
db.class2.renameCollection('class0')
将class2重命名为class0
8.数据库插入数据
1、insert
1、插入一条文档
命令:db.collectionName.insert()
示例:
db.class0.insert({'name':'Lily','age':15,'sex':'w'})
或
db.class0.insert({name:'Lily',age:15,sex:'w'})
注:
当作为文档插入时键可以不加引号
2、插入多条文档
命令:db.collectionName.insert([{},{},{}])
示例:
db.class0.insert([{name:'阿花',age:28},{name:'阿红',age:26},{'name':'阿彪',age:23}])
注:
_id为系统自动添加主键,如果自己写_id域则会使用自己写的值。但是改制仍不允许重复
2、seve 插入数据
命令:db.collectionName.save()
示例:
db.class0.save({_id:1,name:'bajie',age:15,sex:'m'})
注:
1、在不加_id时使用同insert
2、如果使用save插入的时候加了_id,则如果_id值不存在则正常插入,如果该值存在,则修改原来内容
3、save无法一次插入多个文档
3、查看插入结果:
命令:db.collectionName.find()
示例:
db.class0.find()
9、组成结构
键值对|
文档
|
集合
|
数据库
示例:
MySQL表:
-----------------------------
ID | name | age
-----------------------------
1 | Lily | 17
-----------------------------
2 | Lucy | 18
-----------------------------
MongoDB中个表现形式
{
'_id':ObjectId('abcd1234afhkasyr'),
'name':'Lily',
'age':17
}
{
'_id':ObjectId('abcd1234afhkasyr'),
'name':'Lucy',
'age':18
}
10、MySQL 和 MongoDB 概念对比
序号 | MySQL | MongoDB | 含义 |
| 1 | database | database | 数据库 |
| 2 | table | collection | 表/集合 |
| 3 | column | field | 字段/域 |
| 4 | row | document | 记录/文档 |
| 5 | index | index | 索引 |
11、数据库名称规则
1、原则上是任意满足以上几条的utf-8字符2、不能是空字符,不能含有空格 点 '/' '\' '\0'
3、习惯上使用英文小写
4、长度不超过64字节
5、不能使用admin local config 这样的名字
12、系统数据库作用
admin : 存储用户local : 存储本地数据
config :存储分片配置信息
13、文档
1、MongoDB 中文档的组织形式
键值对组成文档 ----> 类似Python中的字典bson ----> json ---->JavaScript
MongoDB中文档的数据组织形式为bson格式,类似Python的字典,也是由键值对构成
2、文档中键的命名规则:
1、utf-8格式字符串2、不能有'\0' ,习惯上不用.和$
3、以_开头的多为保留建,自定义时一般不以_开头
注意:
1、文档键值对是有序的
2、MongoDB中严格区分大小写
3、文档中的值
任何MongoDB的支持数据类型4、MongoDB支持的数据类型
| 序号 | 类型 | 值 | 示例 |
|---|---|---|---|
| 1 | 整型 | 整数 | |
| 2 | 布尔类型 | true false | |
| 3 | 浮点型 | 小数 | |
4 | Arrays | 数组类型 | [1,2,3] |
| 5 | Timestamp | 时间戳 | |
| 6 | Date | 时间日期 | |
| 7 | Object | 内部文档 | |
| 8 | Null | 空值 | |
| 9 | Symbol | 特殊字符 | |
| 10 | String | 字符串 | |
| 11 | Binary data | 二进制字串 | |
| 12 | code | 代码(js代码) | |
| 13 | regex | 正则表达式 | |
| 14 | ObjectId | ObjectId字串 |
5、ObjectId:
作用:系统自动为每个文档生成的不重复的主键
键名称:
_ID
值 :
ObjectId('...')
ObjectId('...')的构成
24位16进制数
前八位:
文档创建时间
6位
机器ID
4位
进程id
最后六位
计数器
6、
文档中的键 ----> 域/字段文档中的值 ----> 记录
7.集合中文档特点
1、集合中的文档域不一定相同 不保证数据的一致性
2、文档中的结构不一定相同
8、集合的设计原则
1、集合中的文档尽可能描述的数据类似2、同一类文档放在相同的集合,不同的文档分集合存放
3、层次的包裹不宜太多

本文介绍了数据存储的发展,从文件管理到数据库管理,深入探讨了关系型和非关系型数据库,特别是MongoDB作为非关系型文档型数据库的特性。内容包括MongoDB的安装、命令操作如创建数据库、插入数据、备份恢复等,以及与MySQL的对比,文档组织形式和设计原则。
4756

被折叠的 条评论
为什么被折叠?



