首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏HappenLee的技术杂谈

    ClickHouse源码笔记2:聚合流程的实现

    上篇笔记讲到了聚合函数的实现并且带大家看了聚合函数是如何注册到ClickHouse之中的并被调用使用的。这篇笔记,笔者会续上上篇的内容,将剖析一把ClickHouse聚合流程的整体实现。 1.基础知识的梳理 ClickHouse的实现接口 Block类 前文我们聊到ClickHouse是一个列式存储数据库,在内存之中用IColumn接口来作为数据结构表示数据。 这个类是整个聚合过程之中最重要的类,查询解析优化后生成聚合查询的执行计划。 Block getHeader(bool final) const; 2.聚合流程的实现 这里我们就从上文提到的Aggregator::execute(const BlockInputStreamPtr 小结 好了,到这里也就把ClickHouse聚合流程的代码梳理完了。 除了聚合计算外,其他的物理执行操作符也是同样通过流的方式依次对接处理的,源码阅读的步骤也可以参照笔者的分析流程来参考。 4.

    2.5K22发布于 2020-07-20
  • 来自专栏落叶飞翔的蜗牛

    ArrayList源码解析2

    /** *以正确的顺序(从第一个到最后一个元素)返回一个包含此列表中所有元素的数组。 *返回的数组将是“安全的”,因为该列表不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组)。 *因此,调用者可以自由地修改返回的数组。 此方法充当基于阵列和基于集合的API之间的桥梁。 */ public Object[] toArray() { return Arrays.copyOf(elementData, size); } /** * 以正确的顺序返回一个包含此列表中所有元素的数组(从

    43920发布于 2021-01-28
  • 来自专栏爪哇缪斯

    源码解析:ThreadPoolExecutor(2

    我们就做一个小小的使用例子,因为只有我们知道怎么使用它,才可以基于它对应的方法进行源码分析。 通过上面的例子,我们针对源码解析就要针对红框的这两点进行深入探索,一个是ThreadPoolExecutor的构造函数,另一个就是execute方法。 二、源码解析——构造函数 2.1> 线程池的构造函数及类的继承关系 首先,我们先要了解一下ThreadPoolExecutor线程池类的继承关系,好对它有一个宏观的认知,如下图所示: 那么针对它的构造函数 ---- 后面的内容,参见:源码解析:ThreadPoolExecutor(3)

    22810编辑于 2023-05-09
  • 来自专栏爪哇缪斯

    源码解析:ThreadLocal(2

    源码和注释如下所示: 【解释】 通过源码,我们可以得出以下结论: nextIndex就是从指定的下标i开始,向后获取下一个位置的下标值。 好,那我们继续看下面的源码 ---- 后面的内容,参见:ThreadLocal源码精讲(3)

    27410编辑于 2023-05-09
  • 来自专栏ClickHouse 源码解析

    ClickHouse 源码解析(二):SQL 的一生(中)

    基于 ClickHouse version 22.10.1 学习并写下 ClickHouse 源码解析系列。由于 CK 版本迭代很快,可能导致代码可能有些出入,但是整体流程大差不差吧。 由于源码阅读过于枯燥,并且不太利于后续复习,所以在逻辑梳理时,我会使用思维导图或者流程图的方式来描述类与类之间的调用逻辑,后半部分会挑出核心的源码去分析。 在源码解析部分对 SelectQuery 这类查询语句如何构建 QueryPipeline 进行了分析。 ClickHouse 源码解析(一):SQL 的一生(上) 我们聚焦于执行 Pipeline 这部分,学习 SelectQuery 的调度流程。 源码解析上面内容大致了解了ExecutingGraph调度流程,接下来我们深入源码去学习 Graph 的节点初始化和 Graph 的调度。

    2.1K41编辑于 2022-11-18
  • 来自专栏ClickHouse 源码解析

    ClickHouse 源码解析(三):SQL 的一生(下)

    基于 ClickHouse version 22.10.1 学习并写下 ClickHouse 源码解析系列。由于 CK 版本迭代很快,可能导致代码可能有些出入,但是整体流程大差不差吧。 由于源码阅读过于枯燥,并且不太利于后续复习,所以在逻辑梳理时,我会使用思维导图或者流程图的方式来描述类与类之间的调用逻辑,后半部分会挑出核心的源码去分析。 ----概述上一篇ClickHouse 源码解析(二):SQL 的一生(中)在源码解析部分分析了 ExecutingGraph 的初始化流程,并且在文末画了调度节点状态轮转图,可以直观的看到一个节点是如何从 ClickHouse 源码解析(一):SQL 的一生(上) 我们聚焦于执行 Pipeline 这部分,学习 SelectQuery 的调度流程。 yield) { if (tasks.isFinished()) break; // 2.

    1.8K31编辑于 2022-12-19
  • 来自专栏深入理解Android

    开源框架源码解析系列(2)——LeakCanary源码解析

    LeakCanary是一个开源的,可以用来检测activtiy或者fragment内存泄漏的框架,本篇我们来学习这个框架的源码。 debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-alpha-2' } 然后在application执行如下代码: LeakCanary.install(this); 然后出现内存泄露时候就会出现通知弹窗 2.源码分析 2.1 LeakCanary#install public static @NonNull RefWatcher return RETRY; } if (gone(reference)) { return DONE; } //关键点2 gcTrigger.runGc Throwable e) { return failure(e, since(analysisStartNanoTime)); } } 1.创建HprofParser,这个时另一个库里的,用来解析

    2.3K10编辑于 2022-06-22
  • 来自专栏玩转大前端

    Vue2 源码解析

    前端技术的发展非常快,仅仅掌握 Vue 的使用是远远无法跟上前端的发展脚步的 Vue 的源码中有不少经典的解决问题的方法,掌握这些才算是真的学到了一些前端精髓。 (例如nextTick、render)才好分析出合适的解决方法,以及评估是否可应用到项目中 面试时很多大厂必问(比如腾讯) 三、Vue 实例及入口 1、源码目录 compiler 包括模板编译相关的代码 而解析的过程从原理上讲则简单明了: <template> 部分被模板解析、生成 AST,最后生成 render() 方法,成为组件对象的一部分 <script> 几乎不做处理,直接被导出使用 <style 2、nextTick 实现解析 一些基本的常识: 当前正在执行的代码会顺序执行下去,这是最高优先级 异步方法的回调都会放在事件队列中,在当前执行的代码执行结束后被调用 事件队列分为两种,一种是 macrotask 入口 bin/vue.js 作为命令行的入口文件,主要功能是处理命令的输入和解析。为了更方便地处理命令行输入的命令和参数解析,引用了 commander 模块。

    1.7K42编辑于 2022-08-15
  • 来自专栏clickhouse入门

    ClickHouse(07)ClickHouse数据库引擎解析

    建表语句DDL详细解析ClickHouse(07)ClickHouse数据库引擎解析ClickHouse(08)ClickHouse表引擎概况ClickHouse(09)ClickHouse合并树MergeTree 家族表引擎之MergeTree详细解析ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析ClickHouse(11)ClickHouse ClickHouse(16)ClickHouse日志表引擎Log详细解析ClickHouse(17)ClickHouse集成JDBC表引擎详细解析ClickHouse(18)ClickHouse集成ODBC 表引擎详细解析ClickHouse(19)ClickHouse集成Hive表引擎详细解析ClickHouse(20)ClickHouse集成PostgreSQL表引擎详细解析ClickHouse(21) ClickHouse集成Kafka表引擎详细解析ClickHouse(22)ClickHouse集成HDFS表引擎详细解析ClickHouse(23)ClickHouse集成Mysql表引擎详细解析

    1.4K10编辑于 2024-03-10
  • 来自专栏clickhouse入门

    ClickHouse(17)ClickHouse集成JDBC表引擎详细解析

    要实现JDBC连接,CH需要使用以后台进程运行的程序 clickhouse-jdbc-bridge。该引擎支持Nullable数据类型。 int_id`));Query OK, 0 rows affected (0,09 sec)mysql> insert into test (`int_id`, `float`) VALUES (1,2) SELECT *FROM jdbc_table┌─int_id─┬─int_nullable─┬─float─┬─float_nullable─┐│      1 │         ᴺᵁᴸᴸ │     2  它与建表集成一样,需要clickhouse-jdbc-bridge程序才能运行。它支持可空类型(基于查询的远程表的DDL)。 datasource_column', 'show databases') b ON a.Database = b.name来源文章:ClickHouse(17)ClickHouse集成JDBC表引擎详细解析

    86620编辑于 2024-05-30
  • 来自专栏clickhouse入门

    ClickHouse(16)ClickHouse日志表引擎Log详细解析

    table_name [ON CLUSTER cluster] (     column1_name [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],     column2_ name [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],     ... ) ENGINE = StripeLog 写数据 {#table_engines-stripelog-writing-the-data 对每一次 Insert 请求,ClickHouse 将数据块追加在表文件的末尾,逐列写入。 ClickHouse 为每张表写入以下文件: data.bin — 数据文件。 读数据 {#table_engines-stripelog-reading-the-data} 带标记的文件使得 ClickHouse 可以并行的读取数据。 from_column=20421&from=20421 来源文章:ClickHouse(16)ClickHouse日志表引擎Log详细解析

    72510编辑于 2024-05-30
  • 来自专栏clickhouse入门

    ClickHouse(18)ClickHouse集成ODBC表引擎详细解析

    ODBC集成表引擎使得ClickHouse可以通过ODBC方式连接到外部数据库.为了安全地实现 ODBC 连接,ClickHouse 使用了一个独立程序 clickhouse-odbc-bridge. 创建表CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]( name1 [type1], name2 [type2 int_id`));Query OK, 0 rows affected (0,09 sec)mysql> insert into test (`int_id`, `float`) VALUES (1,2) float | float_nullable |+--------+--------------+-------+----------------+| 1 | NULL | 2 (18)ClickHouse集成ODBC表引擎详细解析

    62920编辑于 2024-05-31
  • 来自专栏clickhouse入门

    ClickHouse(19)ClickHouse集成Hive表引擎详细解析

    [type2] [ALIAS expr2], ...) ]] 2021-09-18Time taken: 0.295 seconds, Fetched: 1 row(s)在 ClickHouse 中建表ClickHouse中的表,从上面创建的Hive表中获取数据 ]] 2021-09-18Time taken: 0.766 seconds, Fetched: 1 row(s)在 ClickHouse 中建表ClickHouse 中的表, 从上面创建的Hive ]] 2021-09-18Time taken: 0.624 seconds, Fetched: 1 row(s)在 ClickHouse 中建表ClickHouse中的表, 从上面创建的Hive表中获取数据 (19)ClickHouse集成Hive表引擎详细解析

    67320编辑于 2024-06-03
  • 来自专栏react源码分析

    react源码解析13.hooks源码2

    hook调用入口在hook源码中hook存在于Dispatcher中,Dispatcher就是一个对象,不同hook 调用的函数不一样,全局变量ReactCurrentDispatcher.current useCallback保存callback函数,useMemo保存callback的执行结果useState&useReducer之所以把useState和useReducer放在一起,是因为在源码中useState pendingPassiveHookEffectsUnmount;pendingPassiveHookEffectsUnmount = [];for (let i = 0; i < unmountEffects.length; i += 2) pendingPassiveHookEffectsMount;pendingPassiveHookEffectsMount = [];for (let i = 0; i < mountEffects.length; i += 2) create(); } catch (error) { captureCommitPhaseError(fiber, error); }}useRefsring类型的ref已经不在推荐使用(源码

    57030编辑于 2023-01-04
  • 来自专栏clickhouse入门

    ClickHouse(20)ClickHouse集成PostgreSQL表引擎详细解析

    [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2], ...) ClickHouse尝试将数值映射到ClickHouse的数据类型。设置 external_table_functions_use_nulls 来定义如何处理 Nullable 列. PostgreSQL 的 Array 类型会被转换为 ClickHouse 数组。 ', 'nice.table', 'postgrsql_user', 'password', 'nice.schema');来源文章: ClickHouse(20)ClickHouse集成PostgreSQL 表引擎详细解析

    1.2K20编辑于 2024-06-04
  • 来自专栏clickhouse入门

    ClickHouse(21)ClickHouse集成Kafka表引擎详细解析

    kafka_schema – 如果解析格式需要一个 schema 时,此参数必填。kafka_num_consumers – 单个表的消费者数量。 ClickHouse可以接受和返回各种格式的数据。 以下kafka_format是支持的格式,ClickHouse可以接受和返回各种格式的数据。 例如,如果群集中有10个主题和5个表副本,则每个副本将获得2个主题。 如果副本数量发生变化,主题将自动在副本中重新分配。 clickhouse也支持自己使用keyfile的方式来维护kerbros的凭证。

    1.2K20编辑于 2024-06-07
  • 来自专栏云数据仓库 ClickHouse

    ClickHouse源码导读:网络IO

    本文将试图深入浅出方式介绍ClickHouse网络IO模块,以期抛砖迎玉。 本文分析代码版本为19.10.16.44,并且只分析在Linux 平台下其实现。 2. 通过源码,发现ClickHouse的网络模型与 **1 Master线程/N Worker线程+非阻塞IO**模型类似,但有自己的特点。主要区别是,Worker线程并没有事件循环。 构建线程池(ThreadPool)对象,处理客户端链接 继承TCPServerConnection, 实现处理客户端连接的业务逻辑 继承TCPServerConnectionFactory, 实现构造步骤2中代表客户链接的对象 结束 ClickHouse是一款优秀的开源OLAP数据库。分析其源码,有助于在生产环境中,更好地使用它。 本文梳理ClickHouse网络IO的设计与实现,通过关键代码片段,剖析其网络IO的内部原理。 这有助于加深对ClickHouse原理的理解。 更多ClickHouse技术交流问题,请留言,拉您进入ClickHouse技术交流群。

    1.5K43发布于 2020-08-26
  • 来自专栏公有云大数据平台弹性 MapReduce

    ClickHouse源码导读:网络IO

    本文将试图深入浅出方式介绍ClickHouse网络IO模块,以期抛砖迎玉。 本文分析代码版本为19.10.16.44,并且只分析在Linux 平台下其实现。 2. 通过源码,发现ClickHouse的网络模型与 **1 Master线程/N Worker线程+非阻塞IO**模型类似,但有自己的特点。主要区别是,Worker线程并没有事件循环。 构建线程池(ThreadPool)对象,处理客户端链接 继承TCPServerConnection, 实现处理客户端连接的业务逻辑 继承TCPServerConnectionFactory, 实现构造步骤2中代表客户链接的对象 结束 ClickHouse是一款优秀的开源OLAP数据库。分析其源码,有助于在生产环境中,更好地使用它。 本文梳理ClickHouse网络IO的设计与实现,通过关键代码片段,剖析其网络IO的内部原理。 这有助于加深对ClickHouse原理的理解。 更多ClickHouse技术交流问题,请留言,拉您进入ClickHouse技术交流群。

    2.9K157发布于 2020-03-23
  • 来自专栏clickhouse入门

    ClickHouse(24)ClickHouse集成mongodb表引擎详细解析

    创建一张表CREATE TABLE [IF NOT EXISTS] [db.]table_name( name1 [type1], name2 [type2], ...) host:port — MongoDB 服务器地址.database — 数据库名称.collection — 集合名称.user — MongoDB 用户.password — 用户密码.用法示例ClickHouse key UInt64, data String) ENGINE = MongoDB('mongo1:27017', 'test', 'simple_table', 'testuser', 'clickhouse ');查询:SELECT COUNT() FROM mongo_table;┌─count()─┐│ 4 │└─────────┘来源文章:ClickHouse(24)ClickHouse集成 mongodb表引擎详细解析

    50520编辑于 2024-06-23
  • 来自专栏Java学习录

    Dubbo源码解析2)SPI原理

    本篇文章是Dubbo源码解析系列文章的第二篇,本系列文章分析基于Dubbo官方代码2.7.5-release版本,本篇文章主要分析Dubbo中是如何使用SPI机制来加载扩展类的 在阅读本文之前,你需要阅读如下文章 : Dubbo源码解析(1)概览 SPI术语 什么是SPI SPI 全称为 Service Provider Interface,是一种服务发现机制。 dubbo会根据在运行时通过传入的 URL 类型的参数或者内部含有获取 URL 方法的参数 ,从URL中获取到要使用的扩展类的名称 ,再去根据名称加载对应的扩展实例 ,用这个扩展实例对象调用相同的方法 源码解析 ) instanceof SimpleExtImpl2); } 不去分析源码我们可以大概猜一下这两行代码,大致就是加载SimpleExt接口的两个实现类,这个接口上方提到过,我们先看下这个接口的内容 对象中 以上步骤中,第一个步骤是加载拓展类的关键,第三和第四个步骤是 Dubbo IOC 与 AOP 的具体实现,我们主要关注下第一步 获取所有的拓展类 我们在通过名称获取拓展类之前,首先需要根据配置文件解析出拓展项名称到拓展类的映射关系表

    55910发布于 2020-03-31
领券