<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Dreamming Time的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/u014445499</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; u014445499]]></copyright><item><title><![CDATA[字符串模式匹配之KMP算法的理解和应用]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/147617703</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/147617703</guid><author>u014445499</author><pubDate>Wed, 30 Apr 2025 18:15:46 +0800</pubDate><description><![CDATA[设匹配串为s，对应的移动指针i；模式串为p，对应的移动指针为j。]]></description><category></category></item><item><title><![CDATA[Spark 3.3.x版本中Runtime Filter在非分区字段上的设计实现分析]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/143020993</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/143020993</guid><author>u014445499</author><pubDate>Thu, 31 Oct 2024 20:02:38 +0800</pubDate><description><![CDATA[我们常见的Row Filter，是在由SQL优化器生成的静态的表达式，例如a = 1，它们的左值和右值都是确定的，因此可以很容易地被下推到数据源的读取算子上，对分区信息/数据进行预处理或是实时过滤。但在有关联子查询或是JOIN的场景下，关联表达式的右值则通常是不确定的，需要在运行时才能确定其值，例如中的子查询或a.idb.id中的b.id。由于数据集无法在planning阶段确定，因此就不能像普通的条件表达式那样进行下推。但如果能够提前计算这些不确定的表达式，使得它们变成常量，那不就可以下推了吗？]]></description><category></category></item><item><title><![CDATA[Spark 3.3.x版本中的动态分区裁剪（DPP，Dynamic Partition Pruning）的实现及应用剖析]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/142418070</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/142418070</guid><author>u014445499</author><pubDate>Wed, 16 Oct 2024 20:31:53 +0800</pubDate><description><![CDATA[一种通用的描述是，DPP在分区级别过滤数据，注意它有别于`Partitioin Filter`。DPP是在`execute`阶段生效，对从数据源加载的`InputPartition`（Spark内部计算数据时定义的数据类型）进一步过滤，减少传递到下游算子的数据量；而`Partition Filter`则在Planning阶段就可以生效，对要加载的`Catalog Partition`进行过滤，因此这两类`Filter`有先后顺序，即先利用`Partition Filter`加载可见分区，然后再利用DPP对加]]></description><category></category></item><item><title><![CDATA[JAVA Thread.yield()方法（请求释放CPU）的理解及在ForkJoinPool中的使用]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/139842158</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/139842158</guid><author>u014445499</author><pubDate>Thu, 20 Jun 2024 22:24:53 +0800</pubDate><description><![CDATA[yield()方法是一个静态成员方法，会向调度器发送一个请求，表示愿意主动释放自己占用的处理器，避免自己过度占用，导致其它线程饥饿，但这并不意味着当前线程一定会释放资源，这取决于调度器的运行时调度策略，因此此方法并非用于资源同步目的，而是为了提升多线程场景下的处理性能。]]></description><category></category></item><item><title><![CDATA[Spark原理之Cache Table的工作原理及实现自动缓存重复Table Scan的思考]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/138003052</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/138003052</guid><author>u014445499</author><pubDate>Fri, 26 Apr 2024 15:25:18 +0800</pubDate><description><![CDATA[CACHE TABLE，可以让用户自定义要缓存的结果集，实际上就是一个临时表，不过数据存储在Spark集群内部，由Application所分配的executors管理。
一旦定义了一个缓存表，就可以在SQL脚本中随处引用这个表名，提高数据检索速度，同时也会资源不必要的资源开销。]]></description><category></category></item><item><title><![CDATA[OLAP技术的发展及趋势简述]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/136046530</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/136046530</guid><author>u014445499</author><pubDate>Tue, 06 Feb 2024 13:24:16 +0800</pubDate><description><![CDATA[类似于MySQL中存储JSON表达式列（虚拟列）的功能，Iceberg中利用Transformer实现隐藏分区的功能，Clickhouse中的聚合视图表的功能等，该功能可以动态扩充源表的列，同时可以由使用者决定写时计算或读时计算，以应对不同的场景。对于数据分析人员，使用OLAP系统不过是计算出预想的数据结构和关系，然后再在自己的场景下利用数据分析手段，找到数据与业务的关系，但随着大模型或AI技术的普及，数据从清洗、到转换、到计算、到分析、再到解释，大胆预测必将成为一个固定的。]]></description><category></category></item><item><title><![CDATA[一种快速对32位/64位整数取模的方法]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135487946</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135487946</guid><author>u014445499</author><pubDate>Tue, 09 Jan 2024 19:24:56 +0800</pubDate><description><![CDATA[当使用%求一个随机数，在区间【0，N-1】的索引位置时，性能并不会高效，因此mod指令通常需要多个CPU周期才能完成，因此Blog（）中提出一个变体算法，来消除取模运算，取而代之的是乘法与位移的联合操作。]]></description><category></category></item><item><title><![CDATA[HTAP（Hybrid Transactional/Analytical Processing）系统之统一存储的实时之道]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135477844</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135477844</guid><author>u014445499</author><pubDate>Tue, 09 Jan 2024 19:03:56 +0800</pubDate><description><![CDATA[本文介绍了一个支持实现写入的、基于LSM的、支持HTAP场景的存储系统，LASER。相关论文中提出了ColumnGroup存储规范，能在兼并行存、列存的优点，以相对最好的性能同时支持OLTP和OLAP事务，为打造流批一体计算&存储系统提供了借鉴，非学值得我们细细口味。]]></description><category></category></item><item><title><![CDATA[Trino: 基于时间片的Split数据处理模型]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135410412</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135410412</guid><author>u014445499</author><pubDate>Fri, 05 Jan 2024 19:11:45 +0800</pubDate><description><![CDATA[越来越多的主流分布式计算引擎，选择基于时间片的线程调度模型处理数据。]]></description><category></category></item><item><title><![CDATA[Iceberg: 列式读取Parquet数据]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135394181</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135394181</guid><author>u014445499</author><pubDate>Thu, 04 Jan 2024 20:35:08 +0800</pubDate><description><![CDATA[BaseBatchReader支持以Batch + Vectorized的特性，读取底层的文件。]]></description><category></category></item><item><title><![CDATA[Trino：分区表上的SQL提交 & 查询流程浅析]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135206884</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135206884</guid><author>u014445499</author><pubDate>Tue, 02 Jan 2024 16:37:50 +0800</pubDate><description><![CDATA[通过API向coordinator提交新的Query，会首先将此query放入QueryManager的缓存池中，然后返回给客户端下一次应该访问的地址。客户端提交SQL成功后，会立即调用REST API，轮询SQL的执行状态。]]></description><category></category></item><item><title><![CDATA[Iceberg: COW模式下的MERGE INTO的执行流程]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135183763</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135183763</guid><author>u014445499</author><pubDate>Sun, 24 Dec 2023 23:30:23 +0800</pubDate><description><![CDATA[public class SparkTable implements org . apache . spark . sql . connector . catalog . Table , // 继承自Spark的接口 SupportsRead , SupportsWrite , SupportsDelete , // 支持删除 SupportsRowLevelOperations , // 支持行级的数据更新 SupportsMetadataColumns {} /**]]></description><category></category></item><item><title><![CDATA[Iceberg：浅析基于Snapshot的事务过程]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135180305</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135180305</guid><author>u014445499</author><pubDate>Sun, 24 Dec 2023 15:37:03 +0800</pubDate><description><![CDATA[Iceberg基于实现了乐观无锁地数据并发读写能力（MVCC，Multi Versions Concurrency Controll），默认提供了快照级别的事务隔离，因此可以至少避免脏读的问题。，是对于并发事务的INSERT/DELETE操作，会导致连续读取相同区间的数据记录时，数据条数不同。，是对于并发事务的UPDATE操作，会导致连续读取相同数据记录的数据发生了变化。]]></description><category></category></item><item><title><![CDATA[Iceberg：ZOrder的实现及执行流程分析]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135136299</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135136299</guid><author>u014445499</author><pubDate>Sat, 23 Dec 2023 17:41:17 +0800</pubDate><description><![CDATA[使用Z-Order索引，可以按任意维度对数据进行排序，以获得更加高效且均衡地范围查询。它即可以作为一级索引，直接影响底层数据组织形式，甚至可以取代二索引（更加节省内存，吞吐量也理更高）。相比于传统的按的顺序的自然排序策略，一旦过滤条件与排序键的前缀匹配模型冲突，数据查找空间就会膨胀，进而影响查询性能，而ZOrder由于会考虑每个维度的值，将数据按排列，因此即使查询时不满足最优条件匹配模型，也不会导致查询空间的过度膨胀。]]></description><category></category></item><item><title><![CDATA[LangChain，构建带有Milvus存储的问题分析任务]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135084708</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135084708</guid><author>u014445499</author><pubDate>Wed, 20 Dec 2023 11:38:50 +0800</pubDate><description><![CDATA[LangChain 就是一个 LLM 编程框架，你想开发一个基于 LLM 应用，需要什么组件它都有，直接使用就行；甚至针对常规的应用流程，它利用链(LangChain中Chain的由来)这个概念已经内置标准化方案了。下面我们从新兴的大语言模型（LLM）技术栈的角度来看看为何它的理念这么受欢迎。]]></description><category></category></item><item><title><![CDATA[Milvus实战：构建Q&A系统及推荐系统]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/135079187</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/135079187</guid><author>u014445499</author><pubDate>Tue, 19 Dec 2023 14:39:08 +0800</pubDate><description><![CDATA[不论是问答还是推荐，它们对上层暴露的接口仅仅是query(...)，模式是相同的，因此可以共用一个基本的Schema，固定基本的字段即可。// 被embedding的字段.build();// embedding vector字段.build();]]></description><category></category></item><item><title><![CDATA[Iceberg：基于Spark3.x的MERGE INTO语法实现数据的增量写入]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/129099821</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/129099821</guid><author>u014445499</author><pubDate>Sat, 18 Feb 2023 14:42:19 +0800</pubDate><description><![CDATA[/ 新旧数据记录，Merge阶段，会为每一个结果行添加一个新的列，其列名就这个常量。]]></description><category></category></item><item><title><![CDATA[ClickHouse 聚合函数的执行过程]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/117127148</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/117127148</guid><author>u014445499</author><pubDate>Fri, 21 May 2021 21:04:41 +0800</pubDate><description><![CDATA[基本的概念
Block：数据块，ClickHouse进行数据读、写的基本单元，每一个Block实例，不仅包含数据域，还包含了每个列的meta信息。
Chunk：数据块，保存实际数据的单元，Block中的数据域的指向的就是这个类型的实例。
Row：一行记录，包含多个列索引，Chunk可以认为是由多个Row组成的。
Column：一列数据，包含一个列上的Block Size数量的行。
一个Block对象，可以简单理解为一张表，它的每一列都有相同的长度，每一行长度也等：




Block/Chunk
Colum]]></description><category></category></item><item><title><![CDATA[ClickHouse Query执行流程浅析]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/115309076</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/115309076</guid><author>u014445499</author><pubDate>Sat, 15 May 2021 21:44:08 +0800</pubDate><description><![CDATA[语法树生成及执行涉及的UML图

HTTP Handler 接收Query请求
调用
Interpreters::executeQuery.h::executeQuery(…)
调用
Interpreters::executeQuery.h::executeQueryImpl(…)
生成
ASTPtr  ast = Parsers::ParserQuery::parseImpl(…)

using ASTPtr = std::shared_ptr&lt;IAST&gt;
IAST是所有SQL语句解析后，生成]]></description><category></category></item><item><title><![CDATA[Spark ShuffleMap任务的生成、执行及数据跟踪流程]]></title><link>https://blog.youkuaiyun.com/u014445499/article/details/116026077</link><guid>https://blog.youkuaiyun.com/u014445499/article/details/116026077</guid><author>u014445499</author><pubDate>Thu, 22 Apr 2021 22:53:22 +0800</pubDate><description><![CDATA[RDD抽象类的定义
我们知道Spark中的一个可以用户计算的数据集，被抽象成了一个RDD，如下是RDD的类定义（这里只保留了类中关键的成员变量）：
abstract class RDD[T: ClassTag](
    @transient private var _sc: SparkContext,
    @transient private var deps: Seq[Dependency[_]]
  ) extends Serializable with Logging {
    /** A u]]></description><category></category></item></channel></rss>