Pipelinedb是什么?

因为这是PipelineDB Advent Calendar的第一天,所以我会简要地介绍一下这个流式处理数据库。顺便说一下,我还没有在生产环境中使用PipelineDB,我的Advent Calendar的投稿更多是为了进行生产环境投入的调查。

为什么需要流处理?

随着fluentd等日志收集器的发展,昨今Web系统生成的事件数据和日志数据等被保存在各种数据存储中并得以利用。这些数据的规模有时候可能达到每天几亿行,但在利用这些数据时,即使仅仅是提取和整理数据,然后导入到数据库中,也需要一定的成本和时间。
为了解决这类问题,人们常常使用Hadoop系列的产品、Redshift、BigQuery等列式数据库。通过使用这些产品,例如在一天结束时遍历并统计所有日志,这样的处理过程就不再像以前那么困难。
然而,在只需要对流动数据进行5分钟的汇总并将其反馈给系统的处理过程中,即使使用了这些产品,也经常无法满足要求,或者说存储成本不划算。
例如,在广告服务器开发中,为了快速测试未知商品的点击率并将其用于适当的投放,对日志数据进行尽快的分析和反馈是必不可少的。
在这种情况下,流式处理被视为一种需要的机制。如果使用流式处理,只需在内存中(或者在某些情况下是在磁盘上)保留指定时间框架或数量的日志数据,并能够在小型存储中执行所需的处理。

在这些用途中,Norikra、Apache Kafka和Amazon Kinesis等产品经常被使用。而PipelineDB则提供了与这些产品类似的流处理机制。

流水线数据库

概述

官方网站:https://www.pipelinedb.com/
Github地址:https://github.com/pipelinedb/pipelinedb
文档:http://docs.pipelinedb.com/introduction.html
介绍文章:http://jp.techcrunch.com/2015/07/08/20150707yc-alum-pipelinedb-releases-open-source-streaming-sql-database/

PipelineDB是一个能够通过类似于PostgreSQL的查询语句向流数据提问的数据库。通过将大量流入系统的数据导入PipelineDB,可以实现针对一定时间范围内数据的SQL查询。例如,可以持续聚合并统计最近N小时内的点击事件数量等处理。

通过创建名为ContinuousView的机制来保存流数据的聚合结果,而不保留流数据本身,因此不需要太多的数据库空间。

PipelineDB is designed to excel at SQL queries that reduce the cardinality of streaming datasets.

这句话展示了PipelineDB的特点,重点是减少流入数据的基数并保留它们。同时,由于可以使用SQL完成从流数据的引入到聚合的所有操作,可以更简化ETL(抽取、转换和加载)工作。从减轻ETL的困扰的意义上来说,与Fluentd领域相似,它们可能具有良好的兼容性。此外,最近似乎已经出现了与kafka的连接器,我认为今后还将配备这些连接器。LINK

顺便提一下,PipelineDB的开发者Derek Nelson先生原本在AdRoll公司从事广告开发工作。

为什么要使用PipelineDB?

本次选择PipelineDB的主要原因是其SQL语法与PostgreSQL兼容。
由于在实际工作中经常使用Redshift,并且考虑到像所谓的Lambda架构那样容易结合最近数据和长期数据进行分析,感觉这样的优点非常有利。
此外,由于数据可以通过PostgreSQL进行输入,与fluentd以及其他各种语言的协作也更加容易,这也是其魅力所在。
另外,该开发是非常活跃的,并且我们期待今后与其他产品的协作能够得到加强。

关于下次我负责的部分

在下一期的Advent Calendar中,我计划使用官方提供的样本数据来实际使用PipelineDB。