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

其实我们也可以把部分应用逻辑放到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. Linux将用户添加到组的指令

    原文:https://blog.csdn.net/youmatterhsp/article/details/80549683:           https://www.cnblogs.com/cl ...

  2. /sys 和 /dev 区别

    参考:What's the “/sys” directory for? Directory - /sys in linux 前言 各种Linux发行版下面似乎都有/sys目录,tree查看下面内容,会 ...

  3. xtarbackup 简单恢复

    xtrbackup Xtrabackup安装 #下载epel源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/ep ...

  4. 深度学习 吴恩达深度学习课程2第三周 tensorflow实践 参数初始化的影响

    博主 撸的  该节 代码 地址 :https://github.com/LemonTree1994/machine-learning/blob/master/%E5%90%B4%E6%81%A9%E8 ...

  5. Oracle 中 CONTAINS 函数的用法

    Oracle 中 CONTAINS 函数的用法 1. 查询住址在北京的学生 SELECT student_id,student_name FROM students WHERE CONTAINS( a ...

  6. 为什么要使用ConcurrentHashMap

    好久没写过技术性文章了,还是要坚持下去.掌握的知识,能写出来或者是讲给别人听才是真正的掌握了知识,如果不善于给别人讲,实际上还是没有真正掌握相关的知识,挑个简单的写吧. 面试的时候经常会被问到hash ...

  7. 学习Spring-Data-Jpa(七)---JpaRepository

    之前我们学习的Repository都是Spring-Data为了兼容NoSQL而进行的一些抽象封装,从JpaRepository开始是对关系型数据库进行抽象封装.JpaRepository位于spri ...

  8. 洛谷 P1955 [NOI2015]程序自动分析 题解

    每日一题 day22 打卡 Analysis 离散化+并查集 先离散化所有的约束条件,再处理所有e=1的条件,将i的祖先和j的祖先合并到一个集合中:e=0时,如果i的祖先与j的祖先在同一个集合中,说明 ...

  9. MySQL UTF8 转为 utf8mb4

    https://mathiasbynens.be/notes/mysql-utf8mb4#utf8-to-utf8mb4 How to support full Unicode in MySQL da ...

  10. 《挑战30天C++入门极限》C++的iostream标准库介绍(3)

        C++的iostream标准库介绍(3) C语言提供了格式化输入输出的方法,C++也同样,但是C++的控制符使用起来更为简单方便,在c++下有两中方法控制格式化输入输出. 1.有流对象的成员函 ...