图书 •
828 引用 •
203 回帖 •
3 关注
博客
关注
-
[链接] [链接]8.2 时间段预汇总 对于时间段上的统计,使用一些技巧后就可以利用预汇总数据了。 假如原始数据表是按日存储的数据,那么我们可以按月做好预预汇总数据,当需要针对一个时间段统计时 ..
-
[链接] [链接]8.1 部分预汇总 多维分析后台的运算本质上就是个分组汇总,前面讲过的分组方法都可以利用。但当数据量非常大的时候,想做到即时响应也不是很容易的事。 预汇总是个容易想到的方法, ..
-
[链接] [链接]7.4 附表 某个事实表可能随意和多个维表建立外键关联,甚至和同一个维表建立多个外键关联,但基于双方主键建立的同维关联和主子关联就没有这么随意。 同维关联是一种等价关系(A ..
-
[链接] [链接]7.3 关联定位 前两节讨论的都是全表遍历。现实的任务中常常会还会关联表做条件过滤,当然我们可以在关联之后再做过滤,但这样会将所有关联表都遍历一次,表很大时就会耗时很多。有时 ..
-
[链接] [链接]7.2 分段归并 面向大数据的有序归并算法有个不太方便的地方,数据要一条条从两个(或更多)游标中读出后比对,这种逻辑下无法直接实现分段并行。因为无法保证两个表的关联键值是在对 ..
-
[链接] [链接]7.1 有序归并 我们已经多次提到过有序归并,比如第二章中讲有序组表的追加时就用到这个算法,它可以用于实现大集合的交并差运算。以并集为例写出来的算法逻辑大体如下: A B C ..
-
[链接] [链接]6.9 单边分堆 我们最后来处理维表和事实表都很大的情况,通常事实表会更大。这种情况无论如何都很难高速计算出来,但仍然要想办法尽量做得快。 是否可以把事实表用游标读出来,分批 ..
-
[链接] [链接]6.8 大维表查找 遍历事实表时用外键查找维表记录,每次只取一条记录;而事实表通常不会按外键字段有序(事实表可能有多个外键,对某一个外键有序就不会对另一个有序,大部分情况是对 ..
-
[链接] [链接]6.7 对位序列 对于已经序号化的外键,我们还可以使用对位序列来处理维表上的过滤。 A 1 =file('product.btx').import@b() 2 =file(' ..
-
[链接] [链接]6.6 索引复用 有时候维表会被先过滤再做关联。比如我们只关心某个产地的产品: A 1 =file('product.btx').import@b().keys@i(id) ..
-
[链接] [链接]6.5 内连接语法 我们知道,事实表的外键不一定总有对应的维表记录,有可能存在无效值。一种很常见的动作是:如果发现外键没有对应的维表记录,则删除这条事实表记录;如果有,则做地 ..
-
[链接] [链接]6.3 外键序号化 从事实表的外键关联维表,本质上是一个查找动作。在事实表较大时无法做到预关联了,如果有办法能提高查找速度那也可以获得好的关联性能。 维表上通常已经建立有哈希 ..
-
[链接] [链接]6.2 临时地址化 地址是个内存概念,外键地址化只能在全内存时实施,但大数据常常需要外存计算。 我们先来考虑事实表大而维表仍然较小的情况,这也是现实中比较常见的情况。事实表用 ..
-
[链接] [链接]6.1 外键地址化 我们简单回顾一下外键关联的概念:数据表 T 中字段 F 和数据表 D 的主键 K 关联时,D 称为 T 的外键表,又称维表,T 称为事实表,字段 F 称为 ..
-
[链接] [链接]5.8 索引排序 我们知道索引的本质就是排序,如果我们想把数据表按被查找键排序,是不是可以利用已经建好的索引呢? 很遗憾,大部分情况没有效果。 如果原始数据表并没有按被查找键 ..
-
[链接] [链接]5.7 序号分组与可控分段 SPL 有个内存的序号分组汇总函数 groups@n,对于外存游标也有同样的函数。 如果能够把分组键值简单地计算成序号,那么分组时就不必再计算哈希 ..
-
[链接] [链接]5.6 后半序分组 我们处理了“前半有序”的情况,那么“后半有序”是不是也会可利用的地方? 还是这个帐户交易表,在每个帐户下的数据是按日期排序的,现在我们想统计所有日期下的交 ..
-
[链接] [链接]5.5 前半序分组 还是以帐户、日期的帐户交易表,现在我们想把它换一种次序,将帐户内的交易记录改成按发生日的星期几排序,即把所有周日的交易都排到一起、然后再排周一的、周二、… ..
-
[链接] [链接]5.4 程序游标 继续帐户交易表,现在我们希望找出每月内连续 n 天都有交易的那些交易记录,然后按发生日期的星期几统计交易额度。 后半任务很简单,就是个普通的分组汇总。但找出 ..
-
[链接] [链接]5.3 有序分组子集 数据表对分组键有序时,可以依次将分组子集用游标方式读出,利用这一点,我们可以做一些复杂的运算。 比如一年的帐户交易表,我们想统计有多少帐户在连续 n 天 ..
-
[链接] [链接]5.1 有序分组汇总 如果数据表对分组键有序,可以实施有序分组算法。 有序分组的过程很简单,遍历时只要将当前记录和最后一个分组子集对比键值,如果相同,则将这条记录继续分到这个 ..
-
[链接] [链接]4.8 冗余分组键 有时为了方便处理,数据表中会有些冗余的字段。比如订单表里可能有客户编号同时也有客户名称,而客户名称完全可以由客户编号确定,客户名称就是冗余的信息。这种数据 ..
-
[链接] [链接]4.7 聚合理解 考虑这样一个问题:从 1 亿个订单的金额中找出最大的 10 个。 简单的想法,是把这 1 亿条记录按金额从大到小排序,然后取出前 10 条记录的金额字段,剩 ..
-
[链接] [链接]4.6 分组汇总 分组是一种常见的遍历型运算,它需要读出并计算所有参与分组的记录。对这类需要全集参与的运算,索引几乎没有意义(极个别的场景有用,我们在下一章会讲到)。有些程序 ..
-
[链接] [链接]4.5 多路游标 使用 fork 可以灵活地实现并行计算,但代码仍然略显繁琐,特别是对于很常见的单数据表的统计,而且还要注意再次汇总线程返回结果时可能要改变函数(从 coun ..