学习笔记☞ MongoDB(芒果数据库) ☞【SQL数据库与NoSQL数据库介绍,MongoDB命令】

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

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  Tokyo
    2、列存储数据库
        HBase
    3、文档型数据库
        MongoDB CouchDB
    4、图形数据库

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/bin

    2、手动安装(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.local

        4、重启系统


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、db
                mongo系统全局变量 代表当前系统正在使用的数据库
                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 概念对比

序号

MySQLMongoDB含义
1databasedatabase 数据库
2tablecollection表/集合
3columnfield字段/域
4rowdocument记录/文档
5indexindex索引

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支持的数据类型

        
MongoDB支持的数据类型
序号类型示例
1整型整数 
2布尔类型true false 
3浮点型小数 

4

Arrays数组类型[1,2,3]
5Timestamp时间戳 
6Date时间日期 
7Object内部文档 
8Null空值 
9Symbol特殊字符 
10String字符串 
11Binary data二进制字串 
12code代码(js代码) 
13regex 正则表达式 
14ObjectIdObjectId字串 

    5、ObjectId:

        作用:
            系统自动为每个文档生成的不重复的主键
        键名称:
            _ID
        值   :
            ObjectId('...')
        ObjectId('...')的构成
            24位16进制数
            前八位:
                文档创建时间
            6位
                机器ID
            4位
                进程id
            最后六位
                计数器

    6、

        文档中的键 ----> 域/字段
        文档中的值 ----> 记录

    7.集合中文档特点


        1、集合中的文档域不一定相同  不保证数据的一致性
        2、文档中的结构不一定相同

    8、集合的设计原则

        1、集合中的文档尽可能描述的数据类似
        2、同一类文档放在相同的集合,不同的文档分集合存放
        3、层次的包裹不宜太多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值