Hbase 访问速度非常快的大数据

Hbase 访问速度非常快的大数据,hbase,phoenix,influxdb,opentsdb,kairosdb,Hbase,Phoenix,Influxdb,Opentsdb,Kairosdb,我面临一个问题:加工厂数据库。最多有50000个传感器,采样率为50 ms。所有测量值需要存储至少3年,并且必须支持实时查询(即用户可以看到延迟小于1秒的历史数据)。我最近读了一篇关于的文章,有很多选择:OpenTSDB、KairosDB、InfluxDB 我不知道哪一个适合这个目的?任何人知道这件事,请帮帮我 更新15.06.25 今天我运行了一个基于OpenTSDB的测试。我使用Virtual Box创建了一个由3个CentOS x64虚拟机(1个主虚拟机,2个从虚拟机)组成的集群。主机配置

我面临一个问题:加工厂数据库。最多有50000个传感器,采样率为50 ms。所有测量值需要存储至少3年,并且必须支持实时查询(即用户可以看到延迟小于1秒的历史数据)。我最近读了一篇关于的文章,有很多选择:OpenTSDB、KairosDB、InfluxDB

我不知道哪一个适合这个目的?任何人知道这件事,请帮帮我

更新15.06.25

今天我运行了一个基于OpenTSDB的测试。我使用Virtual Box创建了一个由3个CentOS x64虚拟机(1个主虚拟机,2个从虚拟机)组成的集群。主机配置为8 GB RAM,核心为i5。主虚拟机配置为3 GB RAM,从虚拟机配置为1.5 GB RAM。我编写了一个python程序,将数据发送到OpenTSDB,如下所示:

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.10.55", 4242))

start_time = time.time()
start_epoch = 1434192418;

for x in range(0, 1000000):
    curr_epoch = start_epoch + x

    tag1 = "put TAG_1 %d 12.9 stt=good\n" % (curr_epoch)
    tag2 = "put TAG_2 %d 12.9 stt=good\n" % (curr_epoch)
    tag3 = "put TAG_3 %d 12.9 stt=good\n" % (curr_epoch)
    tag4 = "put TAG_4 %d 12.9 stt=good\n" % (curr_epoch)
    tag5 = "put TAG_5 %d 12.9 stt=good\n" % (curr_epoch)
    tag6 = "put TAG_6 %d 12.9 stt=good\n" % (curr_epoch)
    tag7 = "put TAG_7 %d 12.9 stt=good\n" % (curr_epoch)
    tag8 = "put TAG_8 %d 12.9 stt=good\n" % (curr_epoch)
    tag9 = "put TAG_9 %d 12.9 stt=good\n" % (curr_epoch)
    tag10 = "put TAG_10 %d 12.9 stt=good\n" % (curr_epoch)
    str = tag1 + tag2 + tag3 + tag4 + tag5 + tag6 + tag7 + tag8 + tag9 + tag10

    s.send(str)

print("--- %s seconds ---" % (time.time() - start_time))
我在主机上运行python,大约220秒后工作就完成了。所以,我得到了每秒45000条记录的平均速度

更新15.06.29


这次我只使用了1个VM(5 GB RAM,3个内核,CentOS x64,伪分布式Hadoop)。我在Windows7主机上运行了2个python进程,将2部分数据发送到OpenTSDB。数据的平均写入速度约为每秒100000条记录。

要处理每秒数百万次的写入,您需要进行一些认真的工程

并非所有数据库都能够以紧凑的形式存储如此数量的数据

例如,ATSD根据观察到的差异,每个样本使用5到10个字节(浮点数据类型)

有一种基于HBase构建的分布式(群集)数据库能够处理这种负载

例如,您可以尝试查看和

更新1。

我们为您的特定用例运行了以下测试:

30000个模拟传感器写入浮点型数据,产生540.000.000条记录

20.000个数字传感器写入短类型数据(0和1),产生552.000.000条记录

数据占用了3.68千兆字节。压缩是无损的

导致平均每个记录3.37字节

这是一个存储效率测试


完全公开,我为开发ATSD的公司工作。

目前,XDB不会持续每秒处理一百万次写入,但这在今年晚些时候的性能目标范围内。我认为更大的挑战是要存储的数据量。如果您需要在不进行下采样的情况下保持三年的完整分辨率,则需要数百TB的数据。如果这还不完全在SSD上,那么查询性能将不好。如果这些都在SSD上,那么这是一个非常昂贵的数据库。而且,有了这么多的原始数据,无论安装了多少,都很容易创建一个爆炸RAM的查询


我想说,在8-12周内与XDB团队联系,我们可能会更好地了解如何处理您的问题。不过,我的建议是找到一种方法将其分开。如果您真的要以50毫秒的间隔对5万台机器进行采样,那么这将是一个巨大的数据量、网络流量等。

MemSQL每秒可以处理1百万次写入。为此,我建议使用Kafka和MemSQL列存储。根据查询的类型,亚秒响应是非常可能的。

非常复杂的用例

我不能代表其他人说话,因为我只强烈评价和使用KairosDB&Cassandra,但我可以谈谈我自己的经验

KairosDB+Cassandra可以承受吞吐量,但对于每秒1M的写操作,您需要一个具有多个前端(我建议至少有10个节点,但您必须进行测试)和后端服务器(如果需要,可以将它们放在同一位置)的集群

无论如何,每个传感器每秒200个样本的吞吐量。。。检索历史数据对于长时间查询可能是一个问题(历史数据的1s很有趣,但您必须确定查询持续时间的样本量)

据我所知,存储效率不会像ATSD那么糟糕(可能是大小的两倍,这已经很好了)


我个人喜欢KairosDB&Cassandra,以及我们采用它的原因:它简单,真正分布式,KairosDB不会弄乱数据,设计优雅,不涉及复杂系统,Cassandra管理数据,KairosDB提供TSDB服务,性能和效率一点也不差。。。此外,Cassandra作为一个集群比它的对等集群更容易管理。

我想你会得到更好的答案:如果每个样本是1字节,大约是100 TB。如果时间序列是规则的,可能会小于100 TB,也就是说,50毫秒的速率是固定且有保证的,并且数据折叠是通过典型的historian压缩算法实现的,例如摆动门和重复值的重复数据消除。许多值将保持不变,因为物理状态不会发生变化,这通常是因为存在有意义的精度限制。你能分享数据集的一部分吗?例如,指标/传感器类型的列表?@SergeiRodionov我们有两种类型的值:数字和模拟。在一个工艺装置中,大约有30000个模拟传感器和20000个数字传感器。通常,模拟信号的采样率为50 ms,数字信号的采样率为1秒或更长。但是,如果测量值没有改变(与以前的测量值相比)->我们不需要存储(这就是我们一直在做的)。每个样本由时间戳(毫秒精度)、标记ID(2个字节)和值(模拟信号为4个字节,数字信号为1个字节)组成。如果将Hbase批处理在一起并分布在一组机器上,则Hbase应该能够处理数百万个小样本。但是,如果你想尽快获得数据,那么它将更具挑战性。是的。在加工厂(如热电厂),50个传感器是正常情况(如我所知)。根据信号类型(模拟和数字),采样率在50毫秒到几秒钟之间。Th