作者:Carlota Soto
时间序列数据库 InfluxDB 在过去几年中在开发人员和公司中获得了相当大的吸引力。然而,Influx Data(该数据库背后的公司)做出了引发开发人员社区一些波澜的 questionable product decisions。
在这篇文章中,我们讨论了一些您可能想要考虑的 InfluxDB 替代方案,如果您正在寻找另一个用于时间序列数据的数据库。作为 Timescale 的开发人员,我们认为 Timescale 是 InfluxDB 的一个很好的替代方案——让我们分享八个理由,说明为什么我们认为您应该尝试一下它。
第一个原因很简单。PostgreSQL 是开发人员最喜欢的数据库,其用户群不断增长,并且拥有一个充满活力的社区。经过 35 年多的发展,使用 PostgreSQL 简直是一个明智的战略选择。专用数据库往往来来往往,但 PostgreSQL 却始终如一。
说实话:数据库总会在一定程度上将您锁定——没有人希望每年都迁移数据库。如果您被迫将应用程序的成功与数据库联系起来,那么请选择 PostgreSQL,这是一项您知道可以信赖的技术(并且不会消失)。
Timescale 与 PostgreSQL 不兼容——它是 PostgreSQL。我们的核心数据库 TimescaleDB 作为 PostgreSQL 扩展构建,这意味着使用 Timescale 的体验与使用 PostgreSQL 完全相同——对您的时间序列数据进行了性能提升。当您或您的应用程序与 Timescale 数据库交互时,它们与 PostgreSQL 数据库交互。
Timescale 的幕后是 PostgreSQL,这带来了巨大的实际优势。例如,如果您已经使用 PostgreSQL,那么您的“时间序列数据库体验”将仅限于您的时间序列表(称为超表),您可以将这些表存储在与其他数据相同的数据库中。
在您的超表中,您将获得对时间序列的额外性能提升(通过自动分区、优化过的物化视图、查询计划程序改进、列式压缩 以及许多其他功能),而不会影响常规 PostgreSQL 表的功能。
这种交互很好地概括了它:
Timescale 使您可以使用一个统一的数据库环境,时间序列和常规数据在其中共存并相互补充。您可以使用 Timescale,而不是被迫管理、保护和维护两个不同的数据库系统所带来的运营开销,只需处理两种不同的表类型——常规 PostgreSQL 表和超表——它们都愉快地存在于同一个数据库中。
为了说明这一点,让我们构建一个受上面用户启发的场景。考虑一个应用程序,它使用 PostgreSQL 数据库,其中包含一个 `user` 表和一个 `device_reading` 表,用于存储来自传感器读数的时间序列数据。使用 TimescaleDB,这些表可以轻松地共存,并且由于统一的环境,您可以执行查询数据来自两个表的 SQL 查询。
-- A typical users table
CREATE TABLE users (
user_id SERIAL PRIMARY KEY,
username TEXT NOT NULL,
email TEXT NOT NULL
);
-- A Timescale hypertable for device readings
CREATE TABLE device_reading (
time TIMESTAMPTZ NOT NULL,
user_id INT NOT NULL,
reading FLOAT NOT NULL
);
-- Convert the device_reading table into a hypertable
SELECT create_hypertable('device_reading', 'time');
-- Example of a query that joins data from the users and device_reading tables
SELECT users.username, avg(device_reading.reading) as average_reading
FROM users
INNER JOIN device_reading ON users.user_id = device_reading.user_id
WHERE device_reading.time > NOW() - INTERVAL '1 week'
GROUP BY users.username;
使用 PostgreSQL 的另一个直接优势是其查询语言。SQL 拥有悠久的历史,文档齐全,稳定 并且是专业开发人员中最常用的第三种语言。
对如何构造查询有疑问吗?全球数百万 SQL 社区开发人员随时准备帮助您。您需要向堆栈中添加新工具吗?您可以使用 SQL 生态系统中的所有第三方工具、连接器和可视化选项来轻松设置此集成。
学习新的专用查询语言(即使它可能很好!)与一个产品进行交互(并随后必须调整您的代码)不是利用时间的有效方式。 尤其是当该查询语言可能在该特定产品的不同版本之间发生变化时,比如 InfluxDB 的特殊情况。
在我们的经验(公平地说,主要与 InfluxDB 的 1.x 版本相关) 中,Timescale 在大多数查询中都优于 InfluxDB:
在我们的测试中,对于简单的汇总(即 GROUPBY
),Timescale 在具有 100 个和 4,000 个设备的配置中,每读间隔生成 10 个唯一指标时,表现出 InfluxDB 性能的 460%。
在聚合 100 个设备的八个指标时,Timescale 的性能是 InfluxDB 的 168%,而在聚合 4,000 个设备的八个指标时,性能是 168%。
对于按时间和其他维度(例如 GROUPBY
时间、deviceId)聚合指标的双重汇总,当聚合一个指标时,InfluxDB 表现出比 TimescaleDB 更好的性能。但是,随着聚合指标数量的增加,TimescaleDB 的性能比 InfluxDB 提高了 188%。
对于复杂查询,TimescaleDB 的性能远远超过 InfluxDB,并且支持更广泛的查询类型;这里的差异通常是几秒到几十秒,Timescale 表现出比 InfluxDB 提高 344-7,100% 的性能提升。
最后一点值得强调。拥有快速数据库是构建出色的应用程序的关键,但这还需要数据库的查询灵活度。SQL 提供了丰富而强大的查询功能——完整的 SQL 功能(结合 Timescale 的 SQL 函数库)使您能够用几行代码编写基于时间的分析查询,并以出色的性能运行它们,这正是传统时间序列数据库(如 InfluxDB)难以做到的。
可靠数据库的本质在于它保证数据完整性的承诺。虽然 InfluxDB 正在努力从头开始构建可靠性,但 Timescale 可以利用整个 PostgreSQL 社区多年来进行的艰苦、谨慎的工程工作,构建一个坚如磐石的数据库,该数据库支持全球数百万个关键任务应用程序。
在构建数据库时,让所有边缘情况都得到正确处理非常困难:每个数据库都会经历一个阶段,在这个阶段,事情会从实际经验中得到完善。PostgreSQL 的巨大优势是它在 1990 年代经历了这个阶段,而 InfluxDB 今天仍在摸索中。
鉴于 Timescale 的设计,我们能够利用 PostgreSQL 生态系统提供的经过严格测试的工具,包括用于高可用性和读副本的流式复制、用于增量备份和任意时间点恢复的pg_basebackup 和日志传输/流式传输、用于持续存档到云存储的pgBackrest 或WAL-E、用于连接池的pgBouncer 等等。
Timescale 在您的超表中实现的一个重要功能是列式压缩。 压缩显着减少了时间序列数据的存储空间,确保您可以在不看到存储成本成比例增加的情况下管理大量数据。这一点很重要,因为时间序列数据积累得很快——您今天可能不会为存储支付太多费用,但一旦您的应用程序增长,这种情况就会改变。
我们向PostgreSQL添加列式压缩的方法既创新又实用,它将Postgres表传统的基于行的存储方式转换为列式格式。Timescale使用针对每种数据类型专门的压缩算法,实现了超过90%的压缩率。最好的部分?查询速度也更快了,尤其是在压缩数据上进行的分析型查询,它可以从列式数据结构中获益。
"从我们的角度来看,压缩是一个改变游戏规则的东西:不再需要担心存储 5、10 或 15 TB 级别的数据库来存储这些信息,这对我们来说是一个巨大的因素[… ]。对于我们的一位大型客户来说,我们通常每天存储约 64 GB 的未压缩数据。使用压缩后,我们平均看到了 97% 的减少。” (来源)
继续讨论定价体验,您不希望您的数据库账单失控,也不希望它出现意外。在Timescale,我们提供一个基本的定价结构,没有定价陷阱或隐藏成本:月底,您将根据您的存储使用量和预配的计算资源付费。就这么简单。
我们与InfluxDB Cloud的体验截然不同。我们设置了一个小型服务来进行一些基准测试,我们预计的账单大约在 10-20 美元,但实际结果却接近 2000 美元。我们仍然不知道确切的原因。
最后,我们的世界一流的支持和客户成功团队可能是您尝试Timescale的最佳理由。我们仔细监控客户满意度,我们的分数非常接近每次都达到 100% 的客户满意度。以下只是我们经常从客户那里听到的一些赞扬:
"我对你们的客户支持服务只有赞不绝口。"
"支持无与伦比。我们期待将我们的基础设施迁移到 Timescale,并对我们在迁移过程中会得到的支持感到兴奋。”
"与支持团队的互动远远超出了我的预期。”
"我对我的体验以及 Timescale 提供的支持感到非常满意。这是一个共生关系:您为我提供解决方案,我提供见解来改进您的产品。”
“您可以简单地说,“阅读PostgreSQL手册”——但我感谢您给了我一些命令。”
"Timescale 支持是 A+。”
作为Timescale的客户,您可以与一位关心您成功的专家工程师坐在一起,而不仅仅是修复TimescaleDB问题。他们会就数据库设计、查询优化以及介于两者之间的所有内容为您提供建议。当您表现出色时,我们也会表现出色。
从InfluxDB迁移到Timescale的决定完全取决于您。要做出决定,您需要评估自己的优先级,以及您今天和未来用例的需求。选择数据库就像选择伴侣:你们会在一起很多年,所以请花点时间!
如果您对此感到好奇,请试用 Timescale。如果您已经在自己的硬件上运行PostgreSQL数据库,则可以简单地添加TimescaleDB扩展。如果您更喜欢在 AWS 中试用 Timescale,请在我们的平台上创建一个免费帐户。这只需要几秒钟,无需信用卡。