结构冲突
在数据库领域,冲突主要指的是在并发操作中,多个事务试图同时访问或修改相同的数据资源,导致数据一致性、完整性和隔离性受到威胁。以下是数据库中常见的几种冲突类型:
-
读写冲突(Read-Write Conflict):
- 当一个事务在读数据的同时,另一个事务试图修改该数据,就会产生读写冲突。这种冲突可能导致“脏读”、“不可重复读”和“幻读”等问题。
-
写写冲突(Write-Write Conflict):
- 当多个事务同时试图修改同一数据时,就会产生写写冲突。这种冲突可能导致数据丢失或覆盖。
-
死锁(Deadlock):
- 两个或多个事务互相等待对方释放资源,导致系统进入停滞状态。
-
命名冲突(Naming Conflict):
- 在数据库设计中,两个或多个元素(如实体、属性、关系等)使用了相同的名字,导致混淆和错误。
-
属性冲突(Attribute Conflict):
- 在不同实体或关系中,属性具有相同的名字,但表示不同的意义或类型。
-
结构冲突(Structural Conflict):
- 在合并多个ER图时,实体之间的关系结构不一致,导致难以整合。
这些冲突类型对数据库的影响不同,处理方法也有所差异。数据库管理系统(DBMS)通过锁机制、事务隔离级别、死锁检测等手段来识别和处理这些冲突,以确保数据的一致性和系统的高效运行。
同一实体在不同的ER图中属性个数和排列次数不同,归属于结构冲突
(真题考点)。
ACID特性:
- 数据库的ACID特性是确保数据库事务可靠性和一致性的四个关键属性。ACID是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)的缩写。下面是每个特性的详细解释:
-
原子性(Atomicity):
- 原子性意味着事务中的所有操作要么全部完成,要么全部不完成。如果事务中的某个操作失败,整个事务将回滚到事务开始前的状态,就像这个事务从未执行过一样。这种特性确保了事务的不可分割性。
-
一致性(Consistency):
- 一致性确保事务的执行将数据库从一个一致的状态转换到另一个一致的状态。在事务开始之前和事务结束之后,数据库的完整性约束都必须得到满足。这意味着事务执行过程中不会违反任何预定义的规则和约束。
-
隔离性(Isolation):
- 隔离性保证了并发执行的事务之间的操作不会相互干扰。每个事务都像是在一个独立的环境中执行,对其他事务不可见,直到事务完成并提交。不同的数据库系统可能支持不同的隔离级别,如读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。
-
持久性(Durability):
- 持久性意味着一旦事务被提交,它对数据库的修改就是永久性的,即使系统发生故障也不会丢失。数据库系统必须确保已提交的事务修改能够被保存到持久化存储中,通常是磁盘。
ACID特性是数据库事务处理的核心,它们共同工作以确保数据库的可靠性和数据的完整性。不同的数据库管理系统可能在实现这些特性时有所不同,但它们都必须遵循ACID原则来提供可靠的事务处理能力。
NoSQL
区别于关系型数据库,不保证ACID特性的数据库类型
1、列式数据库,通过列来组织和存储数据,比如Hbase
2、键值对数据库,比如Redis
3、文档型数据库
4、图数据库
特点:
1、易扩展
2、大数据量,高性能
3、灵活的数据模型,无需事前为要存储的数据建立字段,随时可用存储自定义的数据格式
4、高可用
体系架构,从上到下:
接口层,比如Rest,Map/Reduce,数据调用接口
数据逻辑层,数据逻辑表现形式
数据分布层,数据如何进行分布的,类似关系是数据库,CAP支持,数据中心支持,动态部署支持
数据持久层:数据的存储形式,比如内存,硬盘,内存和硬盘接口,定制可插拔四种形式。定制可插拔保证了数据存取具有较高的灵活性。
数据分布层三种支持的解释:
在数据库领域,数据分布层的CAP支持、数据中心支持和动态部署支持是构建高可用、高性能和可扩展数据库系统的关键特性。以下是对这些特性的详细解释:
-
CAP支持(Consistency, Availability, Partition tolerance):
- 一致性(Consistency):在分布式系统中,一致性指的是数据在多个节点之间保持同步。强一致性意味着任何时候读取的数据都是最新的,而弱一致性或最终一致性则允许数据在一段时间内不同步,但最终会达到一致状态。
- 可用性(Availability):指系统在任何时候都能响应用户的请求,即使在部分节点失败的情况下。高可用性系统能够容忍节点故障,而不影响整体服务。
- 分区容错性(Partition tolerance):在网络分区发生时,系统仍然能够继续运行。由于网络问题,分布式系统中的节点可能会被分割成不同的分区,分区容错性要求系统在这种情况下仍然能够工作。
-
数据中心支持:
- 数据中心支持涉及到数据库系统在
多个数据中心的部署和运行能力
。这包括数据的跨数据中心复制、备份和恢复,以及在数据中心之间进行负载均衡和故障转移,以确保数据的高可用性和业务连续性。
- 数据中心支持涉及到数据库系统在
-
动态部署支持:
- 动态部署支持指的是数据库系统能够
根据业务需求和负载变化,动态地调整资源分配和配置
。这包括动态增加或减少数据库节点、动态调整数据分区(Sharding)策略,以及在运行时切换数据源等。例如,dynamic-datasource
是一个开源的 Spring Boot 多数据源启动器,它支持数据源分组、敏感信息加密、独立初始化表结构等功能,允许项目启动后动态增加或移除数据源。
- 动态部署支持指的是数据库系统能够
这些特性共同构成了现代数据库系统在分布式环境下的核心能力,使得数据库能够更好地应对大规模数据和高并发请求的挑战。
数据持久层的特点
数据持久层是软件架构中负责数据存储和管理的部分,它涉及到数据如何在系统中被保存和访问。数据的存储形式包括内存、硬盘、内存和硬盘的接口,以及定制可插拔存储解决方案。以下是这四种形式的简要说明和为什么定制可插拔形式能够提供较高的灵活性:
-
内存(Memory):
- 数据存储在RAM中,访问速度快,但成本较高,且数据在断电后会丢失。
-
硬盘(Hard Disk):
- 数据存储在硬盘驱动器上,成本较低,容量大,但访问速度比内存慢。
-
内存和硬盘接口(Memory-Disk Interface):
- 指的是缓存系统,如Redis或Memcached,它们作为内存和硬盘之间的桥梁,提供快速的数据访问,同时将数据持久化到硬盘。
-
定制可插拔(Customizable and Pluggable):
- 定制可插拔的数据存储解决方案允许开发者
根据特定需求定制存储系统
,包括数据的存储格式、访问模式、持久化策略
等。这种灵活性主要体现在以下几个方面:- 技术多样性:不同的应用可能需要不同的存储技术,如关系型数据库、NoSQL数据库、文件系统等。定制可插拔允许根据需求选择合适的存储技术。
- 扩展性:随着业务的发展,数据存储需求可能会变化。定制可插拔的解决方案可以根据需要轻松扩展或替换存储组件。
- 维护和升级:定制的解决方案可以更容易地进行维护和升级,因为它们通常与特定的业务逻辑紧密集成。
- 性能优化:定制解决方案可以根据特定的访问模式和数据特征进行优化,提高性能。
- 成本效益:通过定制,可以选择成本效益最高的存储解决方案,避免不必要的开销。
- 数据一致性和完整性:定制解决方案可以更好地控制数据的一致性和完整性,尤其是在复杂的事务处理中。
- 定制可插拔的数据存储解决方案允许开发者
定制可插拔的数据持久层解决方案提供了高度的灵活性和控制力,使得开发者能够根据应用的具体需求设计和实现最适合的数据存储策略。这种灵活性是构建高效、可靠和可维护系统的关键。