NoSQL

NoSQL简介

NoSql(NoSQL=Not Only SQL),意思是不仅仅是SQL,泛指非关系型数据库。

NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。这些类型的数据存储不需要固定模式,无需多余操作就可以横向扩展。

特点

易扩展

NoSQL数据库种类繁多,但是一个共同的特点都是去掉关系数据库的关系型特征;数据之间无关系,这样就非常容易扩展,也就无形之间,在架构的层面上带来了可扩展的能力。

大数据量高性能

NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,同样表现优秀。数据库的结构简单。

MySQL使用Query Cache,每次表的功能Cache就失效了,是一种大粒度的Cache,而NoSQL的Cache是记录级的,是一种细粒度的Cache,所以NoSQL在这个层面来说性能高很多。

多样灵活的数据模型

NoSQL无需实现为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系数据库里,增删改字段是非常麻烦的。

 

RDBMS vs NoSQL

RDBMS

  • 高度组织化的结构化数据

  • 结构化的查询语言(SQL)

  • 数据的关系都存储在单独的表中

  • 数据操纵语言,数据定义语言

  • 严格的一致性

  • 基础事务

NoSQL

  • 没有声明性查询语言

  • 没有预定义的模式

  • 键-值对存储,列存储,文档存储,图形数据库

  • 最终一致性,非ACID

  • 非结构化和不可预知的的数据

  • CAP定义

  • 高性能,高可用性和可伸缩

常用的NoSQL

Redis、Memcache、Mongdb、Tair、CounchDB、Cassandra、HBase

NoSQL的四大分类

  • KV键值对

  • 文档型数据库

  • 列存储数据库

  • 图关系数据库

分类举例典型应用场景数据模型优点缺点
键值(key-value)Tokyo Cabinet/tyrant Redis,Voldemort Oracle BDB内容缓存,重要用于处理大量数据的高访问负载,也用于一些日志系统Key指向Value的键值对,通常用hash table 来实现查找速度快数据无结构化,通常指被当作字符串或者二进制数据
列存储数据库Cassandra,HBase,Riak分布式的文件系统以列簇式存储,将同一列数据存在一起查找速度快,可扩展性强,更容易进行分布式扩展功能相对局限
文档型数据库CounchDB,MongoDBWeb应用key-value对应的键值对,Value为结构化数据数据结构要求不严格,表结构可变,不用预定义表结构查找性能不高,而且缺乏统一的查找语法
图形数据库Neo4J,InfoGrid,Infinite Graph社交网络,推荐系统,专注于构建关系图谱图结构利用图结构相关算法很多时候需要对整个图做计算才能得出需要信息,而且这种结构不容易做分布式集群

ACID &CAP

ACID

关系型数据库遵循ACID规则 事务在英文中是transaction,和现实世界中的交易很类似,它有如下四个特性:

  1. A (Atomicity)原子性 原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。比如银行转账,从A账户转100元至B账户,分为两个步骤: 1) 从A账户取100元,2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步, 第二步失败,钱会莫名其妙少了100元。

  2. C (Consistency)一致性 一致性也比较容易理解,也就是说数据库要一 直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。

  3. I (Isolation) 独立性 所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的

  4. D (Durability) 持久性 持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。

CAP

C:Consistency (强一致性) A:Availability (可用性) P:Partition tolerance ( 分区容错性)

CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡,没有NoSQL系统能同时保证这三点。

C:强一致性 A:高可用性 P:分布式容忍性

  • CA传统Oracle数据库

  • AP大多数网站架构的选择

  • CP Redis、Mongodb

注意:分布式架构的时候必须做出取舍。 一致性和可用性之间取一个平衡。多余大多数web应用,其实并不需要强一致性。 因此牺牲C换取P,这是目前分布式数据库产品的方向

一致性与可用性的决择

对于web2.0网站来说,关系数据库的很多主要特性却往往无用武之地

数据库事务一致性需求:很多web实时系统并不要求严格的数据库事务,对读-致性的要求很低,有些场 合对写一致性要求并不高。允许实现最终一致性。

数据库的写实时性和读实时性需求:对关系数据库来说,插入一条数据之后立刻查询,是肯定可以读出来这条数据的,但是对于很多web应用来说,并不要求这么高的实时性,比方说发一条消息之后,过几秒乃至十几秒之后,我的订阅者才看到这条动态是完全可以接受的。

对复杂的SQL查询,特别是多表关联查询的需求:任何大数据量的web系统,都非常忌讳多个大表的关联查询,以及复杂的数据分析类型的报表查询,特别是SNS类型的网站,从需求以及产品设计角度,就避免了这种情况的产生。往往更多的只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大的弱化了。

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性这三个需求,最多只能同时较好的满足两个。 因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:

  • CA:单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。

  • CP:满足一致性,分区容忍必的系统,通常性能不是特别高。

  • AP:满足可用性,分区容忍性的系统,通常可能对一-致性要求低一些。

 

