写点什么

Netflix 推出 Hollow,处理内存数据集的 Java 库

  • 2017-02-07
  • 本文字数:1712 字

    阅读完需:约 6 分钟

Netflix 最近推出了 Hollow ,一款 Java 库和工具包,旨在有效缓存不属于“大数据”的数据集。这些数据集可能是电子商务和搜索引擎的元数据,或者是 Netflix 电影和电视节目的元数据。处理这种数据集的传统方法包括数据存储或串行化,但这可能会有可靠性和延迟问题。Hollow 的入门指南中总结了核心概念和命名方法:

Hollow 管理由单个 _ 生产者 _ 构建的数据集,并向一个或多个 _ 消费者 _ 传送以用于只读访问。数据集会随着时间而改变。改变的数据集的时间线可以分为离散的 _ 数据状态 _,每个状态都是那个特定时间点数据的完整快照。

生产者和消费者通过在数据状态之间转换的 _ 状态引擎 _ 来处理数据集。生产者使用 _ 写状态引擎 _,而消费者使用 _ 读状态引擎 _。

Hollow 取代了 Netflix 原先的内存数据集框架 Zeno 。数据集现在用紧凑的、固定长度的、强类型的数据编码表示。这种编码最小化了数据集占用的空间,并将编码记录“打包在 JVM 堆上合并的可重用内存条中,以避免影响繁忙的服务器上的 GC 行为。”

入门
要开始使用 Hollow 示例,请参考以下 POJO:

复制代码
public class Movie {
long id;
String title;
int releaseYear;
public Movie(long id,String title,int releaseYear) {
this.id = id;
this.title = title;
this.releaseYear = releaseYear;
}
}

上述 POJO 上简单的数据集可以这样填充:

复制代码
List<Movie> movies = Arrays.asList(
new Movie(1,"The Matrix",1999),
new Movie(2,"Beasts of No Nation",2015),
new Movie(3,"Goodfellas",1990),
new Movie(4,"Inception",2010)
);

Hollow 将这样的 movies 列表转换为新的编码形式,如下所示:

有关编码的更多详细信息,请参阅 Hollow 网站的高级主题章节

生产者
生产者的第一个示例发布了数据集(本例中的电影)的初始数据状态,并通知消费者在哪里找到该数据集。对数据集的后续更改会系统地发布并传送给消费者。

生产者使用 HollowWriteStateEngine 作为数据集的句柄:

复制代码
HollowWriteStateEngine writeEngine = new HollowWriteStateEngine();

HollowObjectMapper 填充 HollowWriteStateEngine:

复制代码
HollowObjectMapper objectMapper = new HollowObjectMapper(writeEngine);
for(Movie movie : movies) {
objectMapper.addObject(movie);
}

HollowObjectMapper 是线程安全的,也可以并行执行。

生产者将数据集(也称 blob)写入定义的输出流:

复制代码
OutputStream os = new BufferedOutputStream(new FileOutputStream(snapshotFile));
HollowBlobWriter writer = new HollowBlobWriter(writeEngine);
writer.writeSnapshot(os);

为消费者生成 API
客户端 API 基于数据模型生成必要的 Java 文件,并且必须在写入初始的消费者源代码前执行:

复制代码
HollowAPIGenerator codeGenerator = new HollowAPIGenerator(
"MovieAPI", // a name for the API
"org.redlich.hollow.consumer.api.generated", // the path for generated API files
stateEngine); // the state engine
codeGenerator.generateFiles(apiCodeFolder);

消费者
一旦通知消费者已发布的数据集,消费者使用 HollowWriteReadEngine 作为数据集的句柄:

复制代码
HollowReadStateEngine readEngine = new HollowReadStateEngine();

HollowBlobReader 将 blob 从生产者消费到 HollowReadStateEngine:

复制代码
HollowBlobReader reader = new HollowBlobReader(readEngine);
InputStream is = new BufferedInputStream(new FileInputStream(snapshotFile));
reader.readSnapshot(is);

通过生成的 API 可以访问到数据集中的数据:

