数据蒋堂 •
174 引用 •
106 回帖 •
568 关注
博客
关注
-
我们研究过分组运算的实质,即将一个集合按某种规则拆分成若干子集。不过,讨论重点在于还原分组运算的步骤,并没有讨论拆分规则,例子中都是用某些分组键值来定义拆分规则,也就是 SQL 中使用的方法。 ..
-
我们知道内存比硬盘要快得多,大概能快出一两个数量级(当然价钱也贵得多)。不过,硬盘的问题并不只是速度慢。 硬盘的一个基本特征是不适合做频繁小量读取。所谓频繁小量读取,就每次读取的数据量很小,但 ..
-
分组是数据库中的常见运算,但未必所有人都能深刻地理解它。 分组运算的实质是将一个集合按照某种规则拆分成若干个子集,也就是说,返回值应当是一个由集合构成的集合,但人们一般并不太关心构成这个集合的 ..
-
我们继续讨论集合运算中的 Lamba 语法,引入和次序相关的运算能力。 SQL 延用了数学上的无序集合概念,遍历集合时也不关注次序。但计算机只能一步步地执行,循环时总会有个次序,充分利用这个次 ..
-
有过多年应用开发经验的同学大都会体验过数据库 IO 比较慢的情况,但到底会慢到什么程度,特别是和其它读写数据的手段相比的差距,可能很多人还没有感性认识。 Java 是普遍采用的应用开发技术,我 ..
-
列存是常见的数据存储技术,说到列存常常就意味着高性能,现代分析型数据库基本都会把列存作为标配, 列存的基本原理是减少硬盘的读取量。一个数据表有多个列,但运算可能只会用到其中少数几列,采用列存时 ..
-
其实没多少! 从早期喊的多维分析到近年来喊敏捷 BI,BI 厂商一直在强调自助能力,宣称可以由业务人员自己随心所欲地分析数据,而用户也常常有强烈的需求,双方一拍即合,很容易形成购买行为。 不过 ..
-
拥有集合化特性的程序语言能让我们用很少的语句写出针对集合的复杂运算,其中处于核心地位的是 Lambda 语法设计得是否方便,直接决定了程序语言的描述效率。 我们来从简单到复杂考查集合运算的可能 ..
-
我们知道,SQL 延用了数学上的无序集合概念,所以 SQL 的分组并不关注待分组集合中成员的次序。我们前面讨论等值分组和非等值分组的时候,也都没有关注过这个问题,分组规则都是建立在成员取值本身 ..
-
减少外存(硬盘)访问量一直是提高大数据计算性能的永恒话题,我们也讨论过列存、压缩等直接减少访问量甚至存储量的手段。除了这些存储层面的方法外,在算法和计算实现环节,也可以想办法减少外存的访问量。 ..
-
我们讨论过的常规聚合运算如 SUM/COUNT 和非常规聚合运算如 maxp/top,都是事先设计好的聚合函数。但如果我们想实现一个以前没有定义过的运算怎么办?比如想做连乘运算,显然这也算是一 ..
-
OLAP 这个词从字面上理解是在线分析的意思,也就是由人员面对数据进行各种交互式的分析操作。 但是,现在的OLAP 概念被 BI 软件给严重狭义化了。面向业务分析时说到 OLAP,在技术上经常 ..
-
我们在讨论有序分组时只研究了待分组集合的成员次序对分组运算可能的影响,但既然要考虑集合的有序性,那么结果集也是个集合,它的成员次序是不是也有业务意义呢? 确实有意义,不过重要程度不如原集的次序 ..
-
事物是普遍联系的,很多有业务意义的查询也会涉及多个数据表的关联。 BI 类软件通常会提供自助查询功能,有些软件还能支持关联查询,但实际使用的大多数还是单表的,关联查询功能很少被业务人员使用。涉 ..
-
索引是经常用到的技术,但有些程序员对索引的原理了解不深,发现数据查询性能有问题立刻想起建索引,当然经常也没啥效果,反而消耗资源。那么到底什么时候该用索引以及该怎么用?我们来分析索引清理背后的技 ..
-
过滤是个很基本的运算,就是从一个集合中找出满足某些条件的成员构成的子集。SQL 中有 WHERE 和 HAVING 来实现过滤运算(严格地说,困为 SQL 缺乏离散性,WHERE 的运算结果是 ..
-
碰到过这么一个案例,情况可以简化总结成这样:数据库中有表 T,其中有两个重要的字段 a 和 b,a 是一个时间戳,精确到秒;b 是用户号;其它字段用来表示用户 b 在时刻 a 发生的事件属性。 ..
-
某机构上了一套分布式数据仓库,历史数据逐步装进了仓库,然后,基于数据仓库构建了 BI 系统(主要是多维分析)。刚开始,一切都顺利,但随着时间推移,基于中央数据仓库的应用越来越多,几年下来积累了 ..
-
七、进一步的外键关联 我们继续讨论外键 JOIN,并延用上一篇的例子。 当数据量大到无法全部放进内存时,前述的地址化方法就不再有效了,因为在外存无法保存事先算好的地址。 一般来讲,外键指向的维 ..
-
五. 解决关联查询 我们重新审视和定义了等值 JOIN 运算,并简化了语法。一个直接的效果显然是让语句书写和理解更容易。外键属性化、同维表等同化和子表集合化方案直接消除了 JOIN 关键字,也 ..
-
三. JOIN 的语法简化 我们先看如何利用关联都涉及主键这个特征来简化 JOIN 的代码书写,分别讨论这三种情况。 1. 外键属性化 先看个例子,设有如下两个表: employee 员工表 ..
-
我们再来研究如何利用 JOIN 的特征实现性能优化,这些内容的细节较多,我们挑一些易于理解的情况来举例,更完善的连接提速算法可以参考乾学院上的《性能优化》图书及课程。 六、外键预关联 先看全内 ..
-
四. 维度对齐 我们再回顾前面的双子表例子的 SQL: SELECT Orders.id, Orders.customer, A.x, B.y FROM Orders LEFT JOIN (S ..
-
八、有序归并 我们再来看同维表和主子表的 JOIN,这两种情况的优化提速手段是类似的。 我们前面讨论过,HASH JOIN 算法的计算复杂度(即关联键的比较次数)是 sum(ni*mi),比全 ..