正常应用和数据库交互的过程是这样的,

其实我们也可以把部分应用逻辑放到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的更多相关文章

  1. 解决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   ...

  2. 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 ...

  3. Cannot determine embedded database driver class for database type NONE

    springboot+jpa使用自定义配置文件连接数据库报错:Cannot determine embedded database driver class for database type NON ...

  4. 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 ...

  5. 深入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 ...

  6. Eureka 客户端启动报错误 Cannot determine embedded database driver class for database type NONE

    用这种数据库配置就是死活连不上数据库 提示:Cannot determine embedded database driver class for database type NONE 解决方式: 启 ...

  7. Springboot项目启动报错,提示Cannot determine embedded database driver class for database type NONE

    我在springboot项目里面引入了数据库的配置: <dependency> <groupId>org.mybatis.spring.boot</groupId> ...

  8. spriing boot 启动报错:Cannot determine embedded database driver class for database type NONE

    最近在学习使用spring boot.使用maven创建好工程,只引用需要用到的spring boot相关的jar包,除此之外没有任何的配置. 写了一个最简单的例子,如下所示: package com ...

  9. 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 ...

随机推荐

  1. Yarn Nodemanager启动不了报YarnRuntimeException: Failed to initialize container executor error=13 权限不够

    1.现象:有一个节点的NodeManager启动不了. 后台报错日志如下: org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Failed ...

  2. LFS7.10——构造临时Linux系统

    参考:LFS编译——准备Host系统 前言 在准备好Host环境后,接下来构造一个临时Linux系统.该系统包含****构建所需要的工具.构造临时Linux系统分两步: 构建一个宿主系统无关的新工具链 ...

  3. openwrt使用3G拔号的实践笔记

    参照文档: https://soha.moe/post/make-4g-wifi-ap-with-openwrt.html 步骤: 1.安装必要的包: opkg update opkg install ...

  4. Proxmox 命令使用方法

    proxmox 虚拟机使用命令介绍 qm <command> <vmid> [OPTIONS]                                          ...

  5. 新添加的磁盘大于2T 的分区方法

    环境CentOS7.1 2.9t磁盘 fdisk 只能分区小于2t的磁盘,大于2t的话,就要用到parted 1,将磁盘上原有的分区删除掉: 进入:#parted   /dev/sdb 查看:(par ...

  6. Luogu P1627 中位数

    Luogu P1627 中位数 先记录目标数的位置,并且把数组映射为: $$a[i]=\begin{cases}-1,a[i]<b\0,a[i]=b\1,a[i]>b\end{cases} ...

  7. 十五.ProtoBuf3的基础总结

    转自: https://blog.csdn.net/u011518120/article/details/54604615 定义一个消息类型 指定字段类型 分配标识号 指定字段规则 添加更多消息类型 ...

  8. for循环中嵌套异步请求问题

    for循环中嵌套了异步请求会导致顺序错乱,用递归代替for循环,可以保证正常执行顺序:

  9. ContextLoaderListener解析

    推荐:spring源码 每一个整合spring框架的项目中,总是不可避免地要在web.xml中加入这样一段配置. <!-- Spring配置文件开始 --> <context-par ...

  10. go语言-二进制与位运算

    一.进制介绍 1.二进制:0,1 -->不能直接用二进制来表示一个整数,用%b输出二进制 package mainimport "fmt"func main() { var ...