<think>首先,用户的问题是:“我想了解noSQL相关信息 请问noSQL的介绍、特点、应用场景等相关信息”。这基于系统级指令和之前的引用。 回顾系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户提供了多个引用: - 引用[1]: 关于NoSQL的架构实践和十五个NoSQL库。 - 引用[2]: 关于NoSQL数据库的发展和未来趋势。 - 引用[3]: 关于NoSQL的数据分片和分布式系统。 用户说:“上述引用仅供参考,并不是用户真正的需求,请尽可能多的参考用户上一次的问题和你的回答。” 在之前的上下文,用户上一次的问题是询问NoSQL信息,但在这个消息中,用户再次确认了需求。 我的回答需要: 1. 结构化:清晰介绍NoSQL,包括介绍、特点、应用场景等。 2. 引用标记:如果引用任何段落,末尾添加引用标识如[^1]。 3. 生成相关问题:在回答结束后添加相关问题。 4. 使用中文。 内容大纲: - **介绍**:什么是NoSQL?定义和背景。 - **特点**:主要特点,如非关系型、可扩展性、灵活性等。 - **应用场景**:何时使用NoSQL,如大数据、实时分析等。 - 基于引用添加细节。 从引用中提取关键点: - [^1]: 提到NoSQL架构实践和库列表。 - [^2]: 未来趋势,如更强的一致性、更好集成性、智能查询优化。 - [^3]: 数据分片、分布式集群、横向扩展。 在回答中自然地融入这些引用。 回答结构: 1. 引言:简要介绍NoSQL。 2. 特点:详细列出特点。 3. 应用场景:描述常见应用。 4. 相关趋势或未来展望(基于引用)。 5. 生成相关问题。 最后,添加相关问题部分。 确保LaTeX使用:用户的问题涉及NoSQL,主要是文本信息,可能没有数学表达式。但如果有需要,我会添加。例如,在描述数据模型时,用数学符号表示关系型和非关系型数据库。但避免强制添加数学内容。 完整回答: - 用中文。 - 清晰分段。 - 自然地引用。 </think>### NoSQL介绍、特点与应用场景 以下内容基于您的查询和提供的引用资料综合整理。NoSQL(Not Only SQL)数据库是一种非关系型数据库管理系统,设计用于处理大规模、高并发和非结构化数据场景。它与传统的关系型数据库(如MySQL、Oracle)不同,放弃了严格的ACID事务保证,转而追求更高的扩展性、灵活性和性能NoSQL的兴起源于Web 2.0时代对海量数据(如社交媒体、物联网)的处理需求[^1]。 #### 1. NoSQL介绍 NoSQL数据库起源于2009年左右,作为对传统关系数据库局限性的补充。它不依赖于固定表结构或SQL查询语言,而是支持多种数据模型,如键值对、文档、列族和图数据库。例如: - **键值存储**:如Redis,存储简单的键值对,适合缓存场景。 - **文档数据库**:如MongoDB,存储JSON或XML格式文档,便于处理半结构化数据。 - **列族数据库**:如Cassandra,优化大规模数据写入和分布式存储。 - **图数据库**:如Neo4j,专为处理网络关系设计。 NoSQL的核心优势在于其分布式架构:它能在集群上通过横向扩展(Scaling Out)提升性能,即通过增加节点数量来处理数据增长[^3]。例如,使用数据分片(Sharding)技术将数据均匀分布到多个节点上,确保高可用性和负载均衡[^3]。这不依赖于中心化架构,从而降低了单点故障风险。 #### 2. NoSQL的主要特点 NoSQL数据库具有以下关键特性: - **高扩展性**:支持分布式集群,能轻松添加节点实现横向扩展,处理PB级数据。例如,通过数据分片技术,将数据均匀分布在多个节点上,实现高效检索和维护[^3]。 - **灵活的数据模型**:不要求预定义表结构,能处理半结构化或非结构化数据(如JSON、XML),适合快速迭代的应用开发。 - **高性能**:针对读写密集型场景优化,减少事务开销,提供高吞吐量(如每秒数百万次操作)。 - **高可用性**:通过副本机制(Replication)保证数据冗余和故障转移,确保系统在节点失效时仍可用。 - **弱一致性**:默认采用BASE(Basically Available, Soft state, Eventual consistency)模型,而非ACID事务,牺牲强一致性来换取可用性和性能。但未来趋势正朝向提供更强的一致性支持[^2]。 这些特点使NoSQL在处理大数据时更具优势,但同时也引入了挑战,如查询优化和数据一致性管理。 #### 3. NoSQL的应用场景 NoSQL数据库广泛应用于需要高扩展性和灵活性的场景,主要包括: - **大数据处理**:如电商平台(存储用户行为日志)、社交媒体(处理实时消息流),利用NoSQL的分布式能力高效存储和分析海量数据。 - **实时 Web 应用**:如游戏服务器或内容管理系统,需要低延迟读写,NoSQL的文档模型(如MongoDB)便于快速开发。 - **物联网(IoT)和日志分析**:处理传感器数据或日志文件,NoSQL的列族存储(如Cassandra)优化高频写入。 - **个性化推荐系统**:图数据库(如Neo4j)用于处理复杂关系和网络分析。 未来,NoSQL数据库可能进一步发展,如提供更强的一致性保证、与其他工具(如大数据分析平台)的更好集成,以及智能查询优化以提升性能[^2]。但NoSQL并非万能方案,在需要严格事务(如金融系统)的场景,关系型数据库仍更合适。 #### 相关资源 如需深入探索,可参考实用库如Redis或MongoDB(引用了15个NoSQL库的列表[^1]),或学习分布式架构实践资源。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值