我面临一个问题:过程工厂的数据库。在 50 ms 的采样率下,最多有 50,000 个传感器。所有测量值至少需要存储3年,并且必须支持实时查询(即用户可以看到延迟小于1秒的历史数据)。我最近读了一篇关于时序数据库的文章,手头有很多选择:OpenTSDB、KairosDB、InfluxDB、...
我很困惑哪一个适合这个目的?任何知道这一点的人请帮助我!
更新 15.06.25
今天我运行一个基于 OpenTSDB 的测试。我使用 Virtual Box 创建了一个由 3 个 CentOS x64 虚拟机(1 个主设备,2 个从设备)组成的集群。主机配置为 8 GB RAM,核心 i5。主 VM 配置为 3 GB RAM,从属 VM 配置为 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)。我在 Windows 7 主机上运行 2 个 python 进程,将 2 半数据发送到 OpenTSDB。平均 放置数据的速度约为每秒 100,000 条记录。