FiloDB调研:简介,结构和性能分析

FiloDB概念

FiloDB是开源分布式,版本化和列式分析数据库,支持Spark SQL查询和流的构建的数据库。

存储引擎和计算层

FiloDB使用Apache Cassandra作为其存储引擎,使用Apache Spark作为其计算层。Apache Cassandra作为一套开源分布式Key-Value存储系统,具有分布式、基于column的结构化和高可扩展性等特点。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语句,完成极快速的特设分析。数据库中的每一行都有一个分割和排列键。使用相同键的写操作是幂等的。幂等写支持事件数据的一次完全存储。

FiloDB特点

作为一种OLAP(联机分析处理),FiloDB可以获取机器数据、事件数据和时间序列数据等各种类型的流数据,然后进行非常快速的分析查询。其主要特点包括:
(1)分布式,FiloDB在设计之初便考虑其底层平台为Apache Cassandra等分布式存储平台。因此,FiloDB支持Apache Spark采用并行查询的方式来加速分析。
(2)列存储,FiloDB通过使用带有字典压缩等节省空间技术的列存储来带来性能的提升。其性能与Parquet不相上下,比运行在Cassandra 2.x上的Spark要快1到2个数量级。

(3)版本化,FiloDB增量的增加一列或者若干行作为一个新的版本。相比于基于文件的技术,FiloDB提供更多的灵活性,使得回滚操作变得简单。

 

体系结构

FiloDB的体系结构由下图组成:

 

协调组件Coordinator

为核心组件提供面向客户端的高级接口,并管理MemTable,Reprojector,刷新和列存储数据源。处理不同类型的流式数据的输入。

Spark和CLI等客户端实现了扩展RowSource特性的源角色 。RowSource与NodeCoordinatorActor(每个节点一个)进行通信,以建立流式传输并发送数据行。 RowSource重试它没有接收到的行,Ack这样至少一次摄取,并且内置背压,不要试图发送太多的不存在的行。在NodeCoordinatorActor又创建一个DatasetCoordinatorActor处理memtables的状态针对每个(数据集,版本)对,背压,以及冲洗memtables到列存储。

核心Core

这些组件构成了FiloDB的核心部分,可跨数据存储进行移植。

摄入的行来自DatasetCoordinatorActor一个MemTable,其中目前只有一个实现,即FiloMemTable。MemTables拥有足够的行,因此可以有效地分块。MemTables刷新到使用的列存储Reprojector基于调度由设置的策略DatasetCoordinatorActor。MemTableSegments形式的行(请参阅Segment.scala)并附加到ColumnStore。

核心模块有一个InMemoryColumnStore,一个ColumnStore用于测试和低延迟内存Spark查询的完整实现。

在读取方面,ColumnStoreScanner包含用于读取使用各种ScanMethods的段和行的API - 有单个分区查询的查询,使用自定义过滤函数跨越多个分区的查询等。KeyFilter中的帮助器函数帮助为过滤扫描组合函数。

所有ColumnStore和MetaStoreAPI都是Scala Future,充分利用CPU和非阻塞行为。

FiloDB数据集包含一个或多个投影,每个投影包含列。该MetaStore定义为并行数据集上,投影,和列元数据读取/写入/更新的API。每个列都有ColumnType一个KeyType。 KeyType是为每种类型的列/键定义序列化和提取的基本类型类。大多数FiloDB在很大程度上依赖于RichProjection,它包含分区,行和段密钥列及其列KeyType。

 

关于FiloDB的性能分析

广泛的存储成本和查询速度

下图总结了不同的Cassandra存储选项以及Parquet。更靠右的表示更高的存储密度,更高的图表表示更快的查询速度。

 

以下是分析中使用的不同参与者的简要介绍:
规律的Cassandra 2.x CQL表,在窄(每个分区一个记录)和宽(分区和集群键,每个分区有多个记录)配置
紧凑的存储表,Cassandra 0.6版本
在Spark SQL中缓存Cassandra表
FiloDB,一个建立在C *和Spark上的分析数据库
Parquet,参考标准。
如图所示的存储效率和查询速度范围很广,从底部的CQL表到FiloDB,扫描速度比Parquet快5倍,而且几乎可以实现高效的存储。上面的图表在两个轴上都有一个对数刻度。此外,本文不会涵盖人们将选择CQL表的许多其他因素,例如支持建模地图,集合,列表,自定义类型以及许多其他因素其他事情。
细节见链接
点击打开链接


写在后面:这是我之前做的一些技术初步调研,主要目的是了解和展示一些技术,并进行了一些个人总结,其中必然有疏漏。其中引用了不少论文,百科和他人博客,但因为时间太久大都忘了出处,如果侵权提示后删除

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值