zoukankan      html  css  js  c++  java
  • NoSQL是什么(一)

    最常见的数据库可以分为下面的两种类型:

    • RDBMS(关系型数据库):常见的关系型数据库有 Oracle、DB2、Microsoft SQL Server、Microsoft Access、MySQL;
    • NoSQL(非关系型数据库):常见的非关系型数据库有 MongoDB、Redis、Voldemort、Cassandra、Riak、Couchbase、CouchDB 等。

    这里我们主要来介绍一下 NoSQL,NoSQL 全称为“Not only SQL”,它仅仅是一个概念,用来表示非关系型数据库,本教程中将要介绍的 MongoDB 就是非关系型数据库的一种。

    相对于 RDBMS(关系型数据库),NoSQL 具有以下优点:

    • 易扩展:NoSQL 数据库种类繁多,但它们都有一个共同的特点,那就是都去掉了关系型数据库的关系型特性,数据与数据之间没有关系,这样就非常容易扩展,无形之间也在架构的层面上带来了可扩展的能力;
    • 大数据量,高性能:NoSQL 数据库都具有非常高的读写性能,尤其是在处理庞大数据时表现优秀;
    • 灵活:NoSQL 随时都可以存储任意类型的数据,无须提前为要存储的数据建立字段;
    • 高可用:NoSQL 在不太影响性能的情况下,就可以方便地实现高可用的架构,比如 Cassandra、HBase 模型,通过复制模型也能实现高可用。

    为什么使用 NoSQL?

    随着互联网的不断发展,传统的关系型数据库在处理超大规模数据以及开发高并发应用时已经显得力不从心了,出现了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展。NoSQL 数据库的产生就是为了解决大规模数据集合多重数据种类带来的问题,特别是大数据应用的难题。

    体系框架

    NoSQL 整体框架分为四层,由下至上分别为数据持久层(data persistence)、数据分布层(data distribution model)、数据逻辑模型层(data logical model)、和接口层(interface),层次之间相辅相成,协调工作。

    1、数据持久层

    数据持久层定义了数据的存储形式,主要包括基于内存、硬盘、内存与硬盘相结合、订制可插拔四种形式。

    • 基于内存形式的数据存取速度最快,但可能会造成数据丢失;
    • 基于硬盘的数据可能保存很久,但存取速度较基于内存的形式慢;
    • 内存和硬盘相结合的形式,结合了前两种形式的优点,既保证了速度,又保证了数据不丢失;
    • 订制可插拔则保证了数据存取具有较高的灵活性。

    2、数据分布层

    数据分布层定义了数据是如何分布的,相对于关系型数据库,NoSQL 可选的机制比较多,主要有三种形式:

    • CAP 支持:可用于水平扩展;
    • 多数据中心支持:可以保证在横跨多数据中心时也能够平稳运行;
    • 动态部署支持:可以在运行着的集群中动态地添加或删除节点。

    3、数据逻辑层

    数据逻辑层表述了数据的逻辑表现形式,与关系型数据库相比,NoSQL 在逻辑表现形式上相当灵活,主要有四种形式:

    • 键值模型:这种模型在表现形式上比较单一,却有很强的扩展性;
    • 列式模型:这种模型相比于键值模型能够支持较为复杂的数据,但扩展性相对较差;
    • 文档模型:这种模型对于复杂数据的支持和扩展性都有很大优势;
    • 图模型:这种模型的使用场景不多,通常是基于图数据结构的数据定制的。

    4、接口层

    接口层为上层应用提供了方便的数据调用接口,提供的选择远多于关系型数据库。接口层提供了五种选择,分别是 Rest、Thrift、Map/Reduce、Get/Put 和特定语言 API,使得应用程序在与数据库交互时更加方便。

    NoSQL 分层架构并不代表每个产品在每一层只有一种选择。相反,这种分层设计提供了很大的灵活性和兼容性,每种数据库在不同层面可以支持多种特性。

    适用场景

    NoSQL 数据库在以下的这几种情况下比较适用:

    • 数据模型比较简单;
    • 对灵活性要求很强的系统;
    • 对数据库性能要求较高;
    • 不需要高度的数据一致性;
    • 对于给定 key,比较容易映射复杂值的环境。

    原文引用:http://c.biancheng.net/mongodb2/what-is-nosql.html

  • 相关阅读:
    NAS与SAN RAID
    使用slice和concat对数组的深拷贝和浅拷贝
    使用JSON.parse(),JSON.stringify()实现对对象的深拷贝
    ng2父子模块通信@ViewChild和@Inject
    js避免命名冲突
    JSON.parse()和JSON.stringify()
    object类型转换为Array类型
    Angular 2 ViewChild & ViewChildren
    ElementRef, @ViewChild & Renderer
    ng2父子模块数据交互
  • 原文地址:https://www.cnblogs.com/testlearn/p/15041141.html
Copyright © 2011-2022 走看看