我正在评估具有以下要求的传感器数据收集系统,
- 100万个端点每分钟发送100字节的数据(作为时间序列)。
-
基本上是数百万次对存储的小写操作。
This data is write-once, so basically it never gets updated.
- 访问要求
a.用户的完整数据需要定期访问(频率较低)
b.用户的部分数据需要定期(更频繁)访问。例如,我需要过去一小时/一天/一周/一个月收集的传感器数据进行分析/报告。
已经开始考虑Hive/HDFS作为一个选项。有人能评论一下Hive在这样一个用例中的适用性吗?我担心的是,虽然分布式存储需求可以工作,但它似乎更适合数据仓库应用程序,而不是实时数据收集/存储。
HBase/Cassandra在这种情况下更有意义吗?
我认为HBase可能是一个很好的选择。事实上,在HBase中已经有一个开源的实现,它可以解决类似的问题,您可能会想使用它。看看openTSB,它是一个解决类似问题的开源实现。以下是他们简介的一小段摘录:
OpenTSDB是一个分布式的、可扩展的时间序列数据库(TSDB)。写在HBase之上。OpenTSDB是为了解决一个公共的需要:存储,索引和服务指标收集从计算机系统(网络设备,操作系统,应用程序),以及使这些数据易于访问和绘制。多亏了HBase可扩展性,OpenTSDB允许您收集数千个指标从成千上万的主机和应用程序中,以很高的速率(每几个秒)。OpenTSDB永远不会删除或下采样数据,可以很容易地存储数十亿个数据点。事实上,StumbleUpon使用它可以跟踪成千上万的时间序列和收集在他们的主要生产中,每天有超过6亿个数据点数据中心。
实际上有相当多的人用Cassandra以时间序列的方式收集传感器数据。非常合身。我建议您阅读这篇关于Cassandra中基本时间序列的文章,以了解您的数据模型是什么样的。
Cassandra中的写操作非常便宜,因此即使是中等大小的集群也可以轻松地处理每分钟100万次写操作。
您的两个读查询都可以非常有效地回答。对于第二种类型的查询,您正在读取单个传感器的一段时间的数据,您最终会从单行读取连续的切片;这需要大约10ms来完成一次完全的冷读取。对于第一种类型的查询,您只需并行运行几个每个传感器的查询。假设您存储了用户到传感器id的基本映射,您将使用一个查询查找用户的所有传感器id,然后您的第二个查询将获取所有这些传感器的数据(尽管如果传感器数量很高,您可能会中断此查询)。
当你谈论实时查询时,Hive和HDFS并不真正有意义,因为它们更适合长时间运行的批处理作业。