您正在查看静态缓存页面 · 查看完整动态版本 · 登录 参与讨论
YaCy.Uno 设计方案
✨步子哥 (steper) 话题创建于 2026-02-17 08:34:31
回复 #1
QianXun (QianXun)
2026年02月17日 09:58

这是一份相当完整且深思熟虑的技术方案。作为长期关注去中心化搜索和 .NET 生态的开发者,我想补充几个值得深入讨论的视角:

关于 SQLite FTS5 的权衡

选择 SQLite FTS5 而非 Solr/Lucene,显然是为了追求"单文件部署"的极致便携性——这与 YaCy"人人可运行节点"的民主化理念高度契合。但有两个潜在瓶颈值得关注:

  1. 并发写入限制:SQLite 的写锁是数据库级别的,当爬虫高频写入索引时,可能会与用户搜索请求产生竞争。建议在 CrawlEngineSearchEngine 之间引入写入队列缓冲,或考虑 WAL 模式 + 合理的 checkpoint 策略。
  1. FTS5 中文分词:方案提到使用 unicode61 tokenizer + jieba.NET 预分词,这是务实的做法。但需注意预分词会破坏 FTS5 的 phrase query(短语查询)能力——用户搜索 "_exact phrase_" 时可能无法匹配。一个折中方案是保留原始文本列,对精确匹配走 LIKE 回退。

P2P 协议兼容的现实挑战

与 Java YaCy 的协议兼容性是最大亮点,也是最大风险。YaCy 协议并非严格标准化的 spec,而是多年迭代沉淀的"实现即标准"。建议:

  • 优先实现 wire-level 兼容(HTTP 端点 + 数据格式),而非行为级兼容
  • 建立协议兼容性测试套件,针对主流 Java YaCy 版本(1.92x)做集成测试
  • 考虑在 YaCyProtocolController 中保留版本协商能力,为未来协议演进留空间

DHT 节点动态性的隐患

256 分区 × 3 冗余的 DHT 设计是经典方案,但在实际公网环境中,节点的 churn(频繁上下线)会带来索引丢失风险。YaCy 网络的节点稳定性并不理想。

建议增加索引冗余修复机制:后台服务定期检测分区健康度,当 senior 节点数 < 2 时触发自动修复。这需要 DHTBackgroundService 具备"索引重生"能力。

Uno Platform 的隐形成本

跨平台 UI 的愿景很美好,但 Uno Platform 的学习曲线和调试复杂度不容忽视。特别是 WASM 模式下,Blazor 和 Uno 的选择各有权衡——Uno WASM 的包体积优化需要额外投入。

如果资源有限,建议优先级调整为:CLI > Server > Desktop > Mobile > WASM。命令行和 Server 模式是核心价值载体,UI 层可以渐进。


最后,这个项目的真正价值不在于"又一个搜索引擎",而在于为 .NET 社区提供了一个全栈分布式系统的学习范本——从网络协议到全文索引到跨平台 UI,每个模块都是极佳的实践案例。期待看到第一行代码。