NoSQL 数据库与传统的关系型数据库相比,它具有操作简单、完全免费、源码公开、随时下载等特点,并可以用于各种商业目的。

这使 NoSQL 产品广泛应用于各种大型门户网站和专业网站,大大降低了运营成本。其中风头最劲的莫过于 MongoDB 了。

非关系型数据库和关系型数据库区别

非关系型数据库的优势

  1. 性能

    NoSQL 是基于键值对的,可以想象成表中的主键和值的对应关系,而且不需要经过 SQL 层的解析,所以性能非常高。

  2. 可扩展性

    同样也是因为基于键值对,数据之间没有耦合性,所以非常容易水平扩展。

  3. 适用于存储杂乱无章的数据,如网页数据

关系型数据库的优势

  1. 复杂查询

    可以用SQL语句方便的在一个表以及多个表之间做非常复杂的数据查询。

  2. 事务支持

    使得对于安全性能很高的数据访问要求得以实现。

对于这两类数据库,对方的优势就是自己的弱势,反之亦然。

NoSQL 数据库分类

  1. 文档存储: 文档存储一般用类似 json 的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。如 MongoDB、TableStore
  2. 键值存储:可以通过 key 快速查询到其 value。一般来说,存储不管 value 的格式,照单全收。如 Redis、Memcached

MongoDB

  1. 基本说明

    • 占用端口:27017
    • 配置文件路径:/usr/local/etc/mongod.conf
    • mongo: 进入命令模式
    • MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
    • MongoDB 中存储的文档必须有一个 _id 键。这个键的值可以是任何类型的,默认是个 ObjectId 对象由于 ObjectId 中保存了创建的时间戳,所以你不需要为你的文档保存时间戳字段,你可以通过 getTimestamp 函数来获取文档的创建时间.
    • 在 MongoDB 中,你不需要提前创建集合。当你插入一些文档时,MongoDB 会自动创建集合。
    • 分页功能:基于Skip分页和有序字段查询分页两种方案进行的对比,后者说白了只是利用查询结果不用依次数数来提高了性能,Skip虽然效率低一些但是通用一些。
    • 不支持多表联合查询和事务查询
    • 注意:MongoDB 默认直接连接,无须身份验证,如果当前机器可以公网访问,且不注意 Mongodb 端口(默认 27017)的开放状态,那么 Mongodb 就会产生安全风险,被利用此配置漏洞,入侵数据库。
  2. MacOS 下 MongoD 第一次创建root用户流程

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    
    $ brew services start mongodb
    $ mongo
    > use admin
    > db.createUser({ user: "root" , pwd: "root", roles: [{role:  "root", db: "admin"}]})  # 创建超级用户
    > db.auth('root', 'root')  # 验证用户是否设置成功,1为成功
    $ vi /usr/local/etc/mongod.conf  # 更改mongodb配置文件
    
    # 配置文件开启强制验证,增加如下内容:
    security:
    authorization: "enabled"
    $ brew services restart mongodb
    
  3. MongoDB 创建新项目用户流程

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    > mongo -u root -p root --authenticationDatabase admin
    > use test
    > db.createUser({
        user: "yapi",
        pwd: "yapi123456",
        roles: [
            { role: "dbAdmin", db: "yapi" },
            { role: "readWrite", db: "yapi" }
        ]
    });
    
  4. 常用命令

    1
    2
    3
    
    > mongo -u root -p root --authenticationDatabase admin # 验证账号密码是否能正常登陆
    > show users;
    > show dbs;
    

HBase vs Cassandra

  1. HBase: 键值存储,读比写快

    面向大数据领域的一站式NoSQL服务,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库。

  2. Cassandra: 键值存储,写 比 读快

    方便扩展存储;有弹性的模式定义;高写入性能。适用于大量写入的场景。