FiloDB:用于大数据分析的分布式数据库

2015 年 11 月 05 日

近期,TupleJump 杰出工程师、Spark 和 Cassandra 的用户和贡献者、Spark Job Server 的联合创建人和维护者 Evan Chan详细介绍了用于大数据分析的分布式数据库FiloDB,对其主要特点和所包含模块进行了分析。

在当今的大数据时代,越来越多的企业需要对结构化的数据进行分析和查询,需要对流数据进行快速处理和更新。以视频分析为例,存储和分析系统可能每天处理的事件超过30 亿个,并且要针对实时发生的事件进行统计和分析。如此大规模、高速度的数据处理迫切需要高可扩展性、易于更新和获取新数据、支持快速的分析查询、支持极其灵活查询的系统的支持。

作为一种列存储格式, Apache Parquet 很好的实现了节省空间和减少 IO 的目的,满足了上述问题的部分需求。但是,Parquet 是一种读优化的格式,存在不支持幂等写、没有针对小更新的写优化、不适合时间序列和 IoT 等缺点。因此,很多开发人员转向了 Apache Cassandra 这种 NoSQL 数据库。Cassandra 很好的实现了水平可扩展、数据建模非常灵活、操作简单、实时和机器数据的获取容易等特性。但是,该数据库支持简单查询,而且是面向 OLTP(联机事务处理)的。为了更好的解决上述问题, TupleJump 提出了一种开源、分布式、列存储数据库——FiloDB。

作为一种 OLAP(联机分析处理),FiloDB 可以获取机器数据、事件数据和时间序列数据等各种类型的流数据,然后进行非常快速的分析查询。其主要特点包括:

  • 分布式。FiloDB 在设计之初便考虑其底层平台为 Apache Cassandra 等分布式存储平台。因此,FiloDB 支持 Apache Spark 采用并行查询的方式来加速分析。
  • 列存储。FiloDB 通过使用带有字典压缩等节省空间技术的列存储来带来性能的提升。其性能与 Parquet 不相上下,比运行在 Cassandra 2.x 上的 Spark 要快 1 到 2 个数量级。
  • 版本化。FiloDB 增量的增加一列或者若干行作为一个新的版本。相比于基于文件的技术,FiloDB 提供更多的灵活性,使得回滚操作变得简单。

FiloDB 使用 Apache Cassandra 作为其存储引擎,使用 Apache Spark 作为其计算层。Apache Cassandra 作为一套开源分布式 Key-Value 存储系统,具有分布式、基于 column 的结构化和高可扩展性等特点。之前,很多用户已经尝试把 Apache Spark 和 Cassandra 表结合在一起,进行更加丰富的分析。然而,Cassandra CQL 表格面向行的存储方式使得把大量数据导入到 Spark 非常慢。FiloDB 充分利用了列存储的优势和 Apache Spark 的灵活性和丰富性,使得 Cassandra 的处理速度实现了 100 倍的提升。

此外,FiloDB 使用 Apache Spark SQL 和 DataFrame 作为其主要的查询机制。用户可以使用常见的 SQL 语法进行查询或者使用 Spark 的 JDBC 连接器链接 Tableau 等工具进行数据查询。同时,Spark 的机器学习 MLlib 库以及图形处理的 GraphX 都可以用到数据中。通过 Spark DataFrame 进行数据获取也非常容易。FiloDB 支持通过任何 JDBC 数据源、Parquet 和 Avro 文件、Cassandra 表等等进行数据获取。其中,还包括从 Spark Streaming 和 Apache Kafka 来插入数据。

在流应用方面,FiloDB 可以接受来自 Apache Kafka 的流事件、时间序列和 IoT 应用类型数据的一次性获取。而且,FiloDB 可以通过简单的 SQL 语句,完成极快速的特设分析。数据库中的每一行都有一个分割和排列键。使用相同键的写操作是幂等的。幂等写支持事件数据的一次完全存储。

最后,使用 Kafka+Spark+Cassandra+FiloDB 可以很好的实现整个 Lamba 架构。不需要 Cassandra 和 Hadoop 作为双重获取通道,使用 SMACK 栈(Spark/Scala,Mesos,Akka,Cassandra 和 Kafka)可以有效减少架构的资金投入。

目前,该开源项目已经放置在 GitHub 中。用户通过 git clone 下载后,可以直接启动filo-cli或者将其作为一个 Spark 数据源来使用。例如,通过下列命令即可验证数据集中的元数据:

复制代码
./filo-cli --command list --dataset gdelt

FiloDB 团队表示,非常希望用户能够反馈在 Cassandra 和 Spark 使用的案例或者进行代码贡献。这些反馈可能会直接影响到 FiloDB 下一步的一些特性。


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015 年 11 月 05 日 18:003678
用户头像

发布了 268 篇内容, 共 99.3 次阅读, 收获喜欢 14 次。

关注

评论

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

Spock单元测试框架实战指南五 - void方法测试

Java老k

Java 单元测试 spock

可见性是什么?(通俗易懂)

叫练

volatile JMM 多线程 synchronized

重点人员管控系统开发方案,微警务系统搭建app

WX13823153201

重点人员管控系统开发

GO 训练营第 3 周总结

Glowry

为什么删除数据后,Redis内存占用依然很高?

Java架构师迁哥

为什么要有 Servlet ,什么是 Servlet 容器,什么是 Web 容器?

yes的练级攻略

tomcat Web Servlet

如何预防勒索攻击事件?这份安全自查指南请查收

京东智联云开发者

数据安全 数据加密 系统安全

学习笔记3

Qx

最值得Deepin的思维模型“组合创新” | 技术人应知的创新思维模型 (3)

Alan

创新 思维模型 28天写作营

密码学系列之:明文攻击和Bletchley Park

程序那些事

加密解密 密码学 程序那些事 明文攻击

Java并发编程:进程、线程、并行与并发

码农架构

Java并发

只谈链不谈币,区块链会发展成什么样的方向?

CECBC区块链专委会

区块链

在构造函数中调用其它构造函数会有什么问题吗?

jiangling500

Java c++ C++11 构造函数

有钱还APP系统开发|有钱还软件开发(现成)

开發I852946OIIO

系统开发

摄像机不智能,基本等于不讲武德

脑极体

架构作业--大数据

Nick~毓

roblox mini map

katichar

C++typename的由来和用法

良知犹存

c++

生产环境全链路压测建设历程第四篇 技术体系的发力

数列科技杨德华

架构词典:质量

lidaobing

架构 质量管理

第三周作业

走走,停停……

分布式时序数据库DolphinDB与InfluxDB对比测试报告

DolphinDB

数据库 Influxdb 性能测试 大数据技术 DolphinDB

四面阿里终于如愿拿到P7级offer【Java岗】,分享面经与面试资料

Crud的程序员

Java 程序员 java面试

Mock | 拦截ajax的两种实现方式

梁龙先森

Java 前端 前端进阶

区块链技术生态持续优化,五大趋势不容忽视

CECBC区块链专委会

区块链 场景应用

架构师训练营第十二周作业

我是谁

极客大学架构师训练营

Norns.Urd 中的一些设计

八苦-瞿昙

C# 随笔 随笔杂谈 aop

如何使用 JuiceFS 在云上优化 Kylin 4.0 的存储性能?

苏锐

大数据 kylin 性能优化 JuiceFS

第四章作业

走走,停停……

区块链打破数字医疗桎梏,赢数据未来新生

CECBC区块链专委会

区块链 医疗

话题讨论 | 说说那些"Oh my god"的时刻

Kurtis Moxley

话题讨论

FiloDB:用于大数据分析的分布式数据库-InfoQ