doris01-开始
https://blog.bcmeng.com/post/meituan-doris.html
1. 对比其他的doris
doris是一个rolap, 可以满足以下需求
- 灵活多维分析
- 明细+聚合
- 主键更新
相比较kylin, druid而言, Kylin 主要满足离线固化多维分析的需求,Druid 主要满足实时多维分析的需求。
对比其他的ROLAP系统,
- SQL on Hadoop 系统:无法支持更新,性能也较差。
- TiDB: TiDB 虽然当初号称可以支撑 100%的 TP 和 80%的 AP,但是架构设计主要是面向 TP 场景,缺少针对 AP 场景专门的优化,所以 OLAP 查询性能较差,TiDB 团队目前正在研发专门的 OLAP 产品:TiFlash,TiFlash 具有以下特点:列存,向量化执行,MPP,而这些特点 Doris 也都有。
- SnappyData:SnappyData 是基于 Spark + GemFire 实现的内存数据库,机器成本较高,而我们机器资源很有限,此外 SnappyData 的计算是基于 JVM 的,会有 GC 问题,影响查询稳定性。
- ClickHouse:Clickhouse 是一款单机性能十分彪悍的 OLAP 系统,但是当集群加减节点后,系统不能自动感知集群拓扑变化,也不能自动 balance 数据,导致运维成本很高,此外 Clickhouse 也不支持标准 SQL,我们用户接入的成本也很高。
2. 为什么选择doris
Doris 的优点是功能强大,易用性好。 功能强大指可以满足我们用户的需求,易用性好主要指 兼容 Mysql 协议和语法,以及 Online Schema Change。
Doris 的数据存储在类似 SSTable(Sorted String Table)的数据结构中。该结构是一种有序的数据结构,可以按照指定的列进行排序存储。在这种数据结构上,以排序列作为条件进行查找,会非常的高效。
对平台侧来说,Doris 的优点是易运维,易扩展和高可用:
- 易运维指 Doris 无外部系统依赖,部署和配置都很简单。
- 易扩展指 Doris 可以一键加减节点,并自动均衡数据。
- 高可用值 Dors 的 FE 和 BE 都可以容忍少数节点挂掉
- 可以提供秒级join应用
3. 编译
此处使用docker编译
具体可见: http://doris.apache.org/documentation/cn/installing/compilation.html
编译完成后,产出文件在 output/
目录中。
3.1) 什么是MMP
MPP ( Massively Parallel Processing ),即大规模并行处理,在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点通过专用网络或者商业通用网络互相连接,彼此协同计算,作为整体提供数据库服务。非共享数据库集群有完全的可伸缩性、高可用、高性能、优秀的性价比、资源共享等优势。简单来说,MPP 是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果 ( 与 Hadoop 相似 )。
3.2) 环境建议
centos8, 根目录至少保证50G空间, 否则可能不够用的
编译最好采用挂载外部包的形式, 即使编译中间出了问题, 也可以继续从上次的位置编译
3.3) 下载docker镜像
docker pull apachedoris/doris-dev:build-env-1.2
在这儿因为自己的电脑和网不给力, 卡了许久, 最终用阿里云的服务器30s下载下来了... 然而回传速度极慢
3.4) 下载源码
clone 最新的master分支代码 https://github.com/apache/incubator-doris/
3.5) 开启
docker run -it
--name doris
--net=host
-v /root/doris/incubator-doris:/root/incubator-doris/ apachedoris/doris-dev:build-env-1.2
开启之后, 就在容器内了
3.6) 编译
在容器内, 进入挂载的源码目录执行
sh build.sh
在这儿最开始想本机编译, 但无奈网络不过关, 下载不下来
编译时需要用到maven, 可以修改镜像内为阿里云的 nexus, 速度会大有提升
vim /usr/share/maven/conf/setting.xml
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>