复制代码
MovieAPI movieAPI = consumer.getAPI();
for(MovieHollow movie : movieAPI.getAllMovieHollow()) {
System.out.println(movie._getId() + ", " +
movie._getTitle()._getValue() + ", " +
movie._getReleaseYear());
}

这将打出结果输出:

复制代码
1, "The Matrix", 1999
2, "Beasts of No Nation", 2015
3, "Goodfellas", 1990
4,"Inception", 2010

完整的 Hollow 项目可以在 GitHub 上找到。

InfoQ 最近和 Netflix 高级软件工程师及 Hollow 主要贡献者 Drew Koszewnik 进行了详细的访谈,讨论了Hollow 的具体实现细节。

查看英文原文 Netflix Introduces Hollow, a Java Library for Processing In-Memory Datasets

2017-02-07 18:003038
用户头像

发布了 218 篇内容, 共 68.1 次阅读, 收获喜欢 76 次。

关注

评论

发布
暂无评论
发现更多内容

企评家,企业评价助力新三板企业健康发展

企评家

计算单链表的长度。

InfoQ IT百科

动态重定位需要由什么来实现?

InfoQ IT百科

玩转小程序压测

阿里巴巴云原生

小程序 阿里云 云原生 压测 PTS

阿里云数字化安全生产平台 DPS V1.0 正式发布!

阿里巴巴云原生

阿里云 云原生 数字化 安全生产平台

微服务架构设计实践

鲁米

微服务架构

给定两个字符串s和t,判断这两个字符串中的字母是不是完全一样。

InfoQ IT百科

进程主要由哪几个部分组成?

InfoQ IT百科

阿里云发布企业云原生IT成本治理方案:五大能力加速企业 FinOps 进程

阿里巴巴云原生

阿里云 云原生 FinOps

Plato Farm 的MARK 处于永远通缩,经济模型解析

西柚子

LAXCUS分布式操作系统如何保障系统安全

LAXCUS分布式操作系统

软件系统安全 量子攻击 分布式软件系统

使用任务管理软件有哪些好处,好用的任务管理软件有哪些?

爱吃小舅的鱼

面由 AI 生|虚拟偶像“捏脸”技术解析

ZEGO即构

计算机视觉 虚拟偶像 Avatar AI捏脸

递归算法的三个定律是什么?

InfoQ IT百科

国厂自研的操作系统都有哪些?

InfoQ IT百科

浅谈MatrixOne如何用Go语言设计与实现高性能哈希表

MatrixOrigin

golang 哈希表 MatrixOrigin MatrixOne 矩阵起源

企评家|河南豫能控股股份有限公司的企业成长性报告简述

企评家

EventBridge 集成云服务实践

阿里巴巴云原生

阿里云 云原生 事件总线 EventBridge 事件源

netty系列之:netty中常用的对象编码解码器

程序那些事

Java Netty 程序那些事 4月月更

CPU散热器是电脑标配吗?

InfoQ IT百科

大咖说 X 对话开源|论数据库人才发展战略

大咖说

数据库 阿里云 科技

企业知识管理平台的作用及功能

小炮

企业知识管理

加密算法有哪几种?

InfoQ IT百科

如何判断两个字符串是否互为回文?

InfoQ IT百科

中关村e谷为产业搭台:中关村论坛(空天专场)黑科技亮相现场

联营汇聚

什么是“哈希算法”?

InfoQ IT百科

什么是满二叉树?

InfoQ IT百科

易周金融观点 | 个人养老金制度正式出炉;居民贷款延期还款政策密集落地

易观分析

银行 养老金制度

什么是完全二叉树?

InfoQ IT百科

易捷行云EasyStack 加入龙蜥社区,共同打造多样化算力创新云平台

OpenAnolis小助手

云计算 开源 龙蜥社区 CLA 易捷行云

企评家企业大数据,实现6种应用的场景

企评家

Netflix推出Hollow,处理内存数据集的Java库_Java_Michael Redlich_InfoQ精选文章