Category: Database

0

关系型数据库进阶之数据管理

我们在前面已经介绍了客户端管理,查询管理,今天来介绍数据管理。 在这一步中,查询管理会执行相应的查询,这个时候就需要从表和index中得到数据了。它需要数据管理来获取数据,不过这里有两个问题: 关系型数据库使用的是transaction的模式,所以你不能够在任何时候都得到数据,因为同时可能有别人在使用或者修改数据。 数据的获取是数据库中所有操作最慢的操作,所以数据管理需要足够聪明,来把数据保存在内存buffer中。 本文我们就会来讨论关系型数据库是如何处理这两个问题的。...

0

关系型数据库进阶之查询优化二

在前面的文章中我们介绍了查询优化的基础,着重介绍的两个表的JOIN的优化。本文就来看看我们在实际中更常见到的多表JOIN的优化。 现在我们来假设有五个表进行join,我们需要从不同的表中得到一个人的不同信息,比如地址,mail,mobiles等等,简单的QUERY如下所示: 作为查询优化器需要找到最佳的查询数据的方法,这里有两个问题: 每一个join需要使用什么类型的JOIN?我们有三种可能的JOIN (Hash...

0

关系型数据库进阶之查询优化

在前面几篇文章中,我们已经介绍了总体构架,客户端管理和查询管理。在查询管理中,有一个很重要的部分我们没有介绍,那就是查询优化,这也是本文所要介绍的内容。 所有的现代数据库都是基于cost进行优化的(Cost Based Optimization, CBO)。总体的思想就是看每一个操作的cost是多少,然后找出一个cost最小的路径来执行这些操作并获取结果。...

0

关系型数据库进阶之查询管理

在前面几篇文章中,我们已经介绍了总体架构以及客户端管理,今天我们来继续介绍查询管理。 毫无疑问,查询管理是数据库的核心中的核心,也是最重要最难的地方。这个部分,哪怕是写的不好的query也会被转换成尽量快的方式来进行执行,在执行之后会把结果再返回给客户端管理。主要有以下几个步骤: 解析query,看是否有效 重写相应的query,去除一些没有必要的操作,主要是做预优化 优化相应的查询,主要是提高性能,转化成高效的执行计划和数据访问计划...

0

关系型数据库进阶之客户端管理

在上一篇文章中我们介绍了数据库的总体架构,今天我们将和大家来一起分析一下其核心组件中的重要组成部分:客户端管理。 客户端管理,顾名思义它是用来处理和客户端之间的信息交互的。客户端可以是一个web的server或者一个终端的用户/应用。客户端可以通过各种不同的方式来访问数据库,比如JDBC, ODBC, OLE-DB等等。 当连接数据库的时候,会执行下面这些步骤:...

0

关系型数据库进阶之总体架构

一提到关系型数据库,我们可以看到它被在各个地方使用。有很多不同的关系型数据库,从最小的SQLite到复杂的Teradata。有很多文章在介绍如何使用数据库,但是很少有文章去深入地介绍它是如何工作的。假如你搜索“关系型数据库是如何工作的”这样的关键词,你会发现深入介绍的文章并不多。有时候,我们不禁会问,关系型数据库是不是太旧了,以至于都没有什么人来深入分析其中的内容? 作为一个开发者,我们需要有一点好奇心去深入看看我们每天使用的数据库内部是怎么样,假如你一直没有时间或者机会去深入了解其中的原理,那么本文将会是你的一个很好的选择。本文之所以称之为“进阶”是因为我们不会介绍如何去使用一些Query,而是假设你已经有了这些基础的知识,我们更注重其中的机理讲解。 一个数据库其实是信息的集合,而这个集合是可以很方便地访问和修改的。假如往简单的方面来想,那么它就是一系列的文件。事实上,最简单的数据库,比如SQLite其实就是一堆文件。当然SQLite又不是简简单单的一堆文件,因为它允许你: 使用transaction来保证数据的安全和连贯 能够很快的处理数据,哪怕是很大的百万量级的数据...

0

如何在SQL中得到两个表的不同行

有时候,我们需要比较两个表的差异,希望能够返回两个表不同的行,那怎么才能有效快速地得到这个结果,本文就来做一个简单的介绍: 表格准备 我们来假设有下面两个表(PostgreSQL 语法): 使用UNION...

0

MongoDB和Couchbase analytics(解析)的对比分析

计算的目的是背后的洞察而不是数据本身 — Richard Hamming 所谓的商业运行就是一个分析哪些需要改变,该改变成什么然后据此改变商业本身的螺旋上升的过程。作正确的分析,你就如滚雪球般不停上升,反之,则不断的螺旋下降。...