IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Day020-2021-08-25 数据库设计范式 事务 代理模式 -> 正文阅读

[大数据]Day020-2021-08-25 数据库设计范式 事务 代理模式

第二十天,数据库的一些概念性知识

一、数据库设计范式

1.1 原子性

保证每个字段都是最小单位。
这样可以避免使用 like 查询,效率更高。
但是在实际操作中使用起来十分麻烦。

1.2 主键

每一行数据都需要有唯一标识。
现代开发中不能违反的范式。

1.3 外键

表中如果需要有外表的信息,则必须用一个外键指向那个表的主键。
尽量避免重复字段。
但是在实际操作中可能会增加冗余字段以便查询。

二、主键和外键

一个表便于定位信息的唯一标识,便是这个表的主键。
一个表有一个字段指向另一个表的主键,这个字段便是外键。

2.1 强制关联

1° 严格模式-restrict

主表不能随意删除数据,从表不能随意新增数据。

2° 级联模式-cascade

主表删除数据,数据库会自动删除与之关联的从表数据。

2.2 主外键关联的劣势

灵活性降低。
不适应现代分布式微服务类系统。

三、事务

3.1 事务的格式

try{
connect.setAutoCommit(false);

connect.commit();
}catch (Exception e){
connect.rollack;
}

3.2 事务的特性

1° 原子性

指一系列动作不可拆分或打断,会同时成功或失败。

2° 一致性

开发的终极目标。
保证事务完成后,数据仍然正确。

3° 持久性

事务对数据的改变会永久写入数据库。

4° 隔离性

原子性的基础上加上最高级别的隔离性,一定能保证一致性。

3.3 隔离级别

1° 读未提交

一个事务中未提交的数据,也会被其他事务读到。
不能防脏读。

2° 读已提交-RC级别

一个事务中的数据在提交以后才能被其他事务读到。
不能防不可重复读和幻影读。

3° 可重复读-RR级别

4° 串行化

所有事务排队执行,不并发。
为最高级别隔离。
但是此级别性能太差,卡顿,易锁死,一般不用。
强竞争性场景的数据一致问题,用 java 中的 synchronized 解决。

5° MVCC机制

多版本控制机制。

四、代理模式

4.1 什么是代理

  1. 代理就是由代理对象代替原对象执行一系列操作。
  2. 可以优雅的植入逻辑。
  3. 代理对象必须忠实的执行原对象的功能,但在执行过程中会加入自己的逻辑。
  4. 动态代理的解耦性,做到了老逻辑与新植入逻辑的分离。

4.2 概念

  1. 切点:原有的方法。
  2. 切面:新植入的逻辑。
  3. 分类
    前置逻辑:before
    后置逻辑:after
    环绕逻辑:around

4.3 格式

public interface A {
	public void methodA();

	public void methodB();
}
public class Aimpl implements A {
	@Override
	public void methodA() {
		System.out.println("run-A-methodA");
	}

	@Override
	public void methodB() {
		System.out.println("run-A-methodB");
	}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class MyHandler implements InvocationHandler {
	private Object o;

	public MyHandler(Object o) {
		this.o = o;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("植入逻辑:before");
		Object result = method.invoke(o, args);
		System.out.println("植入逻辑:after");
		return result;
	}
}
import java.lang.reflect.Proxy;

public class Test {
	public static void main(String[] args) {
		A a = new Aimpl();
		A aProxy = (A) Proxy.newProxyInstance(Test.class.getClassLoader(), a.getClass().getInterfaces(),
				new MyHandler(a));
		System.out.println("------");
		a.methodA();
		System.out.println("------");
		a.methodB();
		System.out.println("------");
		aProxy.methodA();
		System.out.println("------");
		aProxy.methodB();
		System.out.println("------");
	}
}

运行结果:
运行结果

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-07 10:53:46  更:2021-09-07 10:56:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:34:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码