安装Mariadb columnStore(10.3版本)
Posted 雅冰石
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了安装Mariadb columnStore(10.3版本)相关的知识,希望对你有一定的参考价值。
一 ColumnStore架构
MariaDB ColumnStore是一个利用大规模并行分布式数据体系结构的列式存储引擎,例如用于大数据分析。它是一个列式存储系统,通过将InfiniDB 4.6.7移植到MariaDB构建。
从MariaDB 10.5.4开始,它可以作为MariaDB服务器的存储引擎。在此之前,它只能单独下载。
它专为大数据扩展而设计,可处理数PB的数据、线性可扩展性和优异的性能,以及对分析查询的实时响应。它利用了列式存储、压缩、即时投影以及水平和垂直分区的I/O优势,在分析大型数据集时提供了巨大的性能。
MariaDB ColumnStore部署由多个 MariaDB 服务器组成,作为模块运行,协同工作以提供线性可扩展性和卓越的性能,并实时响应分析查询。这些模块包括User, Performance and Storage
/*
列式存储将每一列的数据组织在一起。
行式存储和列式存储对比:
*/
用户模块
用户模块是 MariaDB 服务器实例,配置为作为 ColumnStore 的前端运行。
服务器运行许多额外的进程来处理并发扩展。当客户端查询服务器时,存储引擎将查询传递给这些进程之一,然后这些进程分解 SQL 请求并将各个部分分发到一个或多个性能模块以处理查询并从存储中读取。用户模块然后收集查询结果并将它们组装到结果集中以返回给客户端
性能模块
性能模块负责存储、检索和管理数据,处理查询操作的块请求,并将其传递回用户模块或模块以完成查询请求。
该模块从磁盘中选择数据并将其缓存在一个无共享的缓冲区中,该缓冲区是它运行的服务器的一部分。您可以根据需要配置任意数量的性能模块。每个附加模块都会增加整个数据库的缓存大小以及您可用的处理能力。
进程
管理和监控流程
进程管理器或 ProcMgr 是负责启动、监视和重新启动性能模块上的所有 MariaDB 列存储进程的进程。
为了实现这一点,ProcMgr 在每个性能模块上使用进程监视器或 ProcMon 来跟踪 MariaDB ColumnStore 进程。
处理查询
主进程或 PrimProc 处理查询。用户模块将来自应用程序的查询处理成发送到性能模块的指令。PrimProc 将这些指令作为面向块的 I/O 操作执行,以执行谓词过滤、连接处理和数据的初始聚合,之后 PrimProc 将数据发送回用户模块。
执行加载和写入
性能模块处理对底层持久存储的加载和写入。它使用两个进程来处理这个问题:WriteEngineServer 和 cpimport。
WriteEngineServer 协调每个性能模块上的 DML、DDL 和导入。DDL 更改在系统目录中保持不变,该目录跟踪所有列存储元数据。
用户和性能模块都使用 cpimport。在性能模块上,它会在加载批量数据时更新数据库文件。这允许 ColumnStore 支持完全并行加载。
无共享数据缓存
性能模块使用无共享数据缓存。当它第一次访问数据时,它会按照用户模块的指示对数据进行操作,并将其缓存在基于 LRU 的缓冲区中,以供后续访问。
当性能模块在专用服务器上运行时,您可以将大部分可用数据专用于此数据缓存。由于性能模块缓存是无共享设计:
- 参与的性能模块节点之间没有数据块 ping(有时在其他多实例/共享磁盘数据库系统中发生)。
- 添加到系统中的性能模块节点越多,数据库的整体缓存大小就越大。
故障转移
使用多个 Performance Module 节点部署 MariaDB ColumnStore 时,心跳机制可确保所有节点都在线,并且在特定节点发生故障时进行透明的故障转移,不需要人工干预。
当失败的性能模块重新联机时,ColumnStore 会自动将其重新采用到配置中并开始使用它来工作。
存储模块
您可以使用本地存储(即性能模块)或共享存储(例如 SAN)来存储数据。在 Amazon EC2 环境中,您可以使用临时或弹性块存储 (EBS) 卷。在无共享部署需要数据冗余的情况下,您可以将其与 GlusterFS 集成。
存储架构
当您在 MariaDB ColumnStore 上创建表时,系统会为表中的每一列创建至少一个文件。
您写入 ColumnStore 表的数据存储在 DB Roots 中的 Performance Modules 中,这些模块位于 /usr/local/mariadb/columnstore/datax
ColumnStore系统库
Database | Description |
calpontsys | 维护ColumnStore表的元数据信息 |
infinidb_querystats | 有关查询性能的信息 |
infinidb_vtable | 用于在查询执行中创建临时表的数据库。该数据库仅存在于 ColumnStore 1.2 及以下版本中。在这些版本中,执行 ColumnStore 查询的用户必须CREATE TEMPORARY TABLE对此数据库具有权限。 |
columnstore_info | 用于检索有关 ColumnStore 使用情况信息的数据库。 |
二 安装10.3版本的mariadb columnStore
由于我们使用的是10.3.18版本的mariadb,所以这里安装一个该版本的columnStore。
2.1 安装依赖包
yum -y install epel-release jemalloc boost
2.2 安装columnStore
2.2.1 下载
下载地址:
2.2.2 安装
tar -xvf mariadb-columnstore-1.2.5-1-centos7.x86_64.bin.tar.gz -C /usr/local/
/usr/local/mariadb/columnstore/bin/post-install
2.2.3 配置
/usr/local/mariadb/columnstore/bin/postConfigure
其他几个我选择了回车。
最后输出如下,表示安装成功:
source /usr/local/mariadb/columnstore/bin/columnstoreAlias
#可以看到columnStore占用了很多端口:
2.3 连接columnstore
2.3.1 mcsadmin
2.3.2 mcsmysql
create database mcs;
use mcs;
create table idbtest(col1 int, col2 int) engine=columnstore;
show create table idbtest;
insert into idbtest values (1, 2);
insert into idbtest values (3, 4);
select * from idbtest;
三 配置密码认证
由于默认密码是空的,可以免密登录,因此需要设置下密码
update mysql.user set password=password('123456') where user='root';
#删除匿名用户
delete from mysql.user where user='';
flush privileges;
#创建允许远程连接的管理员账号
grant all privileges on *.* to 'root'@'%' identified by '123456';
建完账号后,就能用数据库连接工具连接columnStore了(连接方式和连接普通mysql一样)
#创建普通账号
略
#为普通账号授权
ColumnStore使用名为infinidb_vtable的专用库来创建用于ColumnStore查询处理的所有临时表。默认情况下,root用户帐户已被授予此帐户的权限,但必须为所有用户帐户授予此库的权限:
GRANT CREATE TEMPORARY TABLES ON infinidb_vtable.* TO 用户;
四 验证columnStore性能
和mariadb比对下性能。
4.1 将mariadb里的数据导入到columnstore里
可参考将mariadb里的数据导入到columnstore里_雅冰石的博客-CSDN博客
4.2 执行统计sql
SELECT COUNT(*) FROM statistic_login_day_teacher
在columnstore里只需0.97秒。
在mariadb里要2分半。
SELECT platform_code,COUNT(*) FROM statistic_login_day_teacher
GROUP BY platform_code
在columnstore里只需只需5秒。在mariadb里要两分半。
只查部分字段的话,发现columnstore更快:
SELECT id,area_id,platform_code,school_name FROM statistic_login_day_teacher WHERE DATE_FORMAT(DATE,'%Y%m%d')='20220202'
Column store两分19秒。
Mariadb 4分42秒。
在mariadb及columnStore里分别执行相同的查询sql,查询所有数据:
SELECT * FROM statistic_login_day_teacher WHERE DATE_FORMAT(DATE,'%Y%m%d')='20220202'
Mariadb里历时7分钟,columnStore里历时10分钟,更慢了。
4.3 总结
如果经常做统计,等聚合操作或者只统计部分字段的话,用columnStore更快。
如果要一行一行查询所有数据的话,mariadb更快。
本篇文章参考了
MariaDB ColumnStore - MariaDB Knowledge Base
About MariaDB ColumnStore - MariaDB Knowledge Base
Preparing for ColumnStore Installation - 1.2.5 - MariaDB Knowledge Base
以上是关于安装Mariadb columnStore(10.3版本)的主要内容,如果未能解决你的问题,请参考以下文章
MariaDB Community Server 10.5 Alpha 上的 MariaDB Columnstore 1.4