跳至主内容

EFCore 重构已落地

· 1 分钟阅读
非官方测试版翻译

本页面由 PageTurner AI 翻译(测试版)。未经项目官方认可。 发现错误? 报告问题 →

EFCore 已登陆 unstable 分支,这将带来显著影响。

我们终于完成了清理遗留数据库访问代码的首个里程碑。这意味着所有直接面向 SQLite 的 SQL 构建器已从代码库中移除。这标志着我们向全新数据库设计迈出了第一步,但现在需要快速展望后续计划。

本周将临时关闭 unstable 构建通道,跳过 20250127 的 unstable 版本以进行为期一周的 master 分支全面测试,unstable 构建将于下周的 20250203 版本重新开放。若您正在使用 unstable 构建,请务必在本周做好备份。

接下来请继续阅读,了解具体变更内容及未来规划。

  • JPVenson

我们具体完成了哪些工作​

Joshua 的博客文章 在 2024 年 11 月已阐明我们的主要目标。借此机会,我将回应收到的反馈与疑问,并澄清几个关键点。

旧版代码存在大量直接访问底层 SQLite 数据库的情况。作为基于文件的数据库,SQLite 承载着 Jellyfin 大部分重要数据存储。这主要带来四方面问题:

  1. 旧代码质量低下

  2. 旧代码结构复杂

  3. 旧代码明确仅支持 SQLite 且无法扩展

  4. 旧代码迁移处理依赖人工操作且易出错

这些问题导致我们无法快速可靠地扩展数据库功能或改进现有特性。新版代码采用 EntityFramework 迁移方案,这是 C# 生态中数据库迁移的行业标准。

我们尚未完成的工作​

当前代码__并未__原生支持其他数据库供应商,尽管我们正在推进此项工作。添加多数据库支持将是超越重构层面的重大变更,即使实现后也将长期处于高度实验阶段。

特别重要的是,我们尚未优化 Jellyfin 其他组件以适应新的数据库访问模式。这意味着在重构剩余代码以适配新结构期间,unstable 构建版本可能出现显著性能下降。

新架构还支持在 Jellyfin 运行期间进行可靠备份,这在之前是无法实现的。

未来规划​

虽然 unstable 构建通道已持续运行较长时间,但我们将按 Joshua 最初声明,本周临时关闭该通道并跳过 20240127 unstable 版本,以完成整周的 master 分支测试。包含这些变更的 unstable 构建将于 20240203 版本恢复,请运行 unstable 构建的用户在本周务必完成备份。

迁移过程会将原有 library.db 合并至 jellyfin.db 文件,并将旧文件重命名为 library.db.old,因此新版 unstable 构建将不再向前兼容旧版本。

我们明确__不支持 10.10.3 以下版本__的迁移。这意味着要测试迁移功能,必须使用 10.10.z 发布序列或当前 unstable 版本的最新数据库。

感谢您的支持!如有任何疑问,欢迎随时加入我们的 Matrix 频道获取帮助。

  • JPVenson.