NoSQL简单概述

什么是NoSQL

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

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

NoSQL和关系型数据库对比

对比NoSQL关系型数据库
常用数据库HBase、MongoDB、RedisOracle、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, MongoDBWeb应用(可看做键值数据库的升级版)
图数据库(GRAPH DB)Neo4J, InfoGrid, Infinite Graph社交网络,推荐系统等,专注于构建关系图谱

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

在这里插入图片描述

列存储数据库(Wide Column Store)

在这里插入图片描述

文档型数据库(Document Store)

在这里插入图片描述

图数据库(Graph Databases)

在这里插入图片描述

NoSQL和BI、大数据的关系

BI(Business Intelligence):商务智能

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

NoSQL和大数据相关性较高

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

版权声明:本文为wuhahabanana原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。