HomeAssistant从零开始折腾(二) - 使用TimeScaleDB替换默认数据库
背景
HomeAssistant默认使用SQLite作为数据库,虽然对于小规模的家庭智能系统来说,SQLite已经足够了,但是随着设备数量的增加,SQLite的性能会逐渐变差,所以有必要考虑使用其他数据库来承载这些日益增长的数据。
HA支持多种数据库,包括:
- SQLite
- MariaDB
- MySQL
- PostgreSQL
默认情况下,HA使用SQLite,文件存储在config目录下的home-assistant_v2.db文件中,如果你的系统已经运行了一段时间,这个文件可能会变得很大,而且SQLite的性能也会逐渐变差。
TimeScaleDB
本着折腾的原则(不是),我们考虑替换默认的数据库,HA的数据存储服务由recorder集成提供,我们可以通过修改configuration.yaml来指定使用其他数据库,这里我选择了TimeScaleDB。
在官方论坛翻了很久,想找找看有没有人测试过各种数据库之间的性能,最后发现他们好多人会推荐TimeScaleDB。
TimeScaleDB是一个基于PostgreSQL的时序数据库,专门用于存储时间序列数据,它的性能和扩展性都非常好,还是挺适合用来存储HA的数据的。
安装
这里假设你在合适的地方有Docker环境,执行以下命令运行一个新的timescaledb容器:
1 | docker run -d \ |
默认的用户名和数据库名都是postgres
配置
首先连接到数据库,进入到docker容器中执行:
1 | psql -d "postgres://postgres:PASSWORD@localhost:5432" |
创建新的数据库
1 | CREATE DATABASE hassdb |
然后输入\q退出即可
接下来回到HomeAssistant,在configuration.yaml中添加如下配置:
1 | recorder: |
另外,可以添加一个sql类型的Sensor,可以用来查询数据库的总大小
1 | sql: |
注意事项
由于HA并不支持现有数据库的迁移,所以在配置了新的数据库后,之前的历史数据会丢失,所以最好在刚安装好HA的时候就选好想要的数据库。