Sorting 排序如果可在内存里面排,用经典的排序算法就ok,比如快排 问题在于,数据表中的的数据是很多的,没法一下都放到内存里面进行排序 所以就需要用到,外排,多路并归排序 看下最简单的,2路并归排序, 设文件分为N个page,memory中一次最多可以放入B个pages 所以在sort过程,一次性可以载入B个page,在内存中page内排序,写回disk,称为一轮,run那么如果一共N个page,需要N/B+1个run 在merge过程,如果双路并归排序,只需要用到3个page的buffe…
Database Storage 存储分为volatile和non-volatile,越快的越贵越小 那么所以要解决的第一个问题就是,如果尽量在有限的成本下,让读写更快些 意思就是,尽量读写volatile存储,但是volatile比较很有限,所以需要合理的在两种存储上去swap 但是技术是在飞速的进步的,所以现在有Non-volatile memory 所以最近流行内存数据库,因为当前的memory和磁盘间的IO瓶颈已经消除,所以当前的瓶颈是CPU cache和Memory之前的问题 这个问题…
OLTP scale-up和scale-out scale-up会有上限,无法不断up,而且相对而言,up升级会比较麻烦,所以大数据,云计算需要scale-out scale-out,就是分布式数据库,刚开始肯定是Shared Nothing,但是分布式也引入了更高的架构复杂度和维护成本 所以现在的趋势,是架构分层,层之间是逻辑的scale-up,层内部是物理的scale-out 最终sharing-everything,其实在架构上又回到了scale-up 所以随着硬件的进步和技术的演进,架构…
数据库数据丢失的典型场景如下, 数据commit后,还没有来得及flush到disk,这时候crash就会丢失数据 当然这只是fail的一种情况,DataBase Recovery要讨论的是,在各种fail的情况下,如何保证, 1. 已经commit的transaction的数据不丢失:2. 没有部分提交的情况,all or nothing 为了达成这个目的,需要在txn执行的过程中做一些actions保留当时状态,然后在failover后,再执行一系列actions去recover这些状态 F…
2PL是悲观锁,Pessimistic,这章讲乐观锁,Optimistic,单机的,非分布式的 Timestamp Ordering,以时间为序,这个是非常自然的想法,按每个transaction的时间来排谁先执行 这里会有几个问题,Timestamp是什么,由谁来打,什么时候打上Timestamp 首先每个T需要有一个unique的timestamp,这个在单机很容易实现:其次,Timestamp必须是单调递增的最后,不同的schema会选择在不同的时间给txn打上timestamp,可能是t…
并发控制是数据库理论里面最难的课题之一 并发控制首先了解一下事务,transaction 定义如下, 其实transaction关键是,要满足ACID属性, 左边的正式的定义,由于的intuitive的理解其中可能Consistency比较难理解一下,其他都比较直观,对于单机数据库而言consistency其实不是个显著的问题,但对于分布式数据库这就是个主要问题 那么问题就是如何设计让Transaction满足ACID? 一种简单的方法就是,Strawman System 串行执行保障consi…
查询优化应该是数据库领域最难的topic 当前查询优化,主要有两种思路, Rules-based,基于先验知识,用if-else把优化逻辑写死 Cost-based,试图去评估各个查询计划的cost,选取cost比较小的 一个sql query的处理流程, 先是Parser,生成抽象语法树ast,Binder会去做元数据对应,把parse出来的name对应到数据库中的结构,表,字段等 然后Rewriter就是Rules-based的改写,而Optimizer是cost-based的优化 Rela…
Query Model Query处理有三种方式, 首先是Iterator model,这是最基本的model,又称为volcano,pipeline模式 他是top-down的模式,通过next函数去逐层获取tuple 好处是比较简单,并且很容易做limit iterator的例子,输出一个数据,从top开始调用next,这里第二步需要join,建hashtable,需要把3的数据全部读取上来 第二种方式,materialization model 反其道,这是一种bottom-up的方式,每…
首先锁是用来做互斥的,解决并发执行时的数据不一致问题 如图会导致,不可重复读 如果这里用lock就可以解决,数据库里面有个LockManager来作为master,负责锁的记录和授权 数据库里面的基本的锁类型, 其实就是读锁,写锁 但是如果光是有读写锁,只能解决当个操作互斥和正确,无法解决transaction的正确 所以我们需要一个事务级别的锁,就是2PL,两阶段提交 最核心的想法,在growing阶段需要拿到所有需要的锁,否则就会block:shrinking阶段,不能去增加锁,只能释放锁…
MVCC是一种用空间来换取更高的并发度的技术 对同一个对象不去update,而且记录下每一次的不同版本的值 存在不会消失,新值并不能抹杀原先的存在 所以update操作并不是对世界的真实反映,这是一种便于应用的简化实现 MVCC的历史可以追溯到70年代,数据库的主流技术大部分都停滞在那个年代 MVCC,可以解决2PC的频繁读写冲突:使用MVCC只有写写才会存在冲突,大大降低了冲突的概率 而且MVCC还能进行time-travel 例子,DB中有Begin,End表示该version生效的时间周期…
正常应用和数据库交互的过程是这样的, 其实我们也可以把部分应用逻辑放到DB端去执行,来提升效率 User-defined Function Stored Procedures Triggers Change Notification User-defined Types Views UDF 用户定义的function,往往用于select中,不会修改数据本身 UDF可以用SQL实现,也可以用外部语言,右边是PG的例子 Stored Procedure 存储过程,可以理解成在数据库上执行一个脚本…
并发执行,主要为了增大吞吐,降低延迟,提高数据库的可用性 先区分一组概念,parallel和distributed的区别 总的来说,parallel是指在物理上很近的节点,比如本机的多个线程或进程,不用考虑通信代价distributed,要充分的考虑通信代价,failover的问题,更为复杂 Process Model 先解释一下概念, process model,指数据库系统架构设计,用于支持多用户的并发请求 worker,用于执行客户端tasks的DBMS组件 通常的process mode…
这章主要描述索引,即通过什么样的数据结构可以更加快速的查询到数据 介绍Hash Tables,B+tree,SkipList 以及索引的并行访问 Hash Tables hash tables可以实现O(1)的查询,设计主要考虑两点 首先用什么hash function?底下列出常用的hash function 然后怎么解决collisions?即hash schemes 首先是static hash schemes 第一个方法是Linear probe hashing 方法,如果发现冲突,就往…
Spark--DataFrames,RDD,DataSets 一.弹性数据集(RDD) 创建RDD 1.1RDD的宽依赖和窄依赖 二.DataFrames 三.DataSets 四.什么时候使用DataFrame或者Dataset? 五.广播变量与累加器 5.1 广播变量broadcast variable 5.1.1 广播变量的意义 5.1.2 广播变量图解 5.1.3 如何定义广播变量 5.1.4 如何还原一个广播变量 5.1.5 广播变量的使用 5.1.6 定义广播变量注意点 5.2 累加…
一,RECOVERY PENDING状态 今天修改了SQL Server的Service Account的密码,然后重启SQL Server的Service,发现有db处于Recovery Pending状态. Recovery Pending状态是指:数据库在还原(recovery)时遇到跟资源相关的错误,虽然数据库没有损坏,但是文件可能丢失,或者系统资源的限制,导致该数据库不能开始还原进程.数据库处于Recovery Pending 状态,表明还原进程被挂起,数据库不能开始数据库的数据和日志…
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    上篇博客我们学习了EF CodeFirst增删改查之'CRUD',今儿,我们来探讨下MVC下的EF 排序.查询.分页操作 在此,本人先从分页说起 话说,做过webForm项目的程序员用AspNetPage.DLL做过分页,做过EasyUI框架的程序员,用JS AJAX请求分页,那么,MVC 程序员用什么进行分页呢? 当然,MVC程序亦可以使用上述方…
在C++中,类与类之间的关系大概有四种,分别为继承,关联,聚合,和组合.其中继承我们大家应该都比较熟悉,因为是C++的三大特性继承Inheritance,封装Encapsulation,和多态Polymorphism之一. 继承Inheritance:是指一个类(子类)来继承另一个类(基类),并增加自己的功能,可以通过重写基类中的函数来实现.可以将继承理解成“IS A”的关系,比如A cat "IS A" animal, or A car "IS A" vehicl…
SQL 连接 JOIN 例解.(左连接,右连接,全连接,内连接,交叉连接,自连接) 最近公司在招人,同事问了几个自认为数据库可以的应聘者关于库连接的问题,回答不尽理想-现在在这写写关于它们的作用假设有如下表: 一个为投票主表,一个为投票者信息表-记录投票人IP及对应投票类型,左右连接实际说是我们联合查询的结果以哪个表为准-1:如右接连 right join 或 right outer join:我们以右边voter表为准,则左表(voteMaster)中的记录只有当其ID在右边(voter)中存…
 对于SQL的Join,在学习起来可能是比较乱的.我们知道,SQL的Join语法有很多inner的,有outer的,有left的,有时候,对于Select出来的结果集是什么样子有点不是很清楚.Coding Horror上有一篇文章,通过文氏图 Venn diagrams 解释了SQL的Join.我觉得清楚易懂,转过来.     假设我们有两张表.Table A 是左边的表.Table B 是右边的表.其各有四条记录,其中有两条记录name是相同的,如下所示:让我们看看不同JOIN的不同. Spa…
