Smith
-
AWS S3 virtual-hosted-style 与 path-style 的区别
这篇文章梳理了 AWS S3 中 virtual-hosted-style 与 path-style 两种访问路径的差异,以及为什么如今越来越多系统更倾向前者。正文先说明 path-style 把 bucket 放在 URL 路径中时在扩展性、自定义域名和根路径文件处理上的局限,再分析 virtual-hosted-style 通过把 bucket 提升到子域名后带来的 DNS 级流量分发和 CNAME 绑定能力,同时也提到 SSL 通配符证书对带点 bucket 名的历史限制,最后解释了为什么像 MinIO 这类私有化 S3 服务仍普遍采用 path-style。
-
Apache Polaris 从入门到精通
这篇文章从 Iceberg REST catalog 的标准接口讲起,系统介绍了 Apache Polaris 作为开源 REST catalog 管理系统的整体架构、权限模型和实际用法。正文先说明 Polaris 如何基于 REST API 为不同计算引擎提供统一 catalog 服务,以及 access control 与 vended-credentials 两大核心能力;随后拆解 catalog、namespace、table、view、principal、principal role、catalog role 和 privilege 之间的关系,并用一个只读 benchmark catalog 的案例演示如何创建资源、配置角色与权限,最后补充了 Polaris 在 UI、compaction 和生态完善度上的不足。
-
How to deploy StarRocks with IAM enabled in AWS EKS?
This article records a practical walkthrough for deploying StarRocks on AWS EKS with IAM enabled, using CloudShell, eksctl, Helm, and IAM service accounts. It starts from creating an EKS cluster and fixing pod scheduling issues by reducing FE and BE resource requests, then shows how to bind IAM roles to StarRocks pods so they can access services such as S3 and Glue, and finally covers applying the updated Helm values, connecting to the cluster, and cleaning up both the IAM service account and the EKS cluster after the test.
-
ORC vs Parquet,孰强孰弱?
这篇文章从文件结构、类型系统、NULL 处理、复杂类型存储、统计信息、随机 IO、footer 大小和 schema evolution 等多个角度,对 ORC 与 Parquet 两种列式格式做了一次系统对比。正文先拆解 ORC 中 Stripe/Tail/ProtoBuf 元信息与 Parquet 中 RowGroup/Page/Thrift 元信息的组织方式,再讨论两者在统计信息粒度、最小读取单元、复杂类型表达和随机访问上的设计差异,最后重点分析 Parquet footer 较大带来的反序列化成本,以及 ORC 缺乏稳定子列 id 给 schema evolution 带来的实现复杂度。
-
Apache ORC 加密解析
这篇文章介绍了 Apache ORC 的列级加密机制,重点解释 LocalKey 和 MasterKey 两层密钥体系如何配合 AES 完成列数据与统计信息的保护。正文先说明加密列、mask 策略和 KeyProvider 的基本角色,再介绍 IV 的生成规则、EncryptedLocalKey 与 MasterKey 的关系,以及加密数据在 ORC 文件中的排布方式,最后顺着 PostScript、Footer 和 Stripe 的读取流程,梳理 reader 如何获取 MasterKey、解出 LocalKey 并逐步还原出真正的列数据和加密统计信息。
-
RLE 编码在 Apache ORC 中的实现
这篇文章系统梳理了 Apache ORC 中 RLE 编码的两套实现,重点介绍它们如何结合 varint、zigzag 和不同的分组规则压缩整数序列。正文先从最基础的 Run Length Encoding、无符号和有符号 varint 讲起,再解释 RLE version 1 如何用 header、delta 和 varint 编码重复或等差序列,随后继续拆解 RLE version 2 中 Short Repeat、Direct、Patched Base 和 Delta 四种编码模式的结构和适用场景,并用具体数字示例说明各类 header、bit width 和数据段的含义。
-
浅谈 Apache ORC 之 Decimal 存储
这篇文章围绕 Apache ORC 中 Decimal 类型的存储实现,逐步补齐理解官方文档所需的几个关键前置概念。正文先解释 precision 和 scale 的含义,以及 ORC 中 int128、补码和 zigzag 编码的背景,再通过示例梳理 zigzag 的编码与解码过程,最后回到 ORC Decimal 本身,说明 valueStream 如何保存整数表示、SECONDARY stream 如何保存 scale,以及 reader 在 scale 不匹配时如何对读出的数值进行乘除调整。
-
C++ 函数虚表 Virtual Table
这篇文章围绕 C++ 虚函数表的实现机制展开,目的是解释编译器如何借助 virtual table 和隐藏的 vptr 指针实现运行时多态。正文先说明含有虚函数的类为何会拥有独立的虚表以及对象中额外的 vptr,然后通过基类指针指向派生类对象的例子解释虚函数调用如何最终跳转到正确实现,最后将直接调用、函数指针间接调用和虚函数调用做对比,分析虚表带来的额外访存步骤和对象尺寸开销。
-
自适应 Cache 之 Starburst Warp Speed
这篇文章借 Starburst Warp Speed 的设计,讨论了一个面向 Lakehouse 场景的自适应缓存系统应当如何在索引、预热和易用性之间取得平衡。正文先介绍 Warp Speed 在 Starburst Galaxy 和 Enterprise 中的定位,以及它如何通过收集 Trino 查询历史、生成 warmup rule 和 acceleration instruction,驱动 worker 异步建立索引、缓存数据和执行查询加速;随后进一步拆解 Big Data Index、Cache Management、Text Analytics 和自适应预热代码中的 Collector、Extractor、Analyzer 等模块,最后从产品设计角度强调相比单纯追求极限性能,面向用户的低心智负担和易用性往往更重要。
-
浅谈 HDFS 慢节点的解决方案
这篇文章围绕 HDFS 慢节点导致 OLAP 查询忽快忽慢的问题,梳理了问题成因和几种常见缓解手段。正文先区分数据多读、IO 次数过多、跨多个 HDFS Block 读取以及纯粹运气不好连到慢 DataNode 等不同来源,再分别讨论 Hedged Read 在解决慢节点时的原理、线程池规划和额外内存成本,以及通过缩短 HDFS 客户端 IO timeout 来尽快放弃慢请求的思路,最后结合 Trino 的历史经验说明这类配置本质上只是补救措施,真正的关键仍然是减少不必要的 IO。