django TimescaleDB

平时项目使用的都是 mysql 数据库,少数时候会用到 mariadb,而至于时序数据库那基本没用过。而现在,对于一些监控数值需要更高的写入效率,查询效率,所以想着迁移到时序数据库上。

搜了一下,推荐的基本都是 timescadb:

TimescaleDB 是一个基于 PostgreSQL 的开源时序数据库扩展。它将 PostgreSQL 的强大功能与时序数据的优化存储和查询相结合,特别适合处理时间序列数据(如传感器数据、监控数据、金融数据等)。TimescaleDB 提供了高性能的时序数据存储、压缩、自动分区(hypertables)和高效的查询功能。

以下是关于 TimescaleDB 的详细介绍,以及如何在 Django 项目中集成和使用它。


TimescaleDB 的核心特性

  1. 基于 PostgreSQL
    • TimescaleDB 是 PostgreSQL 的扩展,因此你可以使用 PostgreSQL 的所有功能(如 ACID 事务、SQL 语法、JSONB 支持等)。
    • 兼容现有的 PostgreSQL 工具和生态系统。
  2. Hypertables
    • TimescaleDB 引入了 hypertables,这是一种自动分区的表结构,专门为时序数据优化。
    • 数据按时间维度自动分区,支持高效的数据插入和查询。
  3. 时间序列优化
    • 支持高效的时间范围查询、降采样(downsampling)、数据压缩和连续聚合(continuous aggregates)。
    • 提供专门的时序函数和窗口函数。
  4. 可扩展性
    • 支持分布式架构(TimescaleDB 2.0+),可以水平扩展以处理大规模数据。
  5. 开源
    • TimescaleDB 是开源的,社区版免费使用,企业版提供额外的高级功能。

而这个东西也提供了一个 django 的粗件:https://pypi.com.cn/project/django-timescaledb/

网上搜一下相关的文章都简单的 1b,但是如果简单的按照文章中的内容操作,很可能直接就卡在数据库连接上了。

建议在开始配置之前不要安装任何的 postgresql 数据库以及客户端,直接参考官方文档:https://docs.timescale.com/self-hosted/latest/install/installation-macos/#install-and-configure-timescaledb-on-postgresql

在开发电脑以及服务器上都要安装相关的postgresql timescaledb插件。否则就会提示找不到相关的组件。

postgres=# CREATE EXTENSION IF NOT EXISTS timescaledb;
ERROR:  could not open extension control file "/usr/share/postgresql/12/extension/timescaledb.control": No such file or directory

同样在开发电脑上也要安装相关的组件,如果安装了其他版本的postgresql删除掉旧版本,或者直接全新安装。

执行下面的命令创建用户以及数据库:

sudo -i -u postgres
psql
CREATE USER data_db WITH PASSWORD '1qaz@WSX';
CREATE DATABASE data_db OWNER data_db;

修改配置文件,让 data_db 用于允许远程登录:

vim /etc/postgresql/12/main/pg_hba.conf
host    data_db             data_db             0.0.0.0/0   md5
root@2gcc5hbhemlhjejc:~# sudo service postgresql restart

创建扩展,并且查看加载情况:

postgres=# CREATE EXTENSION IF NOT EXISTS timescaledb;
CREATE EXTENSION
postgres=# \dx
                                                List of installed extensions
    Name     | Version |   Schema   |                                      Description                                      
-------------+---------+------------+---------------------------------------------------------------------------------------
 plpgsql     | 1.0     | pg_catalog | PL/pgSQL procedural language
 timescaledb | 2.17.2  | public     | Enables scalable inserts and complex queries for time-series data (Community Edition)
(2 rows)

如果看到timescaledb 就表示成功了:

安装相关的组件之后,如果要在 django 中使用,还需要安装psycopg2,不建议安装psycopg2-binary因为安装这个东西,在 mac 下同样会爆上面的错误。psycopg2  需要编译安装,安装过程可能会提示找不到 ssl 库,通过brew info openssl 定位 ssl 库位置。

brew info openssl
==> openssl@3: stable 3.4.0 (bottled)
Cryptography and SSL/TLS Toolkit
https://openssl-library.org
Installed
/opt/homebrew/Cellar/openssl@3/3.4.0 (7,236 files, 33.4MB) *
  Poured from bottle using the formulae.brew.sh API on 2024-11-22 at 09:36:14
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/o/openssl@3.rb
License: Apache-2.0
==> Dependencies
Required: ca-certificates ✔
==> Caveats
A CA file has been bootstrapped using certificates from the system
keychain. To add additional certificates, place .pem files in
  /opt/homebrew/etc/openssl@3/certs

and run
  /opt/homebrew/opt/openssl@3/bin/c_rehash
==> Analytics
install: 318,996 (30 days), 1,205,908 (90 days), 4,903,860 (365 days)
install-on-request: 39,060 (30 days), 168,471 (90 days), 637,515 (365 days)
build-error: 6,326 (30 days)

修改.bash_prfile文件添加上述位置:

export LDFLAGS="-L/opt/homebrew/Cellar/openssl@3/3.4.0/lib"
export CPPFLAGS="-I/opt/homebrew/Cellar/openssl@3/3.4.0/include"

再次执行source ~/.bash_profile & pip install psycopg2即可。

剩下的就可以按照https://pypi.com.cn/project/django-timescaledb/里面的步骤实施了。

相关示例工程:https://gitcode.com/gh_mirrors/dj/django-timescaledb

注意连接引擎为timescale.db.backends.postgresql:

'ENGINE': 'timescale.db.backends.postgresql',
        'NAME': 'data_db',
        'USER': 'data_db',
        'PASSWORD': '1qaz@WSX',
        'HOST': '113.125.1.1',
        'PORT': '5432',
    },

 

 

☆版权☆

* 网站名称:obaby@mars
* 网址:https://obaby.org.cn/
* 个性:https://oba.by/
* 本文标题: 《django TimescaleDB》
* 本文链接:https://obaby.org.cn/2025/01/19012
* 短链接:https://oba.by/?p=19012
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

8 comments

  1.  Level 6
    Microsoft Edge 131 Microsoft Edge 131 Windows 11 Windows 11 cn中国–广东–珠海 电信

    咦,刚好看到你这篇文章,我在公司项目中准备用 influxDB,也是时序数据库,用户使用量比你这个大几倍,不知道对比如何,搜了一下

    1. 公主 Queen 
      Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn中国–山东–青岛 联通

      pg 的好处是支持关系型数据库的语法。influxDB 应该可以,我也没对比过。

  2.   Level 7
    Google Chrome 132 Google Chrome 132 Mac OS X 10.15 Mac OS X 10.15 cn中国–浙江–杭州 联通

    嗯?mariadb 跟 mysql 是一个东西啊,各种意义上的。

  3. Level 6
    Google Chrome 109 Google Chrome 109 Windows 10 Windows 10 cn中国–上海–上海 腾讯云

    这组深灰小背心主题图还蛮多的

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注