尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SiYuan v2.9.2 版本深度解析:数据同步多内核在线感知、冲突文件治理与启动体验重塑

SiYuan v2.9.2 版本深度解析:数据同步多内核在线感知、冲突文件治理与启动体验重塑 SiYuan v2.9.2 版本深度解析数据同步多内核在线感知、冲突文件治理与启动体验重塑【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuanv2.9.2 是思源笔记SiYuan在 v2.9.x 稳定线中的一次重要迭代主线围绕“数据同步”展开既修复了部分系统上同步冲突文件被重复生成的缺陷又引入多内核在线感知multi-kernel online perception、状态栏同步进度、同步启动提速与文件时间戳比较优化等一批增强。本文以官方英文版更新日志v2.9.2.md中文对照见 v2.9.2_zh_CN.md为骨架结合本仓库 Go 内核源码逐条展开帮助你在升级前理解版本边界升级后正确配置同步并理解其底层实现机制。版本概览一次以“数据同步”为主线的修复与打磨本版本官方定位为“改进了数据同步功能解决了某些系统上重复生成冲突文件的问题”同时附带编辑器、导出导入、搜索、集市、AI 等多个模块的体验增强与缺陷修复。整个 v2.9.x 系列的变更记录集中存放于仓库 app/changelogs/v2.8.4-v2.12.8/ 目录下按版本号分子目录管理。版本的功能改动可以归纳为四大板块板块涉及条目一句话说明数据同步多内核在线感知、冲突文件治理、状态栏同步进度、启动提速、同步向导改进、文件时间戳比较优化本版本主线全部围绕同步可靠性、一致性与使用体验导入 / 导出 / 备份data.zip 时间戳保持、导出包名携带工作空间名、快照内存占用下降、历史索引失败自动重建面向数据资产安全与可迁移性编辑器 / 搜索 / 预览大纲定位、Alt. 分屏、Dvorak 布局、清除行级元素免选中、粘贴为纯文本、CtrlShiftC 等高频编辑路径的效率改进平台与 AIgpt-3.5-turbo-16k 支持、iOS 导出渲染、Android 启动画面多端一致性修复升级前必读两条关键注意事项升级日志在版本说明的最前面专门列出两条注意事项这是所有用户在升级 v2.9.2 前必须了解的风险边界官方将其列为“Things to note when upgrading this version”升级此版本需要注意。注意一首次启动会自动重建云端数据索引耗时与数据量成正比。升级后第一次启动时内核会自动重建云端数据索引。如果数据量较大该过程会比较耗时官方建议在网络状况较好的时候再进行启动。从源码看思源在索引异常场景下本身就具备重建与恢复机制例如全量全文索引重建失败时会回退到完整重建流程见 kernel/model/box.go 中rebuild fts index failed, falling back to full reindex的处理路径树索引与引用索引也存在按文档、按更新时间差异驱动的增量重建逻辑kernel/model/index_fix.go 中的reindexTreeByPath、reindexTreeByUpdated等。本次升级触发的“云端数据索引重建”同样属于这类数据一致性保障动作应将其视为正常过程而非故障。注意二云端数据格式不再兼容旧版本必须“全端同步升级”。升级到 v2.9.2 之后云端数据与之前的版本不兼容所有设备内核实例都必须升级到此版本后才能正常使用。如果混用版本不同版本会互相覆盖云端数据索引极有可能导致云端数据损坏。这与本版本引入的数据同步相关结构性改动见下文“多内核在线感知”直接相关——云端同步协议与索引结构变化后旧版本内核无法正确理解新版本产生的同步状态因此必须统一升级。数据同步核心改进本版本的主线修复部分系统重复生成冲突文件v2.9.2 的目标之一是解决“某些系统上重复生成冲突文件”的问题。冲突文件conflict doc是云端同步检测到同一文件在不同设备上被并发修改、无法自动合并时生成的副本文档。是否生成冲突文档在思源内核中是一个可配置开关。同步配置结构体Sync位于 kernel/conf/sync.go其中字段GenerateConflictDocJSON 键generateConflictDoc专门控制“云端同步冲突时是否生成冲突文档”默认值为false见同文件NewSync()的初始化kernel/conf/sync.go。该开关可通过设置接口动态修改内核侧处理函数为SetSyncGenerateConflictDockernel/model/sync.go其 HTTP 路由注册在 kernel/api/router.goPOST /api/sync/setSyncGenerateConflictDoc需管理员角色且非只读模式接口实现在 kernel/api/sync.go冲突判定处则读取该配置决定是否落盘冲突文档相关判断出现在数据仓库处理逻辑 kernel/model/repository.go 中。本版本同时在“文件时间戳比较”上做了针对性改进对应同步文件时间戳比较 issue通过更可靠地判断文件在本地与云端的先后关系从源头减少误判导致的冲突文档反复生成。数据同步支持多内核在线感知这是本版本数据同步侧最具架构意义的新能力官方 changelog 对应条目为“数据同步支持多内核在线时同步感知”。所谓“多内核在线感知”是指思源的同步逻辑通过 WebSocket 与云端建立长连接感知当前是否有其他内核实例如桌面端与手机端同时在线正在工作并据此调整同步行为避免多个实例同时向云端写数据造成互相覆盖。这一能力对应的同步开关是Sync结构体中的Perception字段JSON 键perceptionkernel/conf/sync.go默认关闭设置入口为SetSyncPerceptionkernel/model/sync.go。感知连接的建立集中体现在启动同步流程BootSyncData中kernel/model/sync.go启动时若Conf.Sync.Perception为真首先调用connectSyncWebSocket()建立与云端的感知长连接在后续自动同步调度中只有当 WebSocket 连接存在且本地数据确实发生变化时才执行上传动作相关判断见 kernel/model/sync.go从而避免重复推送或空推送同步完成状态通过BroadcastByType(main, syncing, code, Conf.Sync.Stat, nil)推送给前端界面同上函数体中。内核还抽象了OnlineKernel类型与GetOnlineKernels()查询函数kernel/model/sync.go用于描述和枚举当前在线的内核实例WebSocket 连接的建立由dialSyncWebSocket等底层函数支撑kernel/model/sync.go。需要说明的是多内核感知属于同步模式的增量能力思源同步模式分为自动Mode 1、手动Mode 2、完全手动Mode 3等见 kernel/conf/sync.go 的注释感知功能是在这些既有模式之上进一步提升“谁在线上、何时该写”的判断精度。状态栏显示数据同步进度为了改善同步过程的可感知性v2.9.2 在状态栏中加入了同步进度显示。内核侧由BootSyncData/syncData等函数在整个同步生命周期内维护进度状态并广播同步开始、进行中、成功、失败分别通过BroadcastByType向主界面发送syncing消息其中携带的状态码与Conf.Sync.Stat统计字符串即为前端状态栏渲染进度的数据来源。同步的调度与节流由SyncDataJob定时任务kernel/model/sync.go、planSyncAfter延时规划与IncSync计数触发共同配合kernel/model/sync.go手动触发入口为SyncData/SyncDataUpload/SyncDataDownloadkernel/model/sync.go。提升启用数据同步时的启动速度并改进同步向导日志同时收录了两项同步使用体验改进一是“改进启用数据同步时的启动速度”二是“改进数据同步向导”。从实现路径看启动同步bootSyncRepo被安排在启动进度的较后阶段执行BootSyncData在启动进度推进到第 3 步之后才进入实际仓库同步见 kernel/model/sync.go启动期间对感知 WebSocket 的延迟连接、以及失败时通过flushAndRetryOnDNSError/isDNSErrorkernel/model/sync.go对 DNS 类错误先刷新系统 DNS 缓存再重试的容错设计都服务于让同步尽量少阻塞或打断启动主流程。同步向导首次配置云同步目录的引导流程则对应CreateCloudSyncDir、SetCloudSyncDir、ListCloudSyncDir等接口kernel/model/sync.go。改进数据同步的文件时间戳比较同步冲突判定的核心依据之一就是文件时间戳的比较。v2.9.2 专门改进了“数据同步文件时间戳比较”逻辑避免因时间精度、时钟偏差或文件系统元数据差异造成误判从而减少无谓的冲突与冗余下载/上传。这与“修复重复生成冲突文件”在机制上是配套的时间戳比较更可靠 → 文件新旧的判定更准确 → 冲突文档只在真正并发修改时产生一次。导入导出、备份与索引健壮性增强本版本在数据资产的安全与可迁移性上做了多项改进这些功能同样直接服务于“数据在本地与云端之间安全流转”的总体目标。变更项说明与依据导出 data.zip 后再导入不再改变文件时间戳备份导出 → 导入往返过程保持文件时间不变保证恢复后不触发大规模伪“更新”。数据导入导出相关内核逻辑位于 kernel/model/import.go 与 kernel/model/export.go导出 Data 压缩包名称加入工作空间名便于在多工作空间之间区分备份文件降低数据仓库创建/恢复快照时的内存占用快照snapshot功能围绕dejavu仓库实现内核侧快照相关接口集中在 kernel/model/repository.go如GetRepoSnapshots、RollbackRepoSnapshotFile、DiffRepoSnapshots、自动清理任务AutoPurgeRepoJob等本次针对大文档/大仓库场景降低了构建快照的峰值内存当文件历史索引插入失败时自动重建索引索引写入失败不再静默累积而是自动重建对应索引同类“失败后重建”策略可参见全文索引重建回退逻辑 kernel/model/box.go 及树索引重建流程 kernel/model/index_fix.go指定工作空间路径的情况下不再创建Documents/SiYuan/修正已有工作空间被二次初始化的问题避免目录结构重复编辑器、搜索与预览体验增强v2.9.2 同时覆盖了一批编辑器与浏览路径的日常效率改进适合逐条对照升级后的行为变化导出/预览模式下支持通过大纲面板定位标题在大纲outline面板点击标题即可在预览文档中跳转解决了预览态下“只能看不能定位”的问题。搜索对话框与文档树面板支持Alt.向右分屏打开在搜索结果或文档树中按Alt.即可将目标文档在右侧分屏打开与编辑器内的既有分屏快捷键形成一致操作习惯。支持 Dvorak 键盘布局快捷键修复 Dvorak 布局下快捷键失效问题属于对非 QWERTY 用户的键位兼容性修复。改进“保存查询条件”与“移除查询条件”的功能入口SQL/搜索查询条件的保存与移除入口更易发现、操作路径更短。不选择文本时也可使用“清除行级元素”光标停留在含行级元素如加粗、行内代码的文本中即可一键清除不再强求先选中。新增复制 PNG 快捷键CtrlShiftC与复制文本的CtrlC并列提升“复制为图片”的效率。浏览器端编辑器右键菜单新增“粘贴为纯文本”网页端粘贴时按纯文本落入避免样式污染属浏览器端与桌面端能力对齐。改进以file://开头的链接执行“网络图片转本地图片”把转换范围从 http(s) 扩展覆盖到本地文件链接场景。多端与 AI 能力同步更新新增 OpenAI GPT 模型gpt-3.5-turbo-16k在既有 GPT 模型列表中加入 16k 上下文版本适用于更长上下文的对话场景思源内核 AI 对话由Conf.AI配置与 OpenAI 兼容客户端驱动模型获取逻辑见 kernel/model/ai.go配置结构见 kernel/conf/ai.go。修复 iOS 端导出图片渲染不正确统一移动端与桌面端的导出图片渲染结果。Android 端启动画面更平滑减少启动阶段的白屏/跳变改善冷启动观感。缺陷修复清单本版本共修复 5 个缺陷官方英文版日志v2.9.2.md中的 Bugfix 一节完整列举如下修复内容影响场景集市默认排序失效集市Marketplace按默认规则展示时排序异常某些情况下 Pandoc 未初始化依赖 Pandoc 的导入/导出功能偶发不可用取消拖拽移动列表项后数据丢失编辑器内列表项拖拽取消后的数据一致性FlowChart 在导出预览模式下未渲染预览/导出视图中的流程图显示空白导出预览模式无法切换回编辑模式打开预览态后无法返回编辑态的界面卡死面向开发者通过自定义协议链接打开自定义页签在 Development 栏目中v2.9.2 面向插件开发者开放了新能力支持通过自定义协议custom protocol链接打开自定义页签。这意味着插件/主题可以通过自定义协议 URL 唤起内核并打开指定的自定义 tab 页为“外部唤起 内部分屏/页签跳转”类集成例如从浏览器、其他应用一键定位到思源中的特定面板提供了基础通道。升级路线与落地建议综合本版本变更给出如下升级与使用建议先统一版本再升级由于 v2.9.2 云端数据与旧版不兼容建议在同一时间窗口内完成所有设备桌面、移动、服务端的升级避免新旧版本混跑造成云端索引互相覆盖。选择网络良好的时机启动首次启动会重建云端数据索引大库用户请预留足够时间并在网络稳定的环境下进行避免中断。关注同步感知开关多内核在线感知是“同账号多设备同时在线”场景下的关键可靠性增强。如需在桌面与手机同时频繁使用可在同步设置中确认感知能力已启用对应配置键perception默认关闭。按需管理冲突文档开关generateConflictDoc默认关闭。对于并发编辑频繁、依赖冲突文档做人工裁决的用户可在设置中开启对绝大多数单写多读场景保持关闭配合本次时间戳比较改进即可获得更干净的同步结果。善用新增的高频操作Alt.分屏、CtrlShiftC复制 PNG、浏览器端粘贴为纯文本等均为零成本效率提升建议升级后立即上手。如果需要在升级前回溯同步机制的完整实现推荐以 kernel/model/sync.go 为主干配合同步配置结构 kernel/conf/sync.go 与同步相关 HTTP 接口 kernel/api/sync.go 交叉阅读即可完整还原思源“定时任务 WebSocket 感知 冲突判定 进度广播”的同步链路全貌。【免费下载链接】siyuanAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间让人与智能体在此协作项目地址: https://gitcode.com/GitHub_Trending/si/siyuan创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表