分布式数据库-CrateDB架构分析与源码阅读之源码阅读

本文深入剖析CrateDB 3.3.6的源码,介绍了CrateDB的代码结构,特别是针对SQL执行流程,从netty接收请求到Lucene写入过程。通过一个insert语句的执行,展示了SQL语句的解析、logical plan和execution plan生成等关键步骤。此外,探讨了CrateDB对Elasticsearch和Lucene的源码依赖,以及其分布式节点协同方式。
摘要由CSDN通过智能技术生成

本章将以CrateDB 3.3.6的版本为基础对CrateDB的源码做介绍,首先会对CrateDB各个包的功能做个整体介绍,然后会以一条insert语句的执行流程为例,结合源码介绍介绍crate执行过程,最后会对关键模块各找一个典型类进行详细的源码分析。

由于CrateDB代码庞大,大概有几十万行,所以仅能通过对各个关键模块找典型类的方式介绍,也很推荐大家在阅读完源码介绍之后,详细的去看CrateDB的全部源码。通过阅读CrateDB源码,大家可以比较清晰地了解一个高效的分布式HTAP数据库的实现方式,分布式节点之间的协同方式,对于大家设计类似架构有很强的参考意义。对CrateDB基本架构和相关术语不熟悉的朋友可以参考我前面的几篇博客,也可以随时在评论区讨论。

CrateDB代码结构

CrateDB是一个开源项目,遵从apache 2.0协议,这是一个比较开放的协议,比较方便大家基于他的源码做二次开发。项目地址位于github上:https://github.com/crate/crate,项目主页位于:https://crate.io  打开CrateDB的源码,我们可以发现存在以下关键目录:

app :与elastic search的app源码目录类似,用于服务bootstrap相关,包含一些config解析和启动异常类;

azure-discovery :云服务自动发现功能相关;

benchmarks:CrateDB性能测试相关;

blackbox :CrateDB黑盒测试相关;

blob:CrateDB大对象存储支持相关;

common:CrateDB底层工具类,有一部分代码来自于elastic search;

dex:CrateDB中数据库相关的数据结构实现,包括Row和Iterator;

dns-discovery:dns自动发现

devs:用其他语言开发的工具

docs:文档

enterprise:CrateDB企业feature相关

es:elastic search,这里是抽取了elastic search的部分源码

http:http通信相关

idea :idea支持

sql-parser:sql层的语法解析器,主要引入了antlr组件

sql:CrateDB sql层实现

ssl :安全认证相关

udc:收集一部分统计信息

其实CrateDB抽取了很多elastic search和lucene的源码,而不是以引入jar包的方式进行调用,这就代表对于elastic search和luene的版本升级和新特性,CrateDB可能难以做到及时的吸取和跟踪。

CrateDB的启动入口位于app/src/main/java/io/crate/bootstrap/CrateDB,主要是用定义的CrateNode代替ES Node代替bootstrap。

依赖注入

CrateDB使用guice实现依赖注入来构造和管理对象,guice是google开发的一个依赖注入框架,在elastic search中得到了广泛使用,相对于spring的依赖注入会更加灵活一些。

CrateDB SQL执行流程

本节以一条insert语句在CrateDB的执行流程为例,介绍CrateDB各个模块的workflow。对于一个正常运行的CrateDB进程,通过JDBC协议接收到如下一条insert语句的时候:

insert into 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值