CMU Database Systems - Embedded Database Logic
正常应用和数据库交互的过程是这样的,
其实我们也可以把部分应用逻辑放到DB端去执行,来提升效率
User-defined Function
Stored Procedures
Triggers
Change Notification
User-defined Types
Views
UDF
用户定义的function,往往用于select中,不会修改数据本身
UDF可以用SQL实现,也可以用外部语言,右边是PG的例子
Stored Procedure
存储过程,可以理解成在数据库上执行一个脚本
不但可以读还可以操作修改库
存储过程的执行往往直接在命令行执行
Trigger
触发器,按条件去触发逻辑
3个要素,事件类型,事件的范围,什么时候触发
例子,当foo表被改动的时候,往foo audit表里面插入一条audit记录
首先要定义UDF,log_foo_updates
然后定义trigger,foo_updates,时间是在更新前,before update,范围是每一行,for each row
Change Notification
trigger是在数据库内部的操作,如果要把消息通知到外部用户,就需要change Notification
User-Defined Type
一般如果要在数据库里面存储复杂类型,有两种方式
是否有更为优雅的方式?
UDT,了解一下
View
View是虚拟的,其实是一种sql改写,你对view写的sql最终会被改写成对原表的查询sql
所以View不会提升查询性能
最要为了表达方便,比如对一个非常复杂的查询生成一个view,那就不用每次都重复写这个复杂查询
还有用处,不想让别人直接读原表的所有知道,用view做一个过滤,只让他看到他应该看的
View由于是虚拟,所以不存在同步问题,原表更新了,view也会一起更新,因为都是重新查的
这个和Select...Into不同,select into是做snapshot,会把内容真正的写入静态表里面,这样如果原表更新了,snapshot是不会跟着变的
还有一种view
物化视图,这个一般只有在商业化数据库中有实现
物化视图就是做优化,他会materialized部分或全部数据,这样查询view的时候性能就会很好,然后当原表更新的时候,物化视图也要跟着被更新
物化视图如何实现的,有很多方法,比如用trigger,但是高效的实现是很困难的
CMU Database Systems - Embedded Database Logic的更多相关文章
- 解决spring-boot启动中碰到的问题:Cannot determine embedded database driver class for database type NONE
问题 如下: 2017-07-16 08:50:57.436 INFO 13524 --- [ main] c.p.p.web.PointshopWebApplication ...
- If you want an embedded database (H2, HSQL or Derby), please put it on the classpath.
学习Spring Boot 过程中遇到了下列这个问题 Description: Failed to configure a DataSource: 'url' attribute is not spe ...
- Cannot determine embedded database driver class for database type NONE
springboot+jpa使用自定义配置文件连接数据库报错:Cannot determine embedded database driver class for database type NON ...
- Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationException: Cannot determine embedded database driver class for database type NONE. If you want an embe
Caused by: org.springframework.boot.autoconfigure.jdbc.DataSourceProperties$DataSourceBeanCreationEx ...
- 深入Spring Boot:怎样排查 Cannot determine embedded database driver class for database type NONE
ref:https://www.journaldev.com/13830/spring-boot-cannot-determine-embedded-database-driver-class-for ...
- Eureka 客户端启动报错误 Cannot determine embedded database driver class for database type NONE
用这种数据库配置就是死活连不上数据库 提示:Cannot determine embedded database driver class for database type NONE 解决方式: 启 ...
- Springboot项目启动报错,提示Cannot determine embedded database driver class for database type NONE
我在springboot项目里面引入了数据库的配置: <dependency> <groupId>org.mybatis.spring.boot</groupId> ...
- spriing boot 启动报错:Cannot determine embedded database driver class for database type NONE
最近在学习使用spring boot.使用maven创建好工程,只引用需要用到的spring boot相关的jar包,除此之外没有任何的配置. 写了一个最简单的例子,如下所示: package com ...
- Harvard数据库课程CS 265: Research Topics in Database Systems
CS 265: Research Topics in Database Systems Announcements Quiz 3 will be posted. Good luck! Quiz 2 h ...
随机推荐
- Yarn Nodemanager启动不了报YarnRuntimeException: Failed to initialize container executor error=13 权限不够
1.现象:有一个节点的NodeManager启动不了. 后台报错日志如下: org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Failed ...
- LFS7.10——构造临时Linux系统
参考:LFS编译——准备Host系统 前言 在准备好Host环境后,接下来构造一个临时Linux系统.该系统包含****构建所需要的工具.构造临时Linux系统分两步: 构建一个宿主系统无关的新工具链 ...
- openwrt使用3G拔号的实践笔记
参照文档: https://soha.moe/post/make-4g-wifi-ap-with-openwrt.html 步骤: 1.安装必要的包: opkg update opkg install ...
- Proxmox 命令使用方法
proxmox 虚拟机使用命令介绍 qm <command> <vmid> [OPTIONS] ...
- 新添加的磁盘大于2T 的分区方法
环境CentOS7.1 2.9t磁盘 fdisk 只能分区小于2t的磁盘,大于2t的话,就要用到parted 1,将磁盘上原有的分区删除掉: 进入:#parted /dev/sdb 查看:(par ...
- Luogu P1627 中位数
Luogu P1627 中位数 先记录目标数的位置,并且把数组映射为: $$a[i]=\begin{cases}-1,a[i]<b\0,a[i]=b\1,a[i]>b\end{cases} ...
- 十五.ProtoBuf3的基础总结
转自: https://blog.csdn.net/u011518120/article/details/54604615 定义一个消息类型 指定字段类型 分配标识号 指定字段规则 添加更多消息类型 ...
- for循环中嵌套异步请求问题
for循环中嵌套了异步请求会导致顺序错乱,用递归代替for循环,可以保证正常执行顺序:
- ContextLoaderListener解析
推荐:spring源码 每一个整合spring框架的项目中,总是不可避免地要在web.xml中加入这样一段配置. <!-- Spring配置文件开始 --> <context-par ...
- go语言-二进制与位运算
一.进制介绍 1.二进制:0,1 -->不能直接用二进制来表示一个整数,用%b输出二进制 package mainimport "fmt"func main() { var ...