MariaDB ColumnStore初探(2):特性、命令及运维优化

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

作者介绍

徐良,华为电商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版本,未来发展潜力很大。

 

 

架构先进
 
 

 

支持分布式部署,充分利用多服务器多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领域又起烽烟。

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

本文来自云栖社区合作伙伴DBAplus

相关实践学习
AnalyticDB MySQL海量数据秒级分析体验
快速上手AnalyticDB MySQL,玩转SQL开发等功能!本教程介绍如何在AnalyticDB MySQL中,一键加载内置数据集,并基于自动生成的查询脚本,运行复杂查询语句,秒级生成查询结果。
阿里云云原生数据仓库AnalyticDB MySQL版 使用教程
云原生数据仓库AnalyticDB MySQL版是一种支持高并发低延时查询的新一代云原生数据仓库,高度兼容MySQL协议以及SQL:92、SQL:99、SQL:2003标准,可以对海量数据进行即时的多维分析透视和业务探索,快速构建企业云上数据仓库。 了解产品 https://www.aliyun.com/product/ApsaraDB/ads
相关文章
|
20天前
|
机器学习/深度学习 人工智能 运维
人工智能在云计算中的运维优化:智能化的新时代
人工智能在云计算中的运维优化:智能化的新时代
118 49
|
2月前
|
运维
【运维基础知识】用dos批处理批量替换文件中的某个字符串(本地单元测试通过,部分功能有待优化,欢迎指正)
该脚本用于将C盘test目录下所有以t开头的txt文件中的字符串“123”批量替换为“abc”。通过创建批处理文件并运行,可实现自动化文本替换,适合初学者学习批处理脚本的基础操作与逻辑控制。
199 56
|
1月前
|
运维 监控 网络协议
运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面
本文介绍了运维工程师日常工作中最常用的20个Linux命令,涵盖文件操作、目录管理、权限设置、系统监控等方面,旨在帮助读者提高工作效率。从基本的文件查看与编辑,到高级的网络配置与安全管理,这些命令是运维工作中的必备工具。
134 3
|
2月前
|
运维 监控 网络协议
|
1月前
|
缓存 运维 监控
【运维必备知识】Linux系统平均负载与top、uptime命令详解
系统平均负载是衡量Linux服务器性能的关键指标之一。通过使用 `top`和 `uptime`命令,可以实时监控系统的负载情况,帮助运维人员及时发现并解决潜在问题。理解这些工具的输出和意义是确保系统稳定运行的基础。希望本文对Linux系统平均负载及相关命令的详细解析能帮助您更好地进行系统运维和性能优化。
57 3
|
1月前
|
运维 监控 Linux
自动化运维:如何利用Python脚本优化日常任务##
【10月更文挑战第29天】在现代IT运维中,自动化已成为提升效率、减少人为错误的关键技术。本文将介绍如何通过Python脚本来简化和自动化日常的运维任务,从而让运维人员能够专注于更高层次的工作。从备份管理到系统监控,再到日志分析,我们将一步步展示如何编写实用的Python脚本来处理这些任务。 ##
|
1月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
99 1
|
2月前
|
运维 Serverless 数据处理
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
Serverless架构通过提供更快的研发交付速度、降低成本、简化运维、优化资源利用、提供自动扩展能力、支持实时数据处理和快速原型开发等优势,为图像处理等计算密集型应用提供了一个高效、灵活且成本效益高的解决方案。
63 3
|
2月前
|
存储 运维 监控
高效运维管理:从基础架构优化到自动化实践
在当今数字化时代,高效运维管理已成为企业IT部门的重要任务。本文将探讨如何通过基础架构优化和自动化实践来提升运维效率,确保系统的稳定性和可靠性。我们将从服务器选型、存储优化、网络配置等方面入手,逐步引导读者了解运维管理的核心内容。同时,我们还将介绍自动化工具的使用,帮助运维人员提高工作效率,降低人为错误的发生。通过本文的学习,您将掌握高效运维管理的关键技巧,为企业的发展提供有力支持。
|
4月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
199 3

热门文章

最新文章