Odoo数据库会话管理:GitHub_Trending/se/server-tools session_db模块
模块概述
session_db模块是GitHub_Trending/se/server-tools项目中的重要组件,其核心功能是将Odoo会话(Session)存储从传统的文件系统迁移到数据库中。这一改进极大简化了Odoo在水平扩展部署场景下的配置复杂度,避免了对分布式文件系统的依赖。模块基本信息如下:
- 名称:Store sessions in DB
- 版本:18.0.1.0.1
- 授权协议:LGPL-3
- 维护者:sbidoul
- 源码路径:session_db/
核心优势
传统Odoo会话存储依赖文件系统,在多服务器部署时需要同步会话文件,这会带来以下挑战:
- 分布式文件系统配置复杂
- 会话文件同步延迟导致用户状态不一致
- 服务器间文件权限管理困难
session_db模块通过数据库存储会话解决了这些问题,其架构优势如图所示:
技术实现
数据库存储设计
模块在数据库中创建专用表存储会话数据,核心表结构定义如下(pg_session_store.py):
CREATE TABLE IF NOT EXISTS http_sessions (
sid varchar PRIMARY KEY,
write_date timestamp without time zone NOT NULL,
payload text NOT NULL
)
其中各字段含义:
sid:会话唯一标识符write_date:会话最后更新时间payload:序列化的会话数据
会话管理核心类
PGSessionStore类实现了完整的会话生命周期管理,关键方法包括:
| 方法 | 功能描述 |
|---|---|
| save() | 将会话数据序列化后存入数据库 |
| delete() | 从数据库删除指定会话 |
| get() | 从数据库读取并反序列化会话数据 |
| vacuum() | 清理过期会话数据 |
并发控制机制
为确保多进程环境下的数据一致性,模块实现了双重保障机制(pg_session_store.py):
- 锁机制:根据Odoo运行模式(evented/多进程/单进程)自动选择gevent锁或线程锁
- 重试机制:数据库操作失败时自动重试,最多尝试5次
安装与配置
前置要求
- Odoo 18.0及以上版本
- PostgreSQL数据库访问权限
- 环境变量配置权限
安装步骤
- 将模块添加到Odoo服务器宽模块列表
- 配置数据库连接环境变量:
export SESSION_DB_URI="postgres://user:password@host:port/dbname" - 重启Odoo服务使配置生效
最佳实践:建议为会话存储创建专用数据库和数据库用户,以增强安全性(USAGE.md)
使用与验证
基本使用
模块安装配置后无需额外操作,Odoo会话将自动切换为数据库存储模式。可通过以下方式验证:
- 监控数据库http_sessions表记录变化
- 查看Odoo日志,确认包含以下信息:
HTTP sessions stored in: db
性能测试
模块提供了完整的单元测试套件(test_pg_session_store.py),包含:
- 会话CRUD操作测试
- 数据库连接重试机制测试
- PostgreSQL URI构建测试
可通过Odoo测试框架执行测试:
odoo -i session_db --test-enable
扩展与定制
会话清理策略
默认会话过期时间与Odoo标准配置一致(http.SESSION_LIFETIME),可通过重写vacuum方法自定义清理策略:
@with_lock
@with_cursor
def vacuum(self, max_lifetime=3600): # 自定义为1小时过期
self._cr.execute(
"DELETE FROM http_sessions "
"WHERE now() at time zone 'UTC' - write_date > %s",
(f"{max_lifetime} seconds",),
)
多数据库支持
模块支持同时连接多个数据库存储会话,只需配置不同的SESSION_DB_URI环境变量即可实现数据隔离。
总结与展望
session_db模块通过将会话存储迁移到数据库,为Odoo水平扩展部署提供了关键支持。其核心价值在于:
- 简化分布式部署架构
- 提高系统可靠性和一致性
- 降低运维复杂度
未来版本可能会增加的功能:
- 会话数据加密存储
- 会话共享与单点登录集成
- 会话活动监控仪表板
如需获取更多帮助,请参考:
- 官方文档:README.rst
- 问题追踪:项目Issues页面
- 社区支持:OCA服务器工具讨论组
如果你觉得本模块对你的Odoo部署有帮助,请点赞收藏本文章,并关注项目更新!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



