平时项目使用的都是 mysql 数据库,少数时候会用到 mariadb,而至于时序数据库那基本没用过。而现在,对于一些监控数值需要更高的写入效率,查询效率,所以想着迁移到时序数据库上。
搜了一下,推荐的基本都是 timescadb:
TimescaleDB 是一个基于 PostgreSQL 的开源时序数据库扩展。它将 PostgreSQL 的强大功能与时序数据的优化存储和查询相结合,特别适合处理时间序列数据(如传感器数据、监控数据、金融数据等)。TimescaleDB 提供了高性能的时序数据存储、压缩、自动分区(hypertables)和高效的查询功能。
以下是关于 TimescaleDB 的详细介绍,以及如何在 Django 项目中集成和使用它。
TimescaleDB 的核心特性
- 基于 PostgreSQL:
- TimescaleDB 是 PostgreSQL 的扩展,因此你可以使用 PostgreSQL 的所有功能(如 ACID 事务、SQL 语法、JSONB 支持等)。
- 兼容现有的 PostgreSQL 工具和生态系统。
- Hypertables:
- TimescaleDB 引入了 hypertables,这是一种自动分区的表结构,专门为时序数据优化。
- 数据按时间维度自动分区,支持高效的数据插入和查询。
- 时间序列优化:
- 支持高效的时间范围查询、降采样(downsampling)、数据压缩和连续聚合(continuous aggregates)。
- 提供专门的时序函数和窗口函数。
- 可扩展性:
- 支持分布式架构(TimescaleDB 2.0+),可以水平扩展以处理大规模数据。
- 开源:
- 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', },
8 comments
咦,刚好看到你这篇文章,我在公司项目中准备用 influxDB,也是时序数据库,用户使用量比你这个大几倍,不知道对比如何,搜了一下
pg 的好处是支持关系型数据库的语法。influxDB 应该可以,我也没对比过。
嗯?mariadb 跟 mysql 是一个东西啊,各种意义上的。
瞎说,名字不一样~~
又搞新项目了?
瞎折腾而已 嘎嘎
这组深灰小背心主题图还蛮多的
嗯嗯