Claus's Tech Blog

leave me alone i know what to do


  • 首页

  • 分类

  • 归档

  • 标签

  • 搜索

拉链表的应用

发表于 2018-04-13 | 更新于 2018-04-13 | 阅读次数
| 字数统计 1,424 字

数据仓库和事务数据库不一样的地方,在于数据仓库需要对历史数据进行分析。而在数据仓库海量的数据里,如何既节约存储空间,又能满足对历史变更数据的查询,就成为一个要解决的问题。这时候就可以使用拉链表来完成这种需求。

什么是拉链表

以订单这种场景为例,原始订单表orders有如下几个字段:订单ID、创建时间、修改时间、订单状态

4月1号当天的订单

orderid createtime modifiedtime status
1 2018-04-01 2018-04-01 create
2 2018-04-01 2018-04-01 create
3 2018-04-01 2018-04-01 create

4月2号当天的订单表数据

orderid createtime modifiedtime status
1 2018-04-01 2018-04-02 paid
2 2018-04-01 2018-04-02 finish-closed
3 2018-04-01 2018-04-02 paid
4 2018-04-02 2018-04-02 create

这一天,订单1、3由create变成paid状态,订单2由create变为paid,然后变为finish状态(假设现在只关心订单的最新状态),订单4为新订单。

这时候,在数据仓库中,可以设计一张表来保存每天的订单变化情况。增加两个字段:dw_start_date和dw_end_date,dw_start_date表示该条记录的生命周期开始时间,dw_end_date表示该条记录的生命周期结束时间。现在表就变成了下面这个样子:

orderid createtime modifiedtime status dw_start_date dw_end_date
1 2018-04-01 2018-04-01 create 2018-04-01 2018-04-01
1 2018-04-01 2018-04-02 paid 2018-04-02 9999-12-31
2 2018-04-01 2018-04-01 create 2018-04-01 2018-04-01
2 2018-04-01 2018-04-02 finish-closed 2018-04-02 9999-12-31
3 2018-04-01 2018-04-01 create 2018-04-01 2018-04-01
3 2018-04-01 2018-04-02 paid 2018-04-02 9999-12-31
4 2018-04-02 2018-04-02 create 2018-04-02 9999-12-31

这个表就叫拉链表 orders_his

阅读全文 »

Homebrew 管理后台服务

发表于 2018-04-11 | 更新于 2018-04-11 | 分类于 备忘 | 阅读次数
| 字数统计 508 字

在MacOS上,Homebrew是一个特别好的软件包管理的工具。以前只是拿来安装软件,偶然一次Mac重启了,好多后台服务就停了,这时候想起来Homebrew还能管理它所安装的软件的后台服务。下面内容转自Starting and Stopping Background Services with Homebrew 作为备忘。

阅读全文 »

MapReduce 实现倒排索引

发表于 2018-04-08 | 更新于 2018-04-09 | 分类于 Big Data , Hadoop | 阅读次数
| 字数统计 743 字

概念

倒排索引是一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射,常被应用于搜索引擎和关键字查询的问题中。

以英文为例,下面是要被索引的文本:

1
2
3
T0 = "it is what it is"  
T1 = "what is it"
T2 = "it is a banana"

有两种不同的反向索引形式:

  • 一条记录的水平反向索引(或者反向档案索引)包含每个引用单词的文档的列表。
  • 一个单词的水平反向索引(或者完全反向索引)又包含每个单词在一个文档中的位置

我们就能得到下面的反向文件索引:

1
2
3
4
5
"a":      {2}
"banana": {2}
"is": {0, 1, 2}
"it": {0, 1, 2}
"what": {0, 1}

检索的条件”what”,”is”和”it”将对应集合的交集。检索的条件”what”, “is” 和 “it” 将对应这个集合: ${\displaystyle {0,1}\cap {0,1,2}\cap {0,1,2}={0,1}}$。

下面得到的是第二种倒排索引,包含有文档数量和单词结果在文档中的位置组成的的成对数据。

1
2
3
4
5
"a":      {(2, 2)}
"banana": {(2, 3)}
"is": {(0, 1), (0, 4), (1, 1), (2, 1)}
"it": {(0, 0), (0, 3), (1, 2), (2, 0)}
"what": {(0, 2), (1, 0)}
阅读全文 »

MapReduce原理

发表于 2018-04-04 | 更新于 2018-04-09 | 分类于 Big Data , Hadoop | 阅读次数
| 字数统计 2,105 字

MapReduce Paper

MapReduce是Google提出的一个软件架构,用于大规模数据集(大于1TB)的并行运算。MapReduce最本质的两个过程就是Map和Reduce,思想来源于函数式编程。

初学MapReduce,写了WordCount入门程序后,觉得编写MapReduce程序只需要实现Map和Reduce函数就可以了,后来觉得,这个框架隐藏的细节还是需要好好了解一下的。下面这个图基本描述了MapReduce的整个过程:

MapReduce pipeline

其中,Map阶段、Reduce阶段比较好理解,但是Shuffle阶段的这个细节还是很神奇的。下面简单介绍下MapReduce各个阶段。

阅读全文 »

Flask 从入门到放弃6: 网站结构最佳实践

发表于 2017-08-28 | 更新于 2018-04-04 | 分类于 Flask从入门到放弃 | 阅读次数
| 字数统计 1,089 字

来自狗书第七章:大型程序的结构

Flask Web Development

项目结构

下图显示多文件的Flask程序的基本结构

FlaskProjectTree

阅读全文 »
1…345…15
Shuo Lv

Shuo Lv

72 日志
15 分类
50 标签
GitHub Weibo 知乎 LinkedIn Facebook
友情链接
  • 公式编辑器
  • 可视化Python代码
  • Python最佳实践
© 2015 - 2018 Shuo Lv
由 Hexo 强力驱动
主题 - NexT.Pisces