作者介绍
徐良,华为电商DBA, BAT RDS DBA ,拥有多年MySQL管理经验。擅长MySQL性能优化,高可用,高性能,热衷于私有云技术和大数据库架构,目前专注于MySQL支持E,P级数据容量和源码定制研究。开源项目sqlwatch、MyCAT源码贡献者。
最近MariaDB整合了InfiniDB作为一个独立存储引擎Columnstore,基于列存储的分析性数据库,提供P级大数据分析。
近几年Hadoop的火热,使传统的OLTP厂家Oracle推出了Oracle12C inmemory,sap推出了HANA等OLAP产品,都想来分一杯大数据的羹。作为开源关系型数据库王者的MySQL在OLAP领域消息不是很多,甚至还不如PostgrSQL的Greenplum, Columnstore的推出终于使百花齐放的大数据分析领域又多了一员猛将。
MariaDB已经整合InfiniDB,近期已经发布GA版本,未来发展潜力很大。
支持分布式部署,充分利用多服务器多CPU,多IO进行快速OLAP分析。
整理架构分为计算层和存储层,都是可扩展的。计算层需要由下面的几个主要进程构成:
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优势明显。
内核优化
/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建表速度慢,语法定制。
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单条插入慢上百倍
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倍
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倍
BI兼容性
基于成熟MySQL协议,Tableau可以使用
配置优化
配置文件
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领域又起烽烟。
如果字段的最大可能长度超过255字节,那么长度值可能…
只能说作者太用心了,优秀
感谢详解
一般干个7-8年(即30岁左右),能做到年入40w-50w;有…
230721