作者介绍

徐良,华为电商DBA, BAT RDS DBA ,拥有多年MySQL管理经验。擅长MySQL性能优化,高可用,高性能,热衷于私有云技术和大数据库架构,目前专注于MySQL支持E,P级数据容量和源码定制研究。开源项目sqlwatch、MyCAT源码贡献者。

 

 

Columnstore简介  

 

最近MariaDB整合了InfiniDB作为一个独立存储引擎Columnstore,基于列存储的分析性数据库,提供P级大数据分析。

 

近几年Hadoop的火热,使传统的OLTP厂家Oracle推出了Oracle12C inmemory,sap推出了HANA等OLAP产品,都想来分一杯大数据的羹。作为开源关系型数据库王者的MySQL在OLAP领域消息不是很多,甚至还不如PostgrSQL的Greenplum, Columnstore的推出终于使百花齐放的大数据分析领域又多了一员猛将。

 

社区认可  


 

MariaDB已经整合InfiniDB,近期已经发布GA版本,未来发展潜力很大。

 

MariaDB longtext类型修改 mariadb columnstore_mysql

 

架构先进  


 

支持分布式部署,充分利用多服务器多CPU,多IO进行快速OLAP分析。

 

MariaDB longtext类型修改 mariadb columnstore_数据库_02

 

整理架构分为计算层和存储层,都是可扩展的。计算层需要由下面的几个主要进程构成:

 

  • MariaDB(mysqld):收集用户请求的一个SQL入口,存储元数据信息;
  • Execution Manager:收到MariaDB进程发送过来的语法树,转化成对应的任务列表(JOB LIST),包括优化、取数据、(HASH)JOIN、汇总、分组。UserModule的核心进程;
  • DMLProc:将DML语句发送到指定的Performance Module执行;
  • DDLProc:将DDL语句发送到指定的Performance Module执行;
  • Performance Module:接受Execution Manager发送过来的任务调度,分布式扫描,(HASH)JOIN与汇总。

 

存储层支持本地磁盘与共享存储,后期计划支持HDFS和GlusterFS这样的分布式文件系统,以提升数据的可靠性。

 

性能强悍  


 

Percona专业MySQL服务提供商性能测试InfiniDB比其他OLAP优势明显。

 

MariaDB longtext类型修改 mariadb columnstore_mysql_03

 

安装部署  


 

内核优化

/sbin/ifconfig eth0 txqueuelen 10000
#Modify /etc/sysctl.conf for the following:
# increase TCP max buffer size
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
# increase Linux autotuning TCP buffer limits
# min, default, and max number of bytes to use
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# don't cache ssthresh from previous connection
net.ipv4.tcp_no_metrics_save = 1
# recommended to increase this for 1000 BT or higher
net.core.netdev_max_backlog = 2500
# for 10 GigE, use this
# net.core.netdev_max_backlog = 30000

 

下载安装

systemctl stop firewalld.service
systemctl disable firewalld.service
yum erase MariaDB-server MariaDB-libs -y
yum -y groupinstall "Development Tools"
yum -y install cmake
yum install systemd-libs -y
yum -y install ncurses-devel
yum install libxml++-devel -y
yum install readline-devel -y
yum install boost -y
yum -y install expect perl perl-DBI openssl zlib
 HOME=/usr/local/
cd /root/infi/mysql
./configure --prefix=$HOME/Calpont/mysql
make
make install
cd /root/infi/InfiniDB
./configure --prefix=$HOME/Calpont
make
make install
/usr/local/Calpont/bin/post-install
/usr/local/Calpont/bin/postConfigure  
/usr/local/Calpont/bin/calpontAlias

 

启动

/usr/local/Calpont/mysql/mysql-Calpont start > /tmp/actionMysqlCalpont.log 2>&1
service InfiniDB status

 

测试实践

 

InfiniDB比InnoDB建表速度慢,语法定制。

 

MariaDB longtext类型修改 mariadb columnstore_mysql_04

 

InfiniDB比InnoDB增加列快100倍

 

mysql> alter table t_innodb add c3 varchar(64);
Query OK, 99797224 rows affected (15 min 19.50 sec)
Records: 99797224  Duplicates: 0  Warnings: 0
mysql>  alter table t_InfiniDB add c51 varchar(56) ;
Query OK, 0 rows affected (12.15 sec)
Records: 0  Duplicates: 0  Warnings: 0

 

InfiniDB比InnoDB单条插入慢上百倍

 

MariaDB longtext类型修改 mariadb columnstore_mysql_05

 

