mongo db基础


程序 = 算法 + 数据
外存储器存储数据: 文件,数据库
数据存储的发展
文件管理阶段(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是哪一类


Mongodb


1.分布式的文档型NoSQL 
2.由c++编写的
3.支持数据格式比较松散,是类似json的Bson格式
4.最类似与关系型数据库的非关系型数据库

    {

        field1:value1,

        field2:value2,

        ....

        fieldn:valuen,

       }


特点:

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

* 如果负载增加方便扩展

* 支持的查询操作相对其他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

show dbs #查看库


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
ex:
    use mydb

    show dbs

    show collections  查看集合(表)== show tables
注意:只是使用use的时候并不会创建数据库,
      当向数据库写入数据时数据看才会真正创建

db.movie.insert({'name':'rick'}) == var m ={'name':'rick'}   db.movie.insert(m)

show dbs #有值


数据库的命名规则
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.集合名不要和保留字重名,不要包含'$'

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

{
"_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位   计数器






  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值