MySQL 使用profile分析慢sql,group left join效率高于子查询 http://blog.csdn.net/mchdba/article/details/54380221 -----------------…
(1)push 和 pop 这两个函数都是对数组从尾部进行压入或弹出操作.push(arg1,arg2,...)可以每次压入一个或多个元素,并返回更新后的数组长度.注意如果参数也是数组的话,则是将全部数组当做一个元素压入到原本的数组里面去.pop() 函数则每次只会弹出结尾的元素,并返回弹出的元素,若是是对空组数调用 pop() 则返回undefined. 示例: var oldArr=[1,2,3]; alert(oldArr.push(4,[5,6]))//这里只会将[5,6]当做一个元素来…
1斜杠反斜杠 斜杠:/.反斜杠:\. 反斜杠\,在windows系统中用来表示目录. 而在unix系统中,/表示目录.由于web遵循unix命名,所以在网址(URL)中,/表示目录. 在unix系统中,\表示跳脱字符将特殊字符变成一般字符(如enter,$,空格等).   2python中去掉字符串中的\xa0.\t.\n(转) \xa0 是不间断空白符   我们通常所用的空格是 \x20 ,是在标准ASCII可见字符 0x20~0x7e 范围内. 而 \xa0 属于 latin1 (ISO/I…
#可变变量:list, 字典#不可变变量:元祖,字符串字符串的操作(去掉空格, 切片, 查找, 连接, 分割, 转换首字母大写, 转换字母大小写, 判断是否是数字字母, 成员运算符(in / not in))字符串使用时用单引号或者双引号括起来: var1 = 'hello' var2 ="world" 字符串不能修改值, 如下例所示: 以下是字符串常用的一些操作. 1. 去掉空格str.strip() # 去掉两边的空格和换行符str.strip('a') # 去掉两边指定的字符st…
sleep() sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级 的线程得到执行的机会,也可以让低优先级的线程得到执行机会.但是sleep()方法不会释放“锁标志”,也就是说如果有synchronized同步 块,其他线程仍然不能访问共享数据. wait() wait()方法需要和notify()及notifyAll()两个方法一起介绍,这三个方法用于协调多个线程对共享数据的存取,所以必须在 synchr…
“,”:代表笛卡尔积: “natural join”:代表自然连接,即同名列等值连接: “natural left outer join”:表示左外连接: “natural right outer join”:表示右外连接. 注意:以下的写法在Oracle中都是不正确的. 1.r1 join r2 2.r1 inner join r2 3.r1 left outer join r2(如果要用左外连接,需要加natural关键字或者后面加on做条件筛选,否则,语法错误) 4.r1 right ou…
Not IN问题 Exists,not Exists,in,not in 例如: FROM YSHB B WHERE YSHA.code=b.code ) 等同于 DELETE A FROM YSHA A LEFT JOIN YSHB B ON A.code=b.code WHERE b.code is NULL…
一.背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象.进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其他所有内容都是围绕进程的概念展开的. PS:即使可以利用的cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力.将一个单独的cpu变成多个虚拟的cpu(多道技术:时间多路复用和空间多路复用+硬件上支持隔离),没有进程的抽象,现代计算机将不复存在. 必备理论 #一 操作系统的作用: 1:隐藏…
用CSS画小猪佩奇,你就是下一个社会人!   欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:江志耿 | 腾讯TEG网络工程师 我是佩奇,哼,这是我的弟弟乔治,呱呱,这是我的妈妈,嚯,这是我的爸爸,嚯~ 背景 小猪佩奇已经火了好一阵了,其实一开始我是不屑的.纵观小朋友的历届动画,无论喜洋洋.熊出没还是小兔兵兵.小熊维尼,火过一阵便迅速陨落,回想起来也没多少沉淀的东西.所以一开始让我看小猪佩奇的时候我是拒绝的,因为你不能让我看,我就马上去看,第一我要试一下.深入了解之后发现,卧槽…
Oracle Database 安装,卸载,系统服务,系统组件及系统表空间 Oracle Database 安装 Oracle Database 卸载 Oracle Database 系统服务 OracleServiceORCL 数据库服务,这个服务会自动地启动和停止数据库.ORCL是Oracle例程标识.此服务被默认设置为自动启动. OracleDBConsoleorcl Oracle数据库控制台服务,orcl是Oracle例程标识,默认的例程为orcl.在运行Enterprise Manag…
Oracle Database 数据表数据插入,更新,删除 插入数据 Insert into table_name(column) values(values); insert into student values ('20166660101','金美辛','女',21,'影视传媒学院','13588000066','北京市'); 默认值 default 在建表时复制 Create table table_new as select column1,…|*from table_old 已存在表…