访问速度非常快的大数据

duo*_*gja 8 hbase phoenix opentsdb kairosdb influxdb

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

我很困惑哪一个适合这个目的?任何人都知道这个请帮助我!

更新15.06.25

今天我运行一个基于OpenTSDB的测试.我使用Virtual Box创建了一个由3个CentOS x64 VM组成的集群(1个主服务器,2个从服务器).主机配置为8 GB RAM,核心i5.主VM配置为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))
Run Code Online (Sandbox Code Playgroud)

我在主机上运行python,工作在~220秒后完成.所以,我得到了平均值.速度约为每秒45000条记录.

更新15.06.29

这次我只使用了1个VM(5 GB RAM,3个内核,CentOS x64,伪分布式Hadoop).我在Windows 7主机上运行2个python进程,将两半数据发送到OpenTSDB.平均 放置数据的速度是每秒约100,000条记录.

The*_*rrr 2

为了处理每秒百万次的写入,您需要进行一些认真的工程设计。

并非所有数据库都能够以紧凑的形式存储这么多数据。

例如,ATSD 每个样本使用 5 到 10 个字节(浮点数据类型),具体取决于观察到的方差。

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

例如,您可以尝试查看openTSDBATSD

更新1。

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

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

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

数据占用3.68 GB。压缩是无损的。

结果平均每条记录 3.37 字节。

这是一个存储效率测试。

坦白说,我在开发 ATSD 的公司工作。