NoSQL数据库数据模型(笔记)

NoSQL(Nosql=Not only Sql),意即不仅仅是SQL。泛指非关系型数据库
这些类型的数据存储不需要固定的模式,无需多余的操作就可以横向扩展。

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

NoSQL无需事先为要存储的数据建立字段,随时可以存储自定义的数据格式,而在关系型数据库中,增删字段是一件非常麻烦的事,如果是非常大数据量的表,增加字段简直是一个噩梦。

大数据时代的3V:海量Volume,多样Variety,实时Velocity
互联网需求的3高:高可用,高性能,高可扩

当下应用是sql和nosql一起使用。
关系型数据库用来存储不怎么变的信息。

传统的关系型数据库设计:ER图(1:1/1:N/N:N,主外键等常见)
NoSQL数据库设计:用BSon构建数据模型

高并发的操作不太简易有关联查询的(join),互联网公司用冗余数据来避免关联查询,分布式事务是支持不了太多的并发的。

NoSQL数据模型简介:聚合模型(KV键值、BSon、列簇、图形)
列簇:是按列存储数据的,最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或某几列的查询有非常大的IO优势。

NoSQL数据库分类:
1.键值(key-value) redis
应用场景:内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等。
数据模型:Key指向Value的键值对,通常用hashtable来实现
优点:查找速度块
缺点:数据无结构化,通常只被当作字符串或二进制数据
2.列存储数据库 HBase
应用场景:分布式文件系统
数据模型:以列簇式存储,将同一列数据存储在一起
优点:查找速度块,可扩展性强,更容易进行分布式扩展
缺点:功能相对局限
3.文档型数据库 MongoDb
应用场景:web应用,与Key-value类型相似,value是结构化的,不同的是数据库能够了解value的内容。
数据类型:Key-value对应的键值对,value为结构化数据。
优点:数据结构要求不严格,表结构可变,不需要像关系型数据库一样需要预先定义表结构
缺点:查询性能不高,而且缺乏统一的查询语法
4.图形数据库 Neo4J
应用场景:社交网络,推荐系统等。专注于构建关系图谱。
数据模型:图结构
优点:利用图结构相关算法,如最短路径寻址、N度关系查询

传统的ACID:原子性(Atomicity)、一致性(Consistency)、独立性(Isolation)、持久性(Durability)

1. 原子性
一个原子事务要么完整执行,要么干脆不执行。这意味着,工作单元中的每项任务都必须正确执行。如果有任一任务执行失败,则整个工作单元或事务就会被终止。即此前对数据所作的任何修改都将被撤销。如果所有任务都被成功执行,事务就会被提交,即对数据所作的修改将会是永久性的。
2. 一致性
一致性代表了底层数据存储的完整性。它必须由事务系统和应用开发人员共同来保证。事务系统通过保证事务的原子性,隔离性和持久性来满足这一要求; 应用开发人员则需要保证数据库有适当的约束(主键,引用完整性等),并且工作单元中所实现的业务逻辑不会导致数据的不一致(即,数据预期所表达的现实业务情况不相一致)。例如,在一次转账过程中,从某一账户中扣除的金额必须与另一账户中存入的金额相等。
3. 独立性
独立性意味着事务必须在不干扰其他进程或事务的前提下独立执行。换言之,在事务或工作单元执行完毕之前,其所访问的数据不能受系统其他部分的影响。
4. 持久性
持久性表示在某个事务的执行过程中,对数据所作的所有改动都必须在事务成功结束前保存至某种物理存储设备。这样可以保证,所作的修改在任何系统瘫痪时不至于丢失。

NoSQL数据库中CAP原理:Consistency(强一致性)、Availability(可用性)、Partition tolerace(分区容忍性)

CAP理论的核心是:一个分布式系统不可能同时很好的满足一致性,可用性和分区容错性,最多只能同时较好的满足两个。

因此CAP理论将NoSQL分成了满足CA、CP、AP原则的三大类。
CA:单点集群,满足一致性、可用性的系统,通常在可扩展性不太强
CP:满足一致性、分区容忍性的系统,通常性能不是特别高
AP:满足可用性、分区容忍性的系统,通常对一致性要求低一些

而由于当前网络硬件肯定会出现延迟丢包等问题,所以分区容错性必须需要实现。
CA 传统Oracle数据库
AP 大多网站架构的选择
CP Redis MongoDb

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

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

BASE就是为了解决关系数据库强一致性引起的问题而引起的可用性降低而提出的解决方案。
BASE是下面三个术语的缩写:
1.基本可用(Basically Available)
2.软状态(Soft state)
3.最终一致性(Eventually consistent)

它的思想是通过让系统放松对某一时刻数据一致性的要求来换取系统整体伸缩性和性能上改变。

分布式系统(distributed system)
由多台计算机和通信的软件组件通过计算机网络链接(本地网络或广域网)组成,分布式系统是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统是具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。分布式系统可以应用在不同的平台上,如:PC、工作站、局域网或广域网等。

