下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

Nosql数据库最大的转变就是抛弃了关系模型

作者:课课家教育     来源: http://www.kokojia.com点击数:1051发布时间: 2017-08-20 09:30:05

标签: 数据库NoSQL数据库模型

  关系型数据库的数据模型是“关系”和“元组”,一个关系对应一张表,而一个元组对应一行,其中元组由一系列的值组成,不能嵌套。

  Nosql数据库最大的转变就是抛弃了关系模型。但是每种NoSQL解决方案模型都不同,大体上可以将NoSQL数据模型分为四类:“键值”、“文档”、“列族”、“图”,前三类模型都有一个共同特征,称为“聚合模型”。

Nosql数据库最大的转变就是抛弃了关系模型_数据库_NoSQL_数据库模型_课课家教育

  NoSQL聚合数据模型

  什么是聚合?

  聚合是“领域驱动设计”中的概念,通常我们想把一组相互关联的对象视为一个整体单元来操作,这个单元就是聚合。

  举个例子,有个购物网站,需要管理用户信息、商品信息、收货地址信息、订单信息、付款方式等,如果用关系模型来描述,将会被划分为用户表、订单表、商品表、付款方式表等,表与表之间存在某种关系。如果用聚合的思路来做,一种方式是分为两个聚合,一个聚合是用户,由用户基本信息和收货地址信息等组成,一个聚合是订单,由商品列表、付款方式等信息组成;另一种方式还可以将用户下面的所有订单全部都放到用户聚合中。

  如何划分聚合并没有标准的答案,这完全取决于你如何操作你的数据。如果想要一次性访问用户的所有订单,就放到一个大的聚合中,如果想要针对专门的一比订单处理,则划分为用户和订单两个聚合比较好。

  为什么选用聚合模型?

  选用面向聚合的模型决定性因素,在于其非常适合于在集群中运行。

  根据场景来设计聚合,可以将采集数据时所需的节点数降至最小。在数据库中明确包含聚合结构,就可以根据这个信息知道哪些数据需要在一起操作了,这些数据就应该放在同一个节点上。总之在集群上运行时聚合是中心环节,因为数据库必须保证将聚合内的数据放在同一个节点上。聚合还是更新操作的最小数据单位,对事物控制来说,以聚合为操作单元正合适。

  聚合对事务处理的影响?

  关系型数据库有事务的概念,可以将任意表格任意行放在一个ACID事务中操作,具备原子性、一致性、隔离性和持久性,这里面的核心主要是原子性。

  而面向聚合的数据库不支持跨越多个聚合的ACID事务,取而代之的是只能在一个聚合结构上执行原子操作,不过实际应用中大多数原子操作都可以局限于聚合结构内部,而且我们在划分聚合时这也是要重点考虑的关键因素之一。

  1、特点

  聚合数据模型的特点就是把经常访问的数据放在一起(聚合在一块);这样带来的好处很明显,对于某个查询请求,能够在与数据库一次交互中将所有数据都取出来;当然,以这种方式存储不可避免的会有重复,重复是为了更少的交互;

  2.缺点

  ①聚合结构对某些交互有利,却阻碍另一些交互;

  比如:以学生学号聚合学生信息(含学生姓名、班级、年龄、等信息,甚至英语学科成绩),通过学号查询时,能够在一次交互中查询出该学生的所有信息,但如果想通过学生姓名来查询,就很困难;

  ②不支持跨越多个聚合的ACID事务

  聚合结构在事务方面的支持有限;有一些NOSQL产品实现了简单的事务支持,但对于跨越多个聚合结构的事务并不完善;

  3、规划数据访问方式

  ①选用NoSQL数据库,首要的工作就是设计键名及存放的数据;

  ②设计的原则是尽量减少所需要访问的聚合个数,在尽量少的交互中拿到所需要的数据;

  ③如果发现需要通过多种查询条件来获取数据,可能就选用NOSQL就不合适;关系数据库才是首选;

  4、面向聚合的数据库

  ①键值数据库

  可以存储任意数据,存储的数据对用户不透明,从外面看,只是包含了没有太多意义的大块数据;

  访问方式:通过键来查找

  ②文档数据库

  文档数据库存储时定义了其允许的结构和数据类型,从外面看,可以看到内部结构;

  在存储时限制其中存放的数据,这样带来的好处是能够更灵活的访问数据;

  访问方式:

  可用键名查询

  可用聚合中的字段查询(定义存储的数据的结构所带来的好处)

  可按照聚合内容创建索引

  ③列族数据模型

  大多数数据库以行为单位存储数据,尤其是在需要提高写入性能时尤为如此。然而某些场合下写入操作少,但经常需要一次性读取若干行中的很多列,这种情况下将所有行的某一组列作为基本数据存储单位效果最佳。“列存储数据库”由此而来。

  BigTable及其后继者遵循了“以一组列(列族)来存储”的概念。

  理解列族模型最好的方式是将其视为“两级聚合结构”。比如一个以列族模型描述的用户信息结构,每一行代表一个用户,包含了基本信息列族(有姓名、住址、年龄等信息)、订单列族(包含所有订单列表)等,其中第一级聚合就是“行聚合”,是行键到一行数据的映射,包含了一些有用数据块(基本信息、订单信息)的列族。第二级聚合是“列族聚合”,每一个列族都定义了一种记录类型,如客户信息。

  5、相关:关系数据模型

  对于数据模型,我们最熟悉的莫过于关系数据模型;

  关系数据模型是一种“聚合无知模型”;

  在组织数据时,使用E-R模型规划清晰;

  这样带来的好处是很容易以不同的方式来查询数据(各种where条件甚至join)

  关系型数据库都是使用关系数据模型,比如Oracle

  小编结语:

  三种面向聚合的数据模型的共同点是,他们都是用聚合这一概念,而且聚合中都有一个可以查找其内容的索引键。在集群上运行时,聚合都是重点环节,因为数据库必须保证将聚合内的数据存在同一节点上。聚合还是”更新“操作的最小数据单位,对于事务控制来说,以聚合为操作单元,其大小正合适。

  更多内容尽在课课家教育!

赞(16)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程