分类目录归档:技术文章

Greenplum 查询优化器


Greenplum 查询优化器

Greenplum 查询优化器介绍

对于给定的查询语句,找到“代价”最小的查询计划

查询计划介绍

一个查询计划就是由计划节点组成的树
每个计划节点代表一个特定类型的处理操作,计划节点中包含了执行器执行所需的全部信息
在执行时,计划节点产生输出元组
一般来说,扫描节点从数据表中获取输入元组
大部分其他节点从它们的子计划节点中获取输入元组

计划节点的类型

  • 扫描节点
    • 顺序扫描,索引扫描,位图扫描
  • 连接节点
    • Nestloop, hash, merge
  • 非SPJ节点
    • Sort, aggregate, set operation(UNION etc)

Gre

Read more

Greenplum 执行器


Greenplum 执行器

什么是执行器

执行器处理一个由执行计划节点组成的树,并返回查询结果

原发性扫描节点

scan

非原发性扫描节点

join agg

执行模型

迭代模型(pipeline模型,Pull方式)

每一个执行节点实现一个next函数,并遵循

  1. 每一次调用,返回一个tuple或者返回NULL
  2. 实现一个循环,每次调用执行子节点的next函数作为输入并处理

优点:易懂,资源使用少,通用性好
缺点:迭代次数多,代码局部性差,CPU cacheline不友好

向量化模型(Vectorization Model)

和迭代模型一样,每一个执行节点实现一个next函数,区别在于
每一次迭

Read more

Greenplum 架构


Greenplum 架构

Greenplum 整体架构

Greenplum 本质上是单机Postgres组成的数据库集群,对外提供统一的数据库接口,并针对集群处理做了大量优化
基于MPP无共享拓扑
数据分片 分区 分表 分库

分片:分布到不同的节点
分区:概念比较广泛,水平分区、垂直分区

0. 系统空闲状态

postmaster 是数据库主进程,监控用户请求

1. 客户端建立会话连接

客户端通过libpq协议发送连接请求给Greenplum master节点

master节点上postmaster进程会监听连接请求,并处理

2. Master fork 一个进程处理客户端请求

master节点

Read more

Docker Centos/Systemd


Docker Centos/Systemd

Linux

Centos With Systemd

Dockerfile

FROM centos:7
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/sy

Read more

VIM 使用技巧


1. 删除空行

g/^$/d

2. 映射按键

map {lhs} {rhs}
Map the key sequence {lhs} to {rhs} for the modes where the map command applies.  The result, including
{rhs}, is then further scanned for mappings.  This allows for nested and recursive use of mappings.
example : map <M-n> :tabnext

Read more

Idea 快捷键总结


最常用的快捷键

Linux 版本

Ctrl + Alt + 左方向键 退回到上一个操作的地方

Ctrl + Alt + 右方向键 前进到上一个操作的地方

Mac 版本

Command + Option + 左方向键 退回到上一个操作的地方

Command + Option + 右方向键 前进到上一个操作的地方

Read more

CTAGS 支持一门语法


CTAGS 支持一门语法


再~/.ctags 文件中加入以下

Rust

--langdef=Rust
--langmap=Rust:.rs
--regex-Rust=/^[ \t]*(#\[[^\]]\][ \t]*)*(pub[ \t]+)?(extern[ \t]+)?("[^"]+"[ \t]+)?(unsafe[ \t]+)?fn[ \t]+([a-zA-Z0-9_]+)/\6/f,functions,function definitions/
--regex-Rust=/^[ \t]*(pub[ \t]+)?type[ \t]+([a-zA-Z0-9_]+)/\2/T,types,

Read more

hbase Balancer


hbase Balancer


banance 主要有四个命令

banance_switch balancer balancer_enabled balance_rsgroup

banance_switch

功能: 开启或关闭自动banance,返回以前的状态
使用:
balance_switch [true|false]

balancer

功能:手动执行一次整个集群的balance,成功返回true,否则返回false

balancer_enabled

功能:查看当前balancer的状态

balance_rsgroup

功能:只有在开启rsgroup时才会有,手动balance

Read more

代码评审


代码评审

代码行

  • 用到变量是否可能为null
  • 是否会有越界访问, 如访问不存在的索引的数组或不存在key的字典
  • 调用函数是否可能抛出异常,或返回错误

函数

  • 每个输入参数是否可空,类型是否正确,范围是否正常
  • 代码行数是否过多

  • 职责是否单一
  • 是否依赖了过多的类
  • 是否有不属于该类抽象层次的函数

安全

代码安全

  • JSONP函数名要编码
  • echo的地方要XSS编码
  • SQL执行要参数化,不能拼
  • redirect的目标地址要限制domain

API安全

  • 写操作要防止CSRF
  • 私有数据访问要鉴权
  • 要涉及越权访问返回码,防止越权访问
  • 资源消耗类API要增加频率限制, 如注册帐号,短信,邮件

Read more