zoukankan      html  css  js  c++  java
  • 关系型数据,非关系型数据库和文档型数据库

    关系型数据和文档型数据库有什么区别?

    关系数据库(Relational Database)是建立在关系模型基础上的数据库,借助于几何代数等数学概念和方法来处理数据库中的数据。所谓关系模型是一对一、一对多或者多对多等关系支持事务和持久化,关系型数据库都会支持的 ACID 特性,也就是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability),一般遵循三范式设计思想,常见的关系型数据库有 Oracle、SQL Server、DB2、MySQL 等。

    而文档型数据库是一种非关系型数据库,非关系型数据库(Not Only SQL,NoSQL)正好与关系型数据库相反,它不是建立在“关系模型”上的数据库。文档型数据库的典型代表是 MongoDB。

    非关系型数据库和文档型数据库有什么区别?

    非关系型数据和文档型数据库属于包含关系,非关系型数据包含了文档型数据库,文档型数据库属于非关系型数据。

    非关系型数据通常包含 3 种数据库类型:文档型数据库、键值型数据库和全文搜索型数据库,下面分别来看每种类型的具体用途。

    1. 文档型数据库

    文档型数据库以 MongoDB 和 Apache CouchDB 为代表,文档型数据库通常以 JSON 或者 XML 为格式进行数据存储。

    以 MongoDB 为例,它是由 C++ 编写的一种面向文档的数据库管理系统,在 2007 年 10 月 由 10gen 团队所开发,并在 2009 年 2 月首度推出。MongoDB 是以二进制 JSON 格式存储数据的,MongoDB 对 JSON 做了一些优化,它支持了更多的数据类型,这种二进制存储的 JSON 我们也可以称之为 BSON(Binary JSON)。

    BSON 具备三个特点:轻量、可遍历以及高效,它的缺点是空间利用率不是很理想。MongoDB 使用 BSON 进行存储的另一个重要原因是 BSON 具备可遍历性

    MongoDB 存储结构示例如下:

    {"_id":ObjectId(“57ce2d4cce8685a6fd9df3a3"),"name":"老王","email":['java@qq.com','java@163.com']}

    其中,“_id”为 MongoDB 默认的主键字段,它会为我们生成一起全局唯一的 id 值,并且这个值在做数据分片时非常有用。

    文档型数据库的使用场景如下。

    敏捷开发,因为 MongoDB 拥有比关系型数据库更快的开发速度,因此很多敏捷开发组织,包括纽约时报等都采用了 MongoDB 数据库。使用它可以有效地避免在增加和修改数据库带来的沟通成本,以及维护和创建数据库模型成本,使用 MongoDB 只需要在程序层面严格把关就行,程序提交的数据结构可以直接更新到数据库中,并不需要繁杂的设计数据库模型再生成修改语句等过程。
    • 日志系统,使用 MongoDB 数据库非常适合存储日志,日志对应到数据库中就是很多个文件,而 MongoDB 更擅长存储和查询文档,它提供了更简单的存储和更方便的查询功能。
    • 社交系统,使用 MongoDB 可以很方便的存储用户的位置信息,可以方便的实现查询附近的人以及附近的地点等功能。

    2. 键值型数据库

    键值数据库也就是 Key-Value 数据库,它的典型代表数据库是 Redis 和 Memcached,而它们通常被当做非持久化的内存型数据库缓存来使用。当然 Redis 数据库是具备可持久化得能力的,但是开启持久化会降低系统的运行效率,因此在使用时需要根据实际的情况,选择开启或者关闭持久化的功能。

    键值型数据库以极高的性能著称,且除了 Key-Value 字符串类型之外,还包含一些其他的数据类型。以 Redis 为例,它提供了字符串类型(String)、列表类型(List)、哈希表类型(Hash)、集合类型(Set)、有序集合类型(ZSet)等五种最常用的基础数据类型,还有管道类型(Pipeline)、地理位置类型(GEO)、基数统计类型(HyperLogLog)和流类型(Stream),并且还提供了消息队列的功能。

    此数据库的优点是性能比较高,缺点是对事务的支持不是很好。

    3. 全文搜索型数据库

    传统的关系型数据库主要是依赖索引来实现快速查询功能的,而在全文搜索的业务下,索引很难满足查询的需求。因为全文搜索需要支持模糊匹配的,当数据量比较大的情况下,传递的关系型数据库的查询效率是非常低的;另一个原因是全文搜索需要支持多条件随意组合排序,如果要通过索引来实现的话,则需要创建大量的索引,而传统型数据库也很难实现,因此需要专门全文搜索引擎和相关的数据库才能实现此功能。

    全文搜索型数据库以 ElasticSearch 和 Solr /sɔ:lʌ/为代表,它们的出现解决了关系型数据库全文搜索功能较弱的问题。

    MongoDB 

    谈谈你对mongodb的理解?特性?mongodb用来做什么的?

    是一个基于分布式文件存储的数据库(文档型数据库),介于关系型和非关系型数据库间。它支持的数据结构类似于JSON的BSON格式,因此可以存储比较复杂的数据类型

    Mongodb最大的特点是它支持的查询语言非常强大,支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组

    使用场景:

    • 敏捷开发,因为 MongoDB 拥有比关系型数据库更快的开发速度,因此很多敏捷开发组织,包括纽约时报等都采用了 MongoDB 数据库。使用它可以有效地避免在增加和修改数据库带来的沟通成本,以及维护和创建数据库模型成本,使用 MongoDB 只需要在程序层面严格把关就行,程序提交的数据结构可以直接更新到数据库中,并不需要繁杂的设计数据库模型再生成修改语句等过程。
    • 日志系统,使用 MongoDB 数据库非常适合存储日志,日志对应到数据库中就是很多个文件,而 MongoDB 更擅长存储和查询文档,它提供了更简单的存储和更方便的查询功能。
    • 社交系统,使用 MongoDB 可以很方便的存储用户的位置信息,可以方便的实现查询附近的人以及附近的地点等功能。

    mongodb和redis区别?

    (1)  Mongodb在4.0前不支持事务,靠客户端保证,redis支持事务。

    (2) Redis 支持的数据结构丰富, MongoDB 数据结构比较单一,但是支持丰富的数据表达

    (3) mongodb适用于存储海量数据,redis不适合存储海量数据(受物理内存限制)。

    MongoDB 支持事务吗?

    MongoDB 在 4.0 之前是不支持事务的,不支持的原因也很简单,因为文档型数据库和传统的关系型数据库不一样,不需要满足三范式。文档型数据库之所以性能比较高的另一个主要原因,就是使用文档型数据库不用进行多表关联性查询,因为文档型数据库会把相关的信息存放到一张表中。因此,无需关联多表查询的 MongoDB,在这种情况下的查询性能是比较高的。

    把所有相关的数据都放入一个表中,这也是 MongoDB 之前很长一段时间内不支持事务的原因,它可以保证单表操作的原子性,一条记录要么成功插入,要么插入失败,不会存在插入了一半的数据。因此,在这种设计思路下,MongoDB 官方认为“事务功能”的实现没有那么紧迫。

    但在 MongoDB 4.0 之中正式添加了事务的功能,并且在 MongoDB 4.2 中实现了分布式事务的功能,至此 MongoDB 开启了支持事务之旅。

    常见面试题

    关系型数据和文档型数据库有什么区别?

    谈谈你对mongodb的理解?特性?mongodb用来做什么的?(蓝月亮1-3)

    mongodb和redis区别?(蓝月亮1-3)

    参考/好文:

    拉钩教育 -- https://kaiwu.lagou.com/course/courseInfo.htm?courseId=59#/detail/pc?id=1778

    希望本文章对您有帮助,您的转发、点赞是我的创作动力,十分感谢。更多好文推荐,请关注我的微信公众号--JustJavaIt
  • 相关阅读:
    013.ES6 -对象字面量增强型写法
    012. ES6
    011. ES6 语法
    10. 9. Vue 计算属性的setter和getter 以及 计算属性的缓存讲解
    4. Spring MVC 数据响应方式
    3. SpringMVC 组件解析
    9. Vue 计算属性
    【洛谷 2984】给巧克力
    【洛谷 1821】捉迷藏 Hide and Seek
    【洛谷 1821】银牛派对Silver Cow Party
  • 原文地址:https://www.cnblogs.com/liaowenhui/p/12852775.html
Copyright © 2011-2022 走看看