NoSQL简单概述

什么是NoSQL

NoSQL:not only SQL,非关系型数据库
NoSQL是一个通用术语

  • 指不遵循传统RDBMS模型的数据库
  • 数据是非关系的,且不使用SQL作为主要查询语言
  • 解决数据库的可伸缩性和可用性问题
  • 不针对原子性或一致性问题

NoSQL和关系型数据库对比

对比 NoSQL 关系型数据库
常用数据库 HBase、MongoDB、Redis Oracle、DB2、MySQL
存储格式 文档、键值对、图结构 表格式,行和列
存储规范 鼓励冗余 规范性,避免重复
存储扩展 横向扩展,分布式 纵向扩展(横向扩展有限)
查询方式 结构化查询语言SQL 非结构化查询
事务 不支持事务一致性 支持事务
性能 读写性能高 读写性能差
成本 简单易部署,开源,成本低 成本高

为什么使用NoSQL

互联网的发展,传统关系型数据库存在瓶颈

  • 高并发读写
  • 高存储量
  • 高可用性
  • 高扩展性
  • 低成本

NoSQL的特点

最终一致性
应用程序增加了维护一致性和处理事务等职责
冗余数据存储

NoSQL != 大数据
NoSQL产品是为了帮助解决大数据存储问题
大数据不仅仅包含数据存储的问题

  • Hadoop
  • Kafka
  • Spark, etc

NoSQL三大基石

CAP、BASE、 最终一致性

CAP

  • Consistency(一致性)
  • Availability(可用性)
  • Partition Tolerance(分区容错性)

数据库最多支持3个中的2个
NoSQL不保证“ACID”
提供“最终一致性”

BASE

Basically Availble(基本可用)

  • 保证核心可用
    • Soft-state(软状态)
  • 状态可以有一段时间不同步
    • Eventual Consistency(最终一致性)
    • 系统经过一定时间后,数据最终能够达到一致的状态
    • 核心思想是即使无法做到强一致性,但应用可以选择适合的方式达到最终一致性

最终一致性

  • 最终结果保持一致性,而不是时时一致
  • 如账户余额,库存量等数据需强一致性
  • 如catalog等信息不需要强一致性
    • Causal consistency(因果一致性)
    • Read-your-writes consistency
    • Session consistency

索引和查询

  • Indexing(索引)
    • 大多数NoSQL是按key进行索引
    • 部分NoSQL允许二级索引
    • HBase使用HDFS,append-only
      • 批处理写入Logged
      • 重新创建并排序文件
  • Query(查询)
    • 没有专门的查询语言,通常使用脚本语言查询
    • 有些开始支持SQL查询
    • 有些可以使用MapReduce代码查询

MapReduce、Sharding

MapReduce

  • 不是Hadoop的MapReduce,概念相关
  • 可进行数据的处理查询

Sharding(分片)

  • 一种分区模式
  • 可以复制分片
    • 有利于灾难恢复

NoSQL分类

分类 举例 典型应用场景
键值存储数据库(key-value) Redis, MemcacheDB, Voldemort 内容缓存等
列存储数据库(WIDE COLUMN STORE) Cassandra, HBase 应对分布式存储的海量数据
文档型数据库(DOCUMENT STORE) CouchDB, MongoDB Web应用(可看做键值数据库的升级版)
图数据库(GRAPH DB) Neo4J, InfoGrid, Infinite Graph 社交网络,推荐系统等,专注于构建关系图谱

键值存储数据库(Key-Value)

NoSQL简单概述

列存储数据库(Wide Column Store)

NoSQL简单概述

文档型数据库(Document Store)

NoSQL简单概述

图数据库(Graph Databases)

NoSQL简单概述

NoSQL和BI、大数据的关系

BI(Business Intelligence):商务智能

  • 它是一套完整的解决方案
  • BI应用涉及模型,模型依赖于模式
  • BI主要支持标准SQL,对NoSQL支持弱于关系型数据库

NoSQL和大数据相关性较高

  • 通常大数据场景采用列存储数据库
  • 如:HBase和Hadoop