简单来讲:
1.分布式:不同的多台服务器上部署不同的服务模块(工程),他们之间通过Rpc/Rmi之间通信和调用,对外提供服务和组内协作。
2.集群:不同的多台服务器部署相同的模块,通过分布式调度软件进行统一的调度,对外提供服务和访问。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关系型数据库NoSQL数据库 什么是NoSQL 大家有没有听说过“NoSQL”呢?近年,这个词极受关注。看到“NoSQL”这个词,大家可能会误以为是“No!SQL”的缩写,并深感愤怒:“SQL怎么会没有必要了呢?”但实际上,它是“Not Only SQL”的缩写。它的意义是:适用关系型数据库的时候就使用关系型数据库,不适用的时候也没有必要非使用关系型数据库不可,可以考虑使用更加合适的数据存储。 为弥补关系型数据库的不足,各种各样的NoSQL数据库应运而生。 为了更好地了解本书所介绍的NoSQL数据库,对关系型数据库的理解是必不可少的。那么,就让我们先来看一看关系型数据库的历史、分类和特征吧。 关系型数据库简史 1969年,埃德加•弗兰克•科德(Edgar Frank Codd)发表了划时代的论文,首次提出了关系数据模型的概念。但可惜的是,刊登论文的《IBM Research Report》只是IBM公司的内部刊物,因此论文反响平平。1970年,他再次在刊物《Communication of the ACM》上发表了题为“A Relational Model of Data for Large Shared Data banks”(大型共享数据库的关系模型)的论文,终于引起了大家的关注。 科德所提出的关系数据模型的概念成为了现今关系型数据库的基础。当时的关系型数据库由于硬件性能低劣、处理速度过慢而迟迟没有得到实际应用。但之后随着硬件性能的提升,加之使用简单、性能优越等优点,关系型数据库得到了广泛的应用。 通用性及高性能 虽然本书是讲解NoSQL数据库的,但有一个重要的大前提,请大家一定不要误解。这个大前提就是“关系型数据库的性能绝对不低,它具有非常好的通用性和非常高的性能”。毫无疑问,对于绝大多数的应用来说它都是最有效的解决方案。 突出的优势 关系型数据库作为应用广泛的通用型数据库,它的突出优势主要有以下几点: 保持数据的一致性(事务处理) 由于以标准化为前提,数据更新的开销很小(相同的字段基本上都只有一处) 可以进行JOIN等复杂查询 存在很多实际成果和专业技术信息(成熟的技术) 这其,能够保持数据的一致性是关系型数据库的最大优势。在需要严格保证数据一致性和处理完整性的情况下,用关系型数据库是肯定没有错的。但是有些情况不需要JOIN,对上述关系型数据库的优点也没有什么特别需要,这时似乎也就没有必要拘泥于关系型数据库了。 关系型数据库的不足 不擅长的处理 就像之前提到的那样,关系型数据库的性能非常高。但是它毕竟是一个通用型的数据库,并不能完全适应所有的用途。具体来说它并不擅长以下处理: 大量数据的写入处理 为有数据更新的表做索引或表结构(schema)变更 字段不固定时应用 对简单查询需要快速返回结果的处理 。。。。。。 NoSQL数据库 为了弥补关系型数据库的不足(特别是最近几年),NoSQL数据库出现了。关系型数据库应用广泛,能进行事务处理和JOIN等复杂处理。相对地,NoSQL数据库只应用在特定领域,基本上不进行复杂的处理,但它恰恰弥补了之前所列举的关系型数据库的不足之处。 易于数据的分散 如前所述,关系型数据库并不擅长大量数据的写入处理。原本关系型数据库就是以JOIN为前提的,就是说,各个数据之间存在关联是关系型数据库得名的主要原因。为了进行JOIN处理,关系型数据库不得不把数据存储在同一个服务器内,这不利于数据的分散。相反,NoSQL数据库原本就不支持JOIN处理,各个数据都是独立设计的,很容易把数据分散到多个服务器上。由于数据被分散到了多个服务器上,减少了每个服务器上的数据量,即使要进行大量数据的写入操作,处理起来也更加容易。同理,数据的读入操作当然也同样容易。 提升性能和增大规模 下面说一点题外话,如果想要使服务器能够轻松地处理更大量的数据,那么只有两个选择:一是提升性能,二是增大规模。下面我们来整理一下这两者的不同。 首先,提升性能指的就是通过提升现行服务器自身的性能来提高处理能力。这是非常简单的方法,程序方面也不需要进行变更,但需要一些费用。若要购买性能翻倍的服务器,需要花费的资金往往不只是原来的2倍,可能需要多达5到10倍。这种方法虽然简单,但是成本较高。 另一方面,增大规模指的是使用多台廉价的服务器来提高处理能力。它需要对程序进行变更,但由于使用廉价的服务器,可以控制成本。另外,以后只要依葫芦画瓢增加廉价服务器的数量就可以了。 不对大量数据进行处理的话就没有使用的必要吗? NoSQL数据库基本上来说为了“使大量数据的写入处理更加容易(让增加服务器数量更容易)”而设计的。但如果不是对大量数据进行操作的话,NoSQ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值