从零开始用 Rust 构建搜索引擎:第 1 部分

主要观点:

  • 介绍要在接下来几周解决的项目——构建具有加密功能的跨平台搜索引擎,本次关注存储在磁盘上的技术挑战。
  • 存储面临跨平台、异步操作、性能和加密集成等挑战,探讨了 LocalStorage、IndexedDB 和 File System API 等解决方案,指出各有优缺点,最终选择 File System API 因其能提供较好的平衡。
  • 实现了基于 File System API 的存储层,包括在 Rust 中获取根目录、创建文件等操作,还提到了处理浏览器存储的异步性及安全约束。
  • 构建了加密层,选择 aes-gcm 算法,实现了加密和解密功能,通过生成唯一 nonce 并与加密数据一起传输来简化操作。
  • 定义了文件 trait,包括写入、读取和删除文件的方法,还实现了序列化和反序列化功能,以及目录管理相关操作。
  • 总结本部分为构建搜索引擎奠定了基础,创建了跨平台存储接口、加密层和干净的 API,下部分将构建核心索引功能。

关键信息:

  • 存储挑战:跨平台访问、异步操作、性能、加密集成。
  • 解决方案:LocalStorage 受限,IndexedDB 复杂,File System API 平衡较好但需考虑兼容性和异步性。
  • 加密层:选择 aes-gcm 算法,生成 nonce 并与加密数据一起传输。
  • 文件 trait:包含写入、读取、删除等方法,可序列化和反序列化。
  • 目录管理:创建、列出文件、删除目录等操作。

重要细节:

  • 使用 #[cfg(target_arch = "wasm32")] 切换不同的文件系统实现。
  • 在加密层中,Cipher 结构体用于管理加密操作,通过 from_key 初始化,encryptdecrypt 进行加密和解密。
  • 在文件 trait 中,ClearFile 用于未加密文件操作,EncryptedFile 用于加密文件操作,通过 Cipher 进行加密和解密。
  • 在目录管理中,Directory 结构体用于管理目录,提供创建、列出文件和删除目录等功能。
阅读 11
0 条评论