Blog

Ch03-Java 之 NIO

July 25, 2021
Java | IO
Java

操作系统层面的多路复用 IO 实现主要包括四种:select、poll、epoll、kqueue。 1. 常见类 # java.nio.ByteBuffer java.nio.channels.Selector java.nio.channels.SelectableChannel java.nio.channels.ServerSocketChannel 2. 网络模型 # 2.1 Reactor 模型 # Reactor 是非阻塞同步网络模型,Java 可以借用 NIO 接口实现各种 Reactor 模型,比如 单Reactor单线程、单Reactor多线程、主从Reactor多线程 2.2 Proactor 模型 # Proactor 是异步网络模型,需要 OS 的支持才能实现,所以 Java 借用 NIO 接口不一定能实现。 3. Selector # 不同的 SelectorProvider 实现对应了不同的 Selector,由具体的 SelectorProvider(根据不同的 OS 确定)实现进行创建。 4. 零拷贝 # 条目 说明 MappedByteBuffer 基于内存映射(mmap) DirectByteBuffer JVM 可以对 DirectByteBuffer 的对象进行 JVM 堆外内存分配和回收管理 FileChannel 用于文件读写、映射和操作的通道;定义了 transferFrom() 和 transferTo() 两个抽象方法,它通过在通道和通道之间建立连接实现数据传输 5. 参考文献 # Java NIO - IO 多路复用详解

Ch02-Java 之 BIO

July 20, 2021
Java | IO
Java

1. 常见类 # java.net.ServerSocket; java.net.Socket; 2. BIO 模型 # 一个服务端可以连接多个客户端,但是接入一个客户端,服务端都需要用一个线程维持着客户端与服务端的连接。如果客户端数量很多,那么服务端也需要对应的线程数量与之连接。 3. 参考文献 # Java IO - BIO 详解

Ch01-Java 之 IO

July 15, 2021
Java | IO
Java

1. Java IO 概览 # 2. 阻塞/非阻塞 VS 同步/非同步 # 2.1 阻塞 IO 和 非阻塞 IO # 这两个概念是程序级别的。主要描述的是程序请求操作系统 IO 操作后,如果 IO 资源没有准备好,那么程序该如何处理的问题:前者等待;后者继续执行 (并且使用线程一直轮询,直到有 IO 资源准备好了) 2.2 同步 IO 和 非同步 IO # 这两个概念是操作系统级别的。主要描述的是操作系统在收到程序请求 IO 操作后,如果 IO 资源没有准备好,该如何响应程序的问题:前者不响应,直到 IO 资源准备好以后;后者返回一个标记 (好让程序和自己知道以后的数据往哪里通知),当 IO 资源准备好以后,再用事件机制返回给程序。 3. OS IO 多路复用 # IO 模型 相对性能 关键思路 操作系统 JAVA 支持情况 select 较高 Reactor windows/Linux 支持 poll 较高 Reactor Linux 支持 epoll 高 Reactor/Proactor Linux 支持 kqueue 高 Proactor Linux 不支持

Ch03-Kylin 之 Query

June 12, 2021
Apache Kylin
Kylin

query 的整体执行流程如下图所示。可以看到整个 query 的逻辑实际上是由 QueryService 处理的,这里会做重要的路由处理,是执行 cube 的查询,还是下推到其他查询引擎,还是下推到 hive。这个路由逻辑简单来说,如下图所示: 完整的处理逻辑如下图所示: query 和 update 的逻辑如下所示: 1. Query # 在上图的 query 流程中,其实可以看到所有的处理过程最后会交给 calcite,而 calcite 的实现类 OLAPTableScan 会将 OLAPToEnumerableConverter 注册进来,最终在implement方法中完成 RelNode 到 Cube 处理逻辑的转换。 1.1 Cube 选取流程 # 整个过程封装在 RealizationChooser#selectRealization 中,大体上可以分为两步,第一部分是makeOrderedModelMap(),这一步会选出所有满足的 cuboid,第二步是selectRealization(),这一步骤会选出唯一一适合的 cuboid(如果所有的都合适的话,就选 set 里面遍历到的第一个)。详细可以分成下述几步来讲 1.1.1 对 model 及对应的 realizations 进行过滤及排序 # 获取属于该 project 下 factTableName 与查询中事实表相等的所有 realizations,factTableName 即 context.firstTableScan.getTableName 对 realizations 执行过滤,得到 filteredRealizations NOT READY cube 会被过滤 黑名单中的 cube 会被过滤 cube.allColumns 必须与 OLAPContext. ...

Ch02-Calcite 执行流程

June 7, 2021
Apache Calcite
Calcite

Apache Calcite 是一种提供了标准的 SQL 语言、多种查询优化和连接各种数据源基础框架,可以让用户轻松的接入各种数据,并实现使用 SQL 查询。此外,Calcite 还提供了 OLAP 和流处理的查询引擎。

...