公共模块 1. 使用基于上下文的内存分配器进行内存分配 除了教材里常提到的buffer pool,数据库还会为其他任务分配大量内存,例如,Selinger-style查询优化需要动态的规划查询:hashjoin和排序需要分配大量私有空间.正确管理内存给编程和性能带来挑战,商业数据库系统一般使用context-based基于上下文的内存分配器. context上下文是指一个包含了连续虚拟内存区域链表的内存数据结构:每个region区域包含一个头信息,头信息通过标签或指针指向上下文头信息. Cont…
<Anatomy of a Database System>这篇发表于87年.一共48页的论文据说是DBA入门必看,但是找了全网没有找到中文翻译.这篇文章对关系型数据库确实有提纲挈领的作用,看完能带来融会贯通的感觉,值得抄写一遍,如有任何抄写不当的地方请诸位看官留言. 1. 文章结构   文章把数据库划分为4块,chap2.4.5.6都对应上图每一块:chap3浅显的讲了磁盘存储的设计.     2. Process Manager 这一章讲数据库的并发模型,稍微翻下chap2的图片就能明白,…
查询解析 解析会生成一个查询的内部展示.格式检查包含在解析过程中. 每次解析一个SELECT,步骤如下:1. 从FROM里找到表名,转换成schema.tablename.这一步需要调用目录管理器catalog manager检查表是否在系统目录里,并将表的内部查询结构这类元数据缓存起来.2. 根据上一步缓存起来的信息,校验属性引用.在这一步中,属性类型用来确定函数.比较运算.常量表达式,举例说明,(EMP.salary * 1,15)<7500 这里乘法和比较符号对应的1.15和7500默认是…
这一章看起来是讲存储引擎的.作者抱怨数据库被黑为“monolithic”.不可拆分为可复用的组件:但是实际上除了事务存储引擎管理模块,其他模块入解析器.重写引擎.优化器.执行器.访问方式都是代码相对独立的,他们提供窄接口(宽接口功能强大如Socket,窄接口单一职责入TcpListener)给其他模块调用.存储引擎一般有以下四个深深纠缠的组件:1. A lock manager,并发控制2. A log manager,恢复3. A buffer pool,数据库I/O分段处理4. Access…
使用裸设备,还是使用文件系统?   描述 pros cons 裸设备 顺序读磁盘快比随机要快10-100倍,DB比OS更懂磁盘负载,因此很多DB是直接管理数据块如何存放的. DB对裸设备的管理,比文件系统成熟得早,加上性能高,以及可忽略文件系统之间的差异,写裸设备也是推荐的. 要求DBA给DB划分整个磁盘: 同时裸设备接口随OS不同而不同,因此阻碍了商业化DB使用此方式: 最后裸设备不支持raid.san.nas.随着时间迁移,裸设备的优势已经不明显了. 文件系统 创建一个大文件,通过文件偏移量…
这篇是看wklken的<Python进阶-Itertools模块小结> 学习itertools模块的学习笔记 在看itertools中各函数的源代码时,刚开始还比较轻松,但后面看起来就比较费劲... 1.itertools.count(start=0,step=1) 此函数用来创建一个迭代器,生成从n开始的连续整数,如果忽略n,则从0开始计算 如果超出了sys.maxint,计数器将溢出并继续行-sys.maxint-1开始计算 定义: def count(start=0, step=1):…
一.模块 1.模块的概念 模块这一概念很大程度上是为了解决代码的可重用性而出现的,其实这一概念并没有多复杂,简单来说不过是一个后缀为 .py 的 Python 文件而已 例如,我在某个工作中经常需要打印一段很长的内容,很自然地,我会想到将它实现为一个函数,等到需要的时候直接调用即可,而无需重新再输入这一段内容.现在,假如这样的工作不仅仅是我一个人在做,比如现在有成千上万的人需要在他们的工作打印同样的内容,那么也很自然地,我会将这份代码储存成一个文件发给需要的人.这样就产生了模块的概念,我的这一份…
logging模块,Python自带用来记录日志的模块. 因为工作需要用到关于日志的,最近一直都在看关于日志模块的东西,百度了很多文章,可惜都是看的让人一头雾水,最后运气不错,找到一篇很详细的文章.传送门:https://www.cnblogs.com/testdjt/p/7834856.html logging模块默认定义了以下几个日志等级 日志等级 (level) 描述 DEBUG 最详细的日志信息,典型应用场景是 问题诊断 INFO 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用…
模块学习 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),n个 .py 文件组成的代码集合就称为模块. 模块分为三种: 自定义模块 内置标准模块(又称标准库) 开源模块 自定义模块: #hello.py def hello(): print("hello world") if __name__…
模块 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), 本质就是.py结尾的python文件(文件名:test.py,对应模块名:test) 包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py的文件) 二.导入方法 import module_alex, 调用:print(module_alex.name) module_alex.say_hello() 导入多个模块:import module1_name,import m…