gpt4 book ai didi

python - 关系/时间序列数据库和非常大的 SELECT 查询

转载 作者:行者123 更新时间:2023-12-04 15:23:14 24 4
gpt4 key购买 nike

我需要在数据库中存储大量结构化记录(可能是数千亿)。数据将由许多传感器以高插入率(高达 10 万行/秒)连续写入。

数据结构良好,似乎很适合 Postgres 等结构化数据库。但是,恐怕性能不足以满足需要摄取的数据量。

此外,我不需要关系数据库的所有功能(不需要完整的 SQL 支持)。数据将被写入一次,并使用基本查询以大块的形式读取几次,例如:

SELECT time, value FROM data WHERE time>1000 AND time<2500 AND sensor_location="home" ORDER BY time

即,为给定传感器(或一组传感器)选择两个时间戳之间的所有记录。 我不需要任何进行复杂查询(例如连接或更新)的能力。 ORDER BY 子句很重要,因为我需要能够按照它们编写的顺序处理这些消息(使用 Python 脚本)。这些查询通常会返回很多行,而且通常太大而无法放入 RAM。此外,由于大多数 RDBMS 基于文本的线路协议(protocol),即使我拆分查询,返回那么多行的速度也非常慢。

这似乎是时间序列数据库(如 InfluxDB)的一个很好的用例。然而,它的开源版本不容易分发(在我的案例中,这是弹性和可伸缩性的要求),而且我的测试表明,当涉及到大型查询时,它的性能不够好(特别是,它的有线协议(protocol)是太慢了,无法有效地传输这么多行 - 有时甚至在查询返回太多行时崩溃)。

我最近了解了 Clickhouse,它具有横向可扩展性和高性能。它有一个二进制/压缩线路协议(protocol),其中一个 Python 驱动程序 (clickhouse_driver) 有一个 execute_iter 函数,可以避免在进行这些大型查询时耗尽客户端的 RAM。但是,我非常担心它的弹性(在我的用例中不能容忍数据损坏),因为它是相当新的并且用户群有限。

我知道我的用例非常具体。还有其他我应该注意的免费/开源选项吗?

最佳答案

看起来您的案例是 ClickHouse 的典型案例请使用 ReplicatedMergeTree 表引擎 https://clickhouse.tech/docs/en/engines/table-engines/mergetree-family/replication/

关于python - 关系/时间序列数据库和非常大的 SELECT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62854018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com