数据库理论(七)——并发控制
数据库理论(七)——并发控制
并发控制的任务:
1. 对并发操作进行正确调度
2. 保证事物的隔离性
3. 保证数据库的一致性
并发操作可能带来的数据不一致性:
丢失修改
不可重复读
读“脏”数据
辅助符号:
R(X):读数据x
W(X):写数据x
并发控制的基本理念
封锁(Locking)
时间戳(Timestamp)
乐观控制法
商用的DBMS通常采用封锁发方法
封锁
封锁指事物T在对某个数据对象(表,记录)操作之前,先向系统发出请求,对其加锁;
加锁后,事物T就对该数据对象有了一定的控制,在事物T1释放它的锁之前,其他事物不能更新此数据对象。
事物对数据对象加锁的类型决定了事物对数据对象的控制
排他锁(Exclusive Locks,简记为X锁,写锁)
事物T在更新数据对象之前,必须先获得数据对象的排他锁
若事物T对数据对象A加上X锁,则只允许T读取和修改A,其他任何事物都不能在对A加任何类型的锁
共享锁(Share Locks,简记为S锁,读锁)
事物T在读取数据对象之前,必须先获得数据对象的共享锁
若事物T对数据对象A加上S锁,则其他事物只能再对A加上 ...
数据库理论(六)——数据库恢复
数据库理论(六)——数据库恢复
在数据库的数据操作过程中,通常会经过两个部分,一个是经过数据文件,对数据进行读写,还有一个部分会进入日志文件对数据库的操作行为进行记录
数据库操作的组织模式
事物(Transaction)
一个数据库操作序列
一个不可分割的工作单元
恢复和并发控制的基本单元
事物定义的sql语句
12345678910111213-- 显式定义begin transactionsql语句1sql语句2commitbegin transactionsql语句1sql语句2rollback-- 隐式定义当用户没有显示地定义事物时,DBMS将自动划分事物
数据库故障
事物内部的故障
比如:运算溢出,发生死锁,违反某些完整性限制
发生事物故障时,事物中的操作一部分已经发生,一部分还没有开始,因此需要对发生的操作进行撤销(UNDO)
系统故障
造成系统停止运转的任何事件:
1. 系统要重新启动
2. 所有正在运行的事物都非正常终止
3. 没有破坏数据库
4. 内存中数据库缓冲区的信息全部丢失
典型的系统故障:
1. 特定类型的硬件错误(CPU故障)
2. 操作系统故障
3. ...
数据库理论(五)——数据库设计
数据库理论(五)——数据库设计
E-R图描述显示世界的概念模型
用图形化的方法表示数据的结构,用到三个主要的元素
实体(Entity):某种抽象对象(构成实体集),用长方形表示
联系(relationship):两个或多个实体集的链接,用菱形表示
二元关系:联系两个实体集
多路联系:链接多个实体集
属性:实体集中实体具有的属性,联系也可以有属性,用椭圆形表示
用边联系实体集和他的属性,联系和实体
实体之间的联系
1对1联系:对于实体集A中的每个实体,实体集B中至多有1个实体与之联系,反之亦然,则实体集A和实体集B具有1:1联系
1对多联系:对于实体集A中的每个实体,实体集B中有n个实体与之联系,反之实体集B中的每个实体,在实体集A中至多有一个实体与之联系,则实体集A和实体集B具有1:n联系
多对多联系:对于实体集A中的每个实体,实体集B中有m个实体与之联系,反之实体集B中的每个实体,在实体集A中有n个实体与之联系,则实体集A和实体集B具有m:n联系
将实体联系转化成关系模式
转化规则
1:1的联系(S,T)
选中其中一个关系,假设选S,将T的主码作为S的外 ...
数据库理论(三)——完整性约束及触发器
数据库理论(三)——完整性约束,触发器和数据库安全
关系模型的实体完整性
码
实体完整性的定义:primary key(主码)
约束:
1. 列级约束,在定义好属性后进行约束,只对单个属性,**约束方式**:主键,外键,唯一,检查,默认,非空
2. 表级约束,对多个属性进行约束,通常在定义好属性之后编写,**联合主码**通常使用的是表级约束,**约束方式**:主键,外键,唯一,检查
对应sql语句
1234567891011121314151617create table 表名( -- 非空 属性1 类型1 not null, -- 唯一 属性2 类型2 unique, -- 默认 属性3 类型3 default 默认值, -- 检查 属性4 类型4 check (只有属性4满足L条件时才能正常创建) -- 联合组件 primary key(属性1,属性2), -- 外码 foreign key(属性1) references 另一个表(属性1), -- 表级检查,条件L可以对上面定义过的任意一个属性进行检查 ...
数据库理论(二)——索引与视图
数据库理论(二)——索引与视图
数据库对象
表(tables):关系在数据库中的表现形式
视图(Views):虚表,从一个或者多个table中导出的,数据库中存放视图的结构而不存放视图对应的数据,可以基于存在的视图定义新的视图。
索引(index):一种特殊的存储结构,伴随基本表存在,是基本表中若干属性(组)的有序结构;用于加快数据库的查询速度。
1个关系数据库实例->多个数据库
1个数据库->多个模式
1个模式->多个表,视图,索引等数据库对象
创建和删除数据库
1234-- 创建数据库CREATE DATABASE 数据库的名称;-- 删除数据库DROP DATABASE 数据库的名称;
模式的创建与删除
1234-- 创建模式,作者是用户CREATE SCHEMA 模式名称 AUTHORIZATION 用户名;-- 删除模式 cascade级联删除——删除该模式下的所有数据库对象,restrict限制删除——只有模式为空的时候才能删除drop schema 模式名称 <cascade|restrict>
表的创建,修改与删除
123456789101 ...
数据库理论(一)——基本概念与关系代数
数据库理论(一)——基本概念与关系代数
基本概念
数据库(Database):长期存储在计算机内的,有组织的,可共享的数据集合
数据库管理系统(DBMS databases management system):能够有效建立和维护大量数据的强大工具
数据库管理员(DBA)
用户(User)
型:某一类数据的结构和属性的说明
值:型的一个具体赋值
模式(schema):数据库中全体数据的逻辑结构和特征描述
实例:模式的一个具体的值
数据模型的三个层面
概念层面
逻辑层面
物理层面
(逻辑)数据模型 = 数据结构 + 数据操作集合 + 数据完整性约束
关系数据模型 = 关系数据结构 + 关系数据操作集合 + 关系数据完整性约束
数据库的三级结构模式:
模式(Schema):数据操作
内模式(Internal Schema):数据存储方式
外模式(External Schema):视图
关系模型
关系模型的数据结构:关系
关系的本质:二维表
域(Domain):一组具有相同数据类型的值的集合
元组(Tuple):关系中的每一行
属性(Attribute):关系中的每一列
分量(Compon ...
BiSeNet实时语义分割
BiSeNet实时语义分割
论文名称:BiSeNet: Bilateral Segmentation Network for Real-time Semantic Segmentation
作者:Changqian Yu, Jingbo Wang, Chao Peng, Changxin Gao, Gang Yu, Nong Sang
期刊:ECCV 2018
代码:https://github.com/CoinCheung/BiSeNet/tree/master/old
摘要
本文设计了一个双边分割网络(BiSeNet),设计一个步幅小的空间路径,保留空间信息生成高分辨率的特征。此外采用具有快速下采样策略的上下文路径来获得足够的接收场。在两个路径的顶部,引入了一个新的功能融合模块,以有效地组合功能。
常用的加速模型方法
限制输入大小,通过裁剪或调整大小来降低复杂性,但这样会使得空间细节丢失
修剪网络通道提高推理速度,但是这种做法削弱了空间容量
放弃模型最后一个阶段,但这种方式不足以覆盖大对象从而导致判别能力较差。
u型结构设计,弥补了空间细节的损失嘛但是由于高分辨率特征图上引入 ...
递归与递推
递归与递推
说白了就是搜索算法和简单动归
递归实现指数型枚举
递归实现指数型枚举
解题思路:
主要就是深搜dfs,对于一个数,我们要么选择他要么不选择他就两种情况,搜够n层,然后输出就行
用u表示现在搜第u层,status表示当前选中的点,看成二进制数,第i位为0表示不选择i,为1表示选择i。
AC代码
123456789101112131415161718192021222324#include <bits/stdc++.h>using namespace std;int n;// 当前可选择的数为u,状态位status当作二进制看,0的位置位不选,1的位置为选void dfs(int u,int status){ if(u==n){ for(int i=0;i<n;i++) { if(status>>i&1) cout<<i+1<<" "; } co ...
位运算运用
位运算的应用
快速幂
题目:
a^b
快速幂讲解
假设我们要计算3113^{11}311
这个当然可以用暴力的方式去算,没啥问题,那这样就要算11次,即n次
可以看一下11的二进制为1011
311=38∗32∗313^{11} = 3^8*3^2*3^1311=38∗32∗31
这个结果很显然,可以得出11的二进制中对应1的位置,恰好为3113^{11}311的一个因素,这是不是巧合呢?我们不妨再尝试一个
30的二进制为11110
1030=1016∗108∗104∗10210^{30} = 10^{16}*10^{8}*10^4*10^21030=1016∗108∗104∗102
显然这不是一个巧合。
而我们可以看出,二进制指数的计算过层是可以被简化的
比如1016=28∗2810^{16} = 2^{8}*2^{8}1016=28∗28,在前面的计算过程中,我们又可以通过242^424计算出282^828。
这就是快速幂的思想了
AC代码:
123456789101112131415161718192021222324252627#include <iostream> ...
Fast-SCNN快速语义分割
Fast-SCNN快速语义分割
论文名:Fast-SCNN: Fast Semantic Segmentation Network
作者:Rudra P K Poudel, Stephan Liwicki, Roberto Cipolla
代码:无github代码,只有modelarts上的baseline
摘要
主要贡献:
提出了一个有竞争性(68.0%miou),并且能在高分辨率(1024x2048)的图片实现实时(123.5FPS)语义分割的算法Fast-SCNN.
采用了离线型DCNNs中流行的跳跃连接(skip connection),并提出了一种浅层学习的下采样模块learning to Down-sample,以此更加快速高效地进行多分支低级特征提取。
将Fast-SCNN设计为轻量型(low capacity),并证实了无论是使用ImageNet数据集的训练模型多训练几代,还是在添加的粗糙数据中多训练几代的结果是等效的。
DCNNs的效率
高效DCNNs(Diffusion-Convolutional Neural Networks )的常见技术为:
深度可分离 ...