InfiniDB比InnoDB百列字段千万级数据插入快4倍

 

5.7G    /usr/local/Calpont/mysql/db/infi/t_innodb.ibd
Mon Oct 17 16:03:16 CST 2016
12G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd
Mon Oct 17 16:09:41 CST 2016
24G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd
Mon Oct 17 16:24:32 CST 2016
31G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd
473M    /usr/local/Calpont/data1/000.dir
Mon Oct 17 16:43:18 CST 2016
26G     /usr/local/Calpont/data1/000.dir
Mon Oct 17 16:53:52 CST 2016

 

InfiniDB比InnoDB百列字段千万级空间少20%

 

5.7G    /usr/local/Calpont/mysql/db/infi/t_innodb.ibd
Mon Oct 17 16:03:16 CST 2016
12G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd
Mon Oct 17 16:09:41 CST 2016
24G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd
Mon Oct 17 16:24:32 CST 2016
31G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd
473M    /usr/local/Calpont/data1/000.dir
Mon Oct 17 16:43:18 CST 2016
26G     /usr/local/Calpont/data1/000.dir
Mon Oct 17 16:53:52 CST 2016

 

InfiniDB比InnoDB百列字段千万级查询快100倍

 

MariaDB longtext类型修改 mariadb columnstore_大数据_06

 

InfiniDB比InnoDB亿级插入快3倍

 

mysql> insert into t_innodb(`mkey`,`mval`,`pid`) select uuid(),uuid(),crc32(uuid())%1000000 from t_innodb;
Query OK, 38689612 rows affected (7 min 7.11 sec)
Records: 38689612  Duplicates: 0  Warnings: 0
mysql> insert into t_InfiniDB select * from t_innodb;
Query OK, 99797224 rows affected (5 min 23.33 sec)
Records: 99797224  Duplicates: 0  Warnings: 0

 

InfiniDB比InnoDB亿级数据空间少50%

 

[root@iZwz9gqs3euog0uv31l5ahZ ~]# du -sh /usr/local/Calpont/data1/*
5.3G    /usr/local/Calpont/data1/000.dir
[root@iZwz9gqs3euog0uv31l5ahZ ~]# du -sh /usr/local/Calpont/mysql/db/infi/*
12G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

 

InfiniDB比InnoDB亿级数据查询快150倍

 

MariaDB longtext类型修改 mariadb columnstore_数据库_07

 

BI兼容性

 

基于成熟MySQL协议,Tableau可以使用

 

MariaDB longtext类型修改 mariadb columnstore_MySQL_08

 

运维优化  


 

配置优化

 

配置文件

Columnstore.xml 

 

压缩速度

set InfiniDB_compression_type = n
AllowDiskBasedJoin 
TempFileCompression 
TempFilePath (建议独立分区)
InfiniDB_um_mem_limit (join内存 空间最大值)
InfiniDB_use_import_for_batchinsert =1后
LOAD DATA INFILE 能有效提升insert速度
cpimport dbName tblName [loadFile]
cpimport -m3 mytest mytable /home/mydata/mytable.tbl

 

让UM读取本地PM

InfiniDB_local_query =1

 

获取数据对应的分区

select calShowPartitionsByValue('tbl_name','col_name', 'start_value', 'end_value');

SQL语法兼容性 0完全兼容 1,效率低的报错 2自适应

set InfiniDB_vtable_mode = n

 

常用命令  


 

加目录

mcsadmin adddbroot 2
mcsadmin  assignPmDBRootConfig 3 pm1

加模块

mcsadmin addModule pm 2 MYHST1,MYHST2 mypwd

 

获取系统状态

mcsadmin getSystemStatus

 

获取进程状态

mcsadmin getProcessStatus
mcsadmin  stopSystem  
mcsadmin startSystem

 

关闭所有

mcsadmin   shutdownSystem 
mcsadmin alterSystem-disablemodule PM2, PM3
mcsadmin alterSystem-enablemodule PM2, PM3
switchParentOAMModule pm3

 

获取系统配置

mcsadmin getSystemNetworkConfig
mcsadmin getModuleConfig
setSystemConfig ExternalMajorThreshold 80

 

注意问题  


 

自增长字段需要在注释里标志

COMMENT=’autoincrement=orderkey,1’;
MySQL单行记录65536限制了列个数

 

 

总结  

 

MariaDB Columnstore可以扩展到百台服务器节点构成的集群,P级数据容量,完美支持各种成熟BI工具,支持数据更新DML,有代码可以定制,SQL和NoSQL在OLAP领域又起烽烟。

原文发布时间为:2016-12-22