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 ...
随机推荐
- spark 机器学习 随机森林 原理(一)
1.什么是随机森林顾名思义,是用随机的方式建立一个森林,森林里面有很多的决策树组成,随机森林的每一棵决 策树之间是没有关联的.在得到森林之后,当有一个新的输入样本进入的时候,就让森林中的每一棵决策树分 ...
- c# ArrayList 类
- github markdown语法及使用
历史 Markdown是一种轻量级标记语言,创始人为约翰·格鲁伯(英语:John Gruber).它允许人们"使用易读易写的纯文本格式编写文档,然后转换成有效的XHTML(或者HTML)文档 ...
- 初识python多线程
目录 GIL锁 Thread类构造方法 Lock类.Rlock类 参考: python3多线程--官方教程中文版 python多线程-1 python多线程-2.1 python多线程-2.2 pyt ...
- java连接Oracle数据库的操作说明
在测试中,我们常常需要连接Oracle数据库来进行查询对比.下面,我们就来看看,如何使用java代码来连接数据库,并且取出我们想要的数值. 首先,java中如果要连接Oracle数据库,需要jdbc的 ...
- codevs 1341 与3和5无关的数
题目描述 Description 有一正整数a,如果它能被x整除,或者它的十进制表示法中某位上的数字为x,则称a与x相关.现求所有小于等于n的与3或5无关的正整数的平方和. 输入描述 Input De ...
- sql查询排序
ORDER BY _column1, _column2; /* _column1升序,_column2升序 */ ORDER BY _column1, _column2 DESC; /* ...
- EPL II 编程打印
一.EPL II 格式及打印测试 注意N命令前的换行和最后P1后的换行.将此段代码复制到windows记事本里另存为Print.ext,文件名随便,后缀为ext.然后通过cmd控制命令行输入" ...
- 【CSP游记S】
简略:初三小蒟蒻本想体验一下提高,结果尝到了省选的滋味.fclose没有打,目前不知道会不会有影响,很伤心. day 1 大早上的6:30起床天好黑啊~,想起这次没有面包吃,到华生园买了包熊博士(毕竟 ...
- 【FTP】Wireshark学习FTP流程
一.Wireshark概述 在windows下, 图1 Wireshark界面展示(基于1.99.1) Wireshark是通过底层的winpcap来实现抓包的.winpcap是用于网络封包抓取的一套 ...