“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

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:002898
用户头像

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

关注

评论

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

新闻速递 I MobTech首席数据官杨冠军受CSDN之邀,探索企业数字化转型最佳路径

MobTech袤博科技

数字化转型 企业 数智未来

【限时免费】阿里云 ACR EE 增强型扫描引擎限时体验中,多维度保障容器镜像安全

阿里巴巴云原生

探索SeekTiger生态,Tiger DAO VC有哪些新期待

小哈区块

中国信通院联合OpenMLDB邀您参加《开源数据库发展研究报告》调研问卷

第四范式开发者社区

数据库 大数据 开源

Linux之lastb命令

入门小站

在线JSON压缩工具

入门小站

工具

完美结合,10款提升编程能力的游戏项目!

Jackpop

计算机网络: IP地址,子网掩码,网段表示法,默认网关,DNS服务器详解

喀拉峻

网络安全 IP

Redis(二)分布式锁与Redis集群搭建

神农写代码

前端食堂技术周刊第 31 期:Vue 3、Vitest 中文文档上线、Pinia 正式成为 Vue 官方默认推荐的状态管理库、Vite v2.9.0

童欧巴

JavaScript 前端 Web web前端 前端工程师

一文浅谈:我们为什么需要云原生

穿过生命散发芬芳

4月月更

吹爆Python,解决了10个痛苦已久的难题

Jackpop

用JAVA捋一下设计模式1-简单工厂模式

下雨了

设计模式 简单工厂模式 4月月更

在线正则表达式可视化测试工具

入门小站

工具

Redis集群架构剖析(4):槽位迁移,重新分配

非晓为骁

redis 分布式架构 redis cluster

Rust中值销毁前的清理动作

Shine

rust

好身体,从增加睡眠时间开始

石云升

睡眠 4月月更

探索SeekTiger生态,Tiger DAO VC有哪些新期待

西柚子

PlatoFarm空投社区的逻辑,效仿无聊猿还是Dao理念使然

小哈区块

netty系列之:netty中的核心MessageToByte编码器

程序那些事

Java Netty 程序那些事 4月月更

Flutter 简单实用的 fluro 路由管理插件简介

岛上码农

flutter 大前端 ios开发 安卓开发 跨平台开发

《数据密集型型系统设计》LSM-Tree VS BTree

懒时小窝

哈希 B-tree 列式存储 LSM-Tree

阿里云与达摩院合作 AHPA 弹性预测论文被顶会 ICDE 录用

阿里巴巴云原生

北京市支援合作办公室党组书记、主任丁勇一行到正镶白旗调研京蒙协作工作

科技大数据

用JAVA捋一下设计模式2-工厂方法模式

下雨了

设计模式 工厂方法模式 4月月更

软件设计模式:适配器模式

正向成长

设计模式 适配器模式

2022第12周-程序接盘侠

印哥爱学习

离职交接

模块二:作业微信朋友圈的高性能复杂度

本人法海

「架构实战营」

Kubernetes官方java客户端之六:OpenAPI基本操作

程序员欣宸

4月月更

Linux驱动开发-proc接口介绍

DS小龙哥

4月月更

津厦两地托育行业发展线上视频交流会成功召开

InfoQ 天津

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