StarRocks是一款分析型数据库(他的定语也很多,分布式存算分离等等)。作为数据库他的运行和维护迟早也是落在我这里的。对于做数据库的人都知道什么是交易型数据库,什么是分析型数据库。以及什么是事务分析混合型数据库。但是对于非这块领域的人根本不知道为什么选择某个产品。某些产品是好,但是为什么好不知道。只是傻子过年看街坊,别人这样用了,那我也这样用。至于为什么不知道。
其实行式存储对交易友好,因为写入和修改是以行为基础。而列式存储对分析友好,是因为聚合都是对列进行运算的。而如果大家熟悉我国的实际业务场景就会发现。几乎没有单纯的OLTP,单纯的OLAP。都会发现是事务分析混合的。这也就是为什么2021年时候信通院白皮书定了数据库七大趋势之一就是HTAP。
从技术分类来说Oracle、MySQL是数据库。Redis、MongoDB、influxdb、neo4j、Elasticsearch也是数据库。Hadoop技术栈也是数据库。区块链也是数据库。Impala、StarRocks等也是数据库。所以最终有问题都会涉及到我。本着这个思路我也尝试着进行一下安装。虽然也有容器化部署的方式,但是自己手工安装一遍收获是不一样的。
考虑到大家说我排版问题(不会墨天轮的排版,然后就到处复制了)这次用截图。
图片
下载好安装包传上去。将近3G啊。下载了一会。
不少yum安装的,看上去容易。正式环境时候怎么办?还能yum吗?
解压以后该有的目录都有了。不用自己创建(自己创建的还乱,官方的目录层级挺好的)
然后就编辑fe的配置文件。Fe是前台的意思。FE(Frontend)负责管理元数据、管理客户端连接、进行查询规划、查询调度等工作。每个 FE 节点都会在内存保留一份完整的元数据,这样每个 FE 节点都能够提供无差别的服务。
图片
所以要建立这个元数据目录。(本次体验为单机部署)
然后设置环境变量(为了以后打命令偷懒)
图片
这里遇到一个问题,一定要在环境变量中设置JAVA_HOME。开始以为安装了他能自己识别。
启动前台进程。
图片
然后配置后台进程。BE (Backend)。这里需要把相应的路径写到配置文件中去。
BE 是 StarRocks 的后端节点,负责数据存储和 SQL 计算等工作。
数据存储方面,BE 节点都是完全对等的。FE 按照一定策略将数据分配到对应的 BE 节点,BE 负责将导入数据写成对应的格式存储下来,并生成相关索引。
在执行 SQL 计算时,一条 SQL 语句首先会按照语义规划成逻辑执行单元,然后再按照数据的分布情况拆分成具体的物理执行单元。物理执行单元会在对应的 BE 节点上执行,这样可以实现本地计算,避免数据的传输与拷贝。
然后启动后台进程。start_be.sh –-daemon
但是这里出问题了。后台进程启动失败,也没错误日志。传说的be.info日志没有。在反复确认配置没有问题后,只得找人咨询。恰好微信好友有一个原厂的朋友。问过后原厂产研的老师非常准确的说,是avx2的问题。没有 avx2 的话, be 肯定启动失败。
这里解释一下:AVX2(Advanced Vector Extensions 2)是一种指令集扩展,用于增强处理器的并行计算能力。它引入了更多的SIMD(Single Instruction, Multiple Data)指令,可以同时对多个数据进行操作,加快向量化计算和并行处理的速度。
AVX2指令集在一些需要进行大规模数据处理和并行计算的任务中能够提供性能优势,例如图像和视频处理、科学计算、机器学习等。通过使用AVX2指令集,程序可以更高效地利用CPU的并行计算能力,加快运算速度,提高系统的响应能力。
说到这里明白了,是我虚拟机的指令集不支持。马上找给我虚拟机的同事看看能不能解决?最后是把虚拟机做热迁移,迁移到一个新的宿主机上。
图片
现在看到支持avx2指令集了,后台进程也开起来了。
他的客户端用的是MySQL的客户端。
图片
这里密码是空。输入回车。不写 -p我试下来不行。
执行这个命令看看前台进程和后台进程。
图片
然后就可以像MySQL一样操作的。但是
图片
语法不一样。直接建表会出ERROR的1064错误。需要指定分片键等。关键的是由于是单机体验,要手写副本1.默认是3.目前不能再配置文件中修改。
最后写入数据。
图片
重点来了:
StarRocks一开始说了是列式数据库,所以适合分析。这点应该说明白了。之所以表现出众主要原因我觉得应该是SIMD(向量化执行)我这里引用一下杨廷琨老师PPT
图片
Oracle的In-memory之所以快,其实也是因为SIMD的原因(当然在内存中做就更加快了),而这个是2013年就发布的。试想一下2013年做出来的,那么哪年开始做的?又是哪年开始设计的?这才是重点。
我这里标题之所以写殊途同归,看来要像分析更快,最后SIMD目前看是绕不过去的。而这些都是数学的范畴吧。我一直说数据库是数学和物理学的结合(CPU 内存这些硬件就是物理器件)。至今还有不少人,没有意识到数据库和数学的紧密关系。(当然内行人都已经认识到了,没有意识到的也的确是外行。也许有些人并不看重数据库所以没有认识也就没有认识吧)。其实在2010年之前我就是外行,我就没认识到。