Victor's Code Journey
Victor's Code Journey

蓄水池采样算法

蓄水池采样算法是一种随机抽样算法,它能够在一个很大的集合中,抽取一部分样本,并保证每个样本的选取概率都是相等并随机的。

  • 特点:
    • 选取集合可以非常大,甚至不知道边界。
    • 每个样本的选取随机且概率相等。
    • 时间复杂度较低,O(n),节省内存。
  • 适用场景:
    • 在一些非常大的集合,或者未知大小的集合,不知道边界的集合,不知道文件总行数的情况下,随机抽取k个元素。
    • 保证每个元素抽取都是均匀随机的并且概率相等。
    • 尽量高效,节省内存地抽取

Trino源码学习-内存管理

Trino中的内存管理分为两块:

  • LocalMemoryManager: 在ServerMainModule中声明,用于管理当前节点的内存使用
  • ClusterMemoryManager: 在CoordinatorModule中声明,用于管理集群的内存使用

The Snowflake Elastic Data Warehouse

我们生活在分布式计算的黄金时代。公有云平台几乎能够按需提供无限的计算和存储资源。同时,SaaS模型(Software-as-a-Service)将企业级系统带给了无法负担成本和相关系统复杂性的用户。传统的数仓系统正在努力的适应新的环境,但是首先,它是为固定资源而设计,从而没办法利用云的弹性能力。另外,传统的数仓依赖复杂的ETL流水线和物理调优,这个是和云的半结构数据和快速解决工作问题的新形式所需要的弹性和快速不一致的。

我们决定进行根本性的重新设计。我们的任务是去建立云上的企业级数据仓库的解决方案。就是Snowflake弹性数据仓库,简称Snowflake。Snowflake是一种多租户、事务性、安全、高度可扩展的弹性系统,具备完整的SQL支持和半结构化和schema-less数据模式支持。Snowflake在亚马逊云上提供现付即用的服务。用户只需将数据导入云上,就可以立即利用他们熟悉的工具和界面进行管理和查询。从2012年底,Snowflake开始计划实施,到2015年6月,Snowflake已经可以大体可用。现在,Snowflake被越来越多的大大小小的组织用于生产。这个系统每天运行几百万次查询在几PB的数据上。

本文主要介绍Snowflake的设计、多集群共享数据的结构和Snowflake的关键特性:极致的弹性和可用性、半结构化和schema-less的数据支持、时间旅行、端到端的安全性,最后是一些经验总结和对未来工作的展望。

Trino源码学习-基础框架Airlift

Airlift是Trino的系统基础,是一个用Java构建REST服务的轻量级框架。Airlift并不是像Spring一样的重量级框架,相反,它像是由一组开源工具组成的工具包,将来自 Java 生态系统的稳定、成熟的库汇集到一个简单、轻量级的包中,让您专注于完成工作,并包括对配置、指标、日志记录、依赖注入等的内置支持,使开发者能够在最短的时间内交付生产质量的 Web 服务。

Airlift包含以下标准开源库:

LibraryDomain
JettyIndustry standard HTTP server and client
JAX-RS/JerseyThe Java standard for REST servers
JacksonIndustry standard JSON serialization
GuavaSwiss army knife for Java
GuiceThe best dependency injection framework for Java
jmxutilsSimple library for exposing JMX endpoints

TopicGC: How LinkedIn cleans up unused metadata for its Kafka clusters

Apache Kafka 是一个开源的事件流平台,用户可以在其中创建 Kafka 主题作为数据传输单元,然后与生产者和消费者一起发布或订阅该主题。虽然大多数 Kafka 主题都在积极使用,但由于业务需求发生变化或主题本身是短暂的,因此不再需要一些主题。Kafka 本身没有自动检测未使用主题并删除它们的机制。这通常不是一个大问题,因为 Kafka 集群可以容纳相当多的主题,数百到数千个。但是,如果主题数量持续增长,最终会遇到一些瓶颈,并对整个 Kafka 集群产生破坏性影响。TopicGC服务的诞生就是为了解决这个确切的问题。事实证明,它通过删除~20%的主题来减轻Kafka的压力,并将Kafka的生产和消费性能提高了至少30%。

JAVA and SIMD

本文简单介绍了SIMD技术和SIMD在Java中的应用。SIMD(Single Instruction Multiple Data)即单指令流多数据流,是一种采用一个控制器来控制多个处理器,同时对一组数据(又称“数据向量”)中的每一个分别执行相同的操作从而实现空间上的并行性的技术。简单来说就是一个指令能够同时处理多个数据。