Column-Stores vs. Row-Stores

论文标题:Column-Stores vs. Row-Stores: How Different Are They Really?

论文: http://www.cs.umd.edu/~abadi/papers/abadi-sigmod08.pdf

概述

从论文的标题可以看出这篇论文不是陈述一种新的技术、架构,而更偏议论文一点,它主要的目的在于搞清楚对于分析类的查询为什么Column-Store比Row-Store好那么多?好在哪里?

一般认为原因是:

分析类查询往往只查询一个表里面很少的几个字段,Column-Store只需要从磁盘读取用户查询的Column,而Row-Store读取每一条记录的时候你会把所有Column的数据读出来,在IO上Column-Store比Row-Store效率高很多,因此性能更好。

而本文的目的是要告诉你Column-Store在存储格式优势只是一方面,如果没有查询引擎上其它几个优化措施的配合,性能也不会太好的,这篇论文认为Column-Store在查询引擎层有以下几种大的优化手段:

  • 块遍历(Block Iteration)
  • 压缩(Compression)
  • 延迟物化(Late Materialization)
  • Invisible Join

其中前三点是前人就已经总结过的、在现有Column-Store上实现过了的,而最后一点是本论文的创新。下面我们一一看一下这几种优化手段的细节,最后再看看它们优化效果的对比。


什么是列式存储

什么是列式存储

在传统的行式数据库系统中,数据按如下顺序存储:

Row WatchID JavaEnable Title GoodEvent EventTime
#0 89354350662 1 Investor Relations 1 2016-05-18 05:19:20
#1 90329509958 0 Contact us 1 2016-05-18 08:10:20
#2 89953706054 1 Mission 1 2016-05-18 07:38:00
#N

处于同一行中的数据总是被物理的存储在一起。

常见的行式数据库系统有:MySQLPostgresMS SQL Server

在列式数据库系统中,数据按如下的顺序存储:

Row: #0 #1 #2 #N
WatchID: 89354350662 90329509958 89953706054
JavaEnable: 1 0 1
Title: Investor Relations Contact us Mission
GoodEvent: 1 1 1
EventTime: 2016-05-18 05:19:20 2016-05-18 08:10:20 2016-05-18 07:38:00

这些示例只显示了数据的排列顺序。来自不同列的值被单独存储,来自同一列的数据被存储在一起。


Apache Kudu简介及 JavaAPI示例

Apache Kudu 简介

Kudu是Cloudera开源的新型列式存储系统,是Apache Hadoop生态圈的新成员之一(incubating),专门为了对快速变化的数据进行快速的分析

特性:

  • OLAP
  • 对数据扫描(scan)和随机访问(random access)同时具有高性能,简化用户复杂的混合架构
  • 支持单条或批量的数据读写,支持schema的创建修改
  • 既可以当作简单的key-value 使用,也可以作为复杂的几百不同的强类型属性。

常见的几个应用场景:

  1. 实时更新的应用。刚刚到达的数据就马上要被终端用户使用访问到
  2. 时间序列相关的应用,需要同时支持
  3. 根据海量历史数据查询
  4. 非常快地返回关于单个实体的细粒度查询
  5. 实时预测模型的应用,支持根据所有历史数据周期地更新模型

SpringBoot集成Mongodb

SpringBoot集成Mongodb

1. SpringBoot集成

pom.xml

pom.xml
1
2
3
4
5
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>${spring.boot.version}</version>
</dependency>

application.properties

application.properties
1
spring.data.mongodb.uri=mongodb://user:pwd@ip:27017/database

集群版mongodb

application.properties
1
spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database

2. 下划线转驼峰


MySQL整体逻辑架构

MySQL 整体逻辑架构

非原创-记录下

包括

  • MySQL整体逻辑架构
  • 查询执行流程
  • SQL解析顺序

MySQL整体逻辑架构(MySQL`s Logical Architecture)

![MySQL`s Logical Architecture](./images/mysql/logic1.jpg)


Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×