专业编程基础技术教程

网站首页 > 基础教程 正文

Mongodb入门 day01

ccvgpt 2024-08-14 15:34:09 基础教程 86 ℃

MongoDB

程序 = 算法 + 数据

Mongodb入门 day01

外存储器存储数据: 文件,数据库

数据存储的发展

文件管理阶段(word excel)

优点:数据可长期保存,能存储大量数据。

使用一般比较简单

缺点:数据冗余大,数据一致性差,完整性难以维持。

查找修改不方便

数据库系统阶段

数据组织化结构好,冗余度变小,容易扩充,

方便程序自动处理。查找效率高

几个概念:

数据:能够输入到计算机并被识别和处理的信息集合

数据库:是按照数据结构组织,存储,和管理的仓库。

是在数据库管理系统管理和控制下存放在一定

介质上的数据集合

数据库管理系统:管理数据库的软件。用于建立,使用,

维护数据库结构内容。

数据库系统:是由数据库,数据库管理系统,开发工具等

共同构成的一个集合概念

关系型数据库

采用关系模型来组织数据结构的数据库

Oracle DB2 SQLServer MySql sqlite

优点:

* 容易理解

* 使用方便,通过sql语句操作,而sql语句是非常成熟的

* 易于维护,完整性好,降低了数据冗余,数据一致性高

* 通用化程度高,技术成熟,可以使用外联操作

缺点:

*无法很好满足高并发需求:数据的每次操作都需要sql

语句的解析,导致高并发下读写性能不足

*针对海量数据的瞬间爆发,数据库系统在性能上显得

力不从心,因为关系型数据库的每一步操作都需要加锁

* 扩展性不足。在关系型数据库中普遍难以横向扩展。当

数据增加到一定程度,现有数据库无法容纳很难通过添加

硬件和节点进行扩充。

非关系型数据库(NoSQL -》 not only sql )

优点:

* 高并发,大数据下的读写能力强

* 支持分布式,易于扩展

* 弱化数据结构,数据结构简单

缺点:

* 缺少join等复杂操作的功能

* 通用性差

* 结构的灵活也需要更灵活的操作,容易混乱,没有

标准的语句(类似于sql)

面试要求1 :能够描述关系型数据库和非关系型数据库的

优缺点

Nosql的使用情况

1.数据模型简单

2.对数据的一致性要求低

3.对数据库的并发处理性能要求高

4.对数据库的扩展性有一定需求

5.给定key可以比较方便映射数据结构

非关系型数据库的分类

*键值存储数据库

Redis 、oracle BDB 、Tokyo

* 列存储数据库

HBase

* 文档型数据库

键值型数据库的升级版,在原有数据存储基础上进行了扩充

Mongodb、CouchDB

* 图形数据库

要求:知道Nosql分为几类,mongo是哪一类

10:40

Mongodb

1.分布式的文档型NoSQL

2.由c++编写的

3.支持数据格式比较松散,是类似json的Bson格式

4.最类似与关系型数据库的非关系型数据库

特点:

* 高性能,易部署,存储方便

* 如果负载增加方便扩展

* 支持的查询操作相对其他Nosql非常丰富

* 支持众多编程语言接口(ruby,python,c++,c#,PHP)

* 使用bson格式存储

存储微信朋友圈和评论

用户 朋友圈 评论表

mongodb数据库的安装

自动安装

sudo apt-get update

sudo apt-get install mongodb

那么默认数据库创建位置 /var/lib/mongodb

配置文件位置 /etc/mongodb.conf

mongo 命令位置 /usr/bin 这个目录一定是环境变量

手动安装

1.下载对应版本的 mongodb文件包

2.将文件包移动到某个目录下(/usr/local /opt)

3.解压文件包

tar -xvf mongodb-linux-x86_64-ubuntu1604-3.4.10.tgz

4. 解压后进入文件夹将bin目录添加到环境变量

在 /etc/bash.bashrc 加上

PATH=$PATH:/ect/local/mongdb-..../bin/

export PATH

或者在/etc/rc.local添加

5.添加后重启环境

source /etc/bash.bashrc

6.设置数据库默认路径

sudo mkdir -p /data/db

mongodb 命令

启动mongod服务

mongod --dbpath /xxx/yyy 指定数据库路径

--port 8888 指定端口号

启动mongo shell

mongo

注意:支持JavaScript代码

默认使用端口号27017

mongo的一些概念

mysql mongodb 含义

database database 数据库

table collection 表/集合

row document 记录/文档

column field 字段/域

index index 索引

primary key primary key 主键 mongo中自动添加主键

-------------------

id | name | age

-------------------

1 | Lily | 10

-------------------

2 | Lucy | 11

-------------------

{

"_id":ObjectId("3j2k45hkjh2k3hj52"),

"name":"Lily",

"age":10

}

{

"_id":ObjectId("3j2k45hkasdf89as7"),

"name":"Lucy",

"age":11

}

数据库创建

use databasename

创建一个名字为stu的数据库

use stu

注意:只是使用use的时候并不会创建数据库,

当向数据库写入数据时数据看才会真正创建

数据库的命名规则

1. 数据库的名字可以是满足以下条件的任意UTF-8字符串

2. 不能是“”空字符串

3. 不能含有 空格(‘ ’) 点(.) '/' '\' '\0'

4. 应全部小写

5. 不要超过64个字节

6. 不要使用admin local config这三个名字

admin : 存储用户和权限

local : 不会被复制,只能用于本地单台服务器访问

config : 分片处理的时候,保存分片信息

quit() 退出mongo shell

show dbs 显示当前系统中的数据库

db 表示一个全局性变量,显示当前正在use的数据库

如果没进行任何use操作那表示test(系统自动创建)

数据库的备份和恢复

备份: mongodump -h dbhost -d dbname -o dbdir

e.g. mongodump -h 127.0.0.1 -d stu -o student

恢复

mongorestore -h <hostname>:<port> -d dbname <path>

e.g.

mongorestore -h 127.0.0.1:27017 -d student student/stu

数据库检测

mongostat

insert(每秒插入次数) query(每秒查询次数) update(每秒更新次数) delete(每秒删除次数) getmore command(统计每秒运行多少命令) dirty used flushes(每秒向硬盘写入次数) vsize(使用的虚拟内存) res(使用的物理内存) qrw arw net_in net_out conn 当前连接数

mongotop

检测每个数据库的读写时长

删除数据库

db.dropDatabase()

e.g.

db.dropDatabase() 删除当前使用数据库

集合的创建

db.createCollection(collection_name)

e.g.

创建一个叫class2的空集合

db.createCollection('class2')

展示当前数据库中的所有集合

show collections

集合就是mongo当中文档组

集合存放文档的基本原则

* 同一类文档应该集中存储,便于管理

* 集合中可以使用不同格式的文档。

* 集合中集中存储格式类似的文档,可以提高访问效率。

集合的命名规则

1.不能是空字符串

2.不能含有‘\0’

3.不能以‘system.’开头。这个是系统保留集合的前缀

4.集合名不要和保留字重名,不要包含'$'

{

"_id":ObjectId("3j2k45hkjh2k3hj52"),

"name":"Lily",

"age":10

}

{

"_id":ObjectId("3j2k45hkasdf89as7"),

"name":"Lucy",

"age":11,

'sex':'m'

}

创建集合2

当向一个集合中插入一条文档,集合会被自动创建。这也是我们通常使用的一个方法

db.collection_name.insert()

e.g.

db.class3.insert({'name':'wangwu','age':15,'sex':'m'})

删除集合

db.collection_name.drop()

e.g.

db.firstclass.drop()

文档

bson格式的数据

bson 是 json的进化版本

姓名 : 张三

联系电话 : xxxx

住址 : xxxx

{‘name’:‘lili’,‘age’:13}

文档的键命名规则:

1.一般来说是utf-8格式的字符串

2.键中不能有‘\0’,不能是空字符

3. 一般不会用 . 和 $

4. 一般以_开头的都是保留的键,所以尽量不用_开头

注意事项:

* 文档的键值对是有序的

* 文档中的值,指的就是文档支持的数据类型

* Mongodb区分大小写

* 键不能有重复

mongo支持的数据类型:

字符串 utf-8格式的字符串是合法的

整型 分为 32位整型 64位整型

布尔 真 假

浮点型 存储小数

Arrays 用来存储列表或者数组

Timestamp 时间戳

Object 内部文档 {‘dic’:{}}

Null 空值

Symbol 同字符串类型,但是多用于存储特殊符号语言

Date 日期时间

ObjectId objectid子串

ObjectId("5a6055574dd45d1bce06c382")

Binary data 二进制数据

code 代码,js代码

regex 正则表达式

ObjectId("5a6055574dd45d1bce06c382")

24个十六进制数 用作系统自动生成的 _id (key)

前8位 文档创建的时间

6位 机器ID

4位 进程 id

6位 计数器

插入文档 (db.class2.find()查看插入情况)

db.collectionName.insert()

e.g.:

db.class2.insert({name:'zhang',age:12,sex:'m'})

注意:插入文档时域名可以不加引号

插入多条数据:

db.collectionName.insert([{},{},....])

e.g.:

db.class2.insert([

{name:'wangwu',age:14,sex:'m'},

{name:'xiaohong',age:13}

])

注意 : 如果插入时自己设置 _id 域则系统将不会再添加_id值。但是_id任然是主键,不能重复,否则报错

db.collectionName.save()

当不加_id时插入数据和insert相同

当插入文档有_id时,如果该_id不存在则正常插入。如果该_id存在,则变为修改原有数据

save插入数据方法,不能一次插入多条,如果想插入多条只能借助循环语句或程序

e.g.

db.class3.save({'_id':1,name:'huairen'})

作业 :

1.练习mongo数据库,集合,创建删除语句。

2.对文档熟练插入。

3.对比关系型数据库,能够描述非关系型数据库特点

4.复习进程线程网路代码

Tags:

最近发表
标签列表