数据库杂谈

MySQL InnoDB事务

事务 事务是数据库操作中的一个重要概念,它可以将一系列数据库操作作为一个不可分割的工作单元,并保证这些操作要么全部执行成功,要么全部失败回滚。事务具有ACID属性,是保证数据一致性和可靠性的重要手段。 事务的ACID属性 原子性:Atomicity,整个数据库事务是不可分割的工作单位 一致性:Consistency,事务将数据库从一种状态转变为下一种一致的状态 隔离性:Iso...

PostgreSQL虚拟文件描述符(VFD)

PostgreSQL虚拟文件描述符(VFD) 在操作系统中,每当一个进程打开一个文件,系统就会为该文件分配一个唯一的文件描述符,在Linux系统中是一个int类型的值。每个操作系统都会对一个进程能打开的文件数加以限制,用ulimit -n命令可以查看进程能打开的最大文件数。对于一个数据库系统,系统元数据和用户数据都可能保存在许多不同文件当中,而且常常会对大表进行排序、hash join等操...

PostgreSQL文本搜索(六)——词典

PostgreSQL文本搜索(六)——词典 词典用于消除在搜索中不应考虑的词(停顿词),并使词规范化,以便同一词的不同派生形式能够匹配。一个成功规范化的词被称为lexeme(词位、词素)。除了提高搜索质量之外,规范化和删除停顿词可以减少文档的tsvector的大小,从而提高性能。规范化并不总是具有语言学意义,通常取决于实际应用决定的语义。 一些规范化的例子: 语言学–Ispell...

PostgreSQL文本搜索(七)——自定义配置

PostgreSQL文本搜索(七)——自定义配置 文本搜索配置指定了将文档转化为tsvector所需的所有选项:使用词法分析器将文本分解为token,以及使用词典将每个token转化为lexeme。每一次对to_tsvector或to_tsquery的调用都需要一个文本搜索配置来执行其处理。配置参数default_text_search_config指定了默认配置的名称,如果省略了一个明确...

PostgreSQL文本搜索(五)——词法分析器

PostgreSQL文本搜索(五)——词法分析器 文本搜索词法分析器负责将原始文档文本分割成token,并确定每个token的类型,其中可能的类型集合由词法分析器本身定义。注意分析器根本不修改文本,它只是识别合理的词的边界。由于这种有限的范围,对特定应用的自定义分析器的需求比对自定义字典的需求要少。目前PostgreSQL只提供了一个内置的分析器,它已经被发现对广泛的应用很有用。 内置的...

PostgreSQL文本搜索(一)——简介

PostgreSQL文本搜索(一)——简介 文本搜索对于数据库系统来说是一个十分重要的功能,它可以在数据库文本文档(包括表中的text字段等)中搜索一个模式,可以是一个或多个单词、短语、短句,并且可以按照相关度排序。最常见的文本搜索是找到所有包含给定查询项的文本文档,然后按照与查询项的相似度排序并返回。查询项和相似度的定义都非常灵活,取决于具体的应用。这个最简单的搜索将查询看作一组单词,将...

PostgreSQL空闲空间映射表(FSM)

PostgreSQL空闲空间映射表(FSM) 随着数据表中不断插入和删除元组,页内必然会产生空闲空间。当我们需要插入新的元组时,需要优先将元组放到已有页内的空闲空间内,以节约存储空间。如果每次都用新的页来存放新元祖,显然会造成空间利用率的浪费。但我们怎么知道哪个页中有空闲空间、空闲空间的大小是否足够存放新的元组呢?如果没有其他任何技术,则需要遍历页、直到找到足够的空闲空间用于插入新元组,这...

PostgreSQL内存上下文

PostgreSQL内存上下文 不管是什么样的数据库系统,存储管理的本质都是一样的:如何减少I/O次数。内存的访问速度至少是磁盘的数十万倍,所以通常读写磁盘所用的时间决定了数据库操作的总时间,而内存的访问时间可以忽略不计。因此,要尽可能的提高I/O命中率,让最可能被使用的文件块停留在内存中。除此之外,内存管理还是整个数据库系统的桥梁,每一个模块都会使用到内存进行函数运行、缓冲、消息传递等,...