1.Sonic:用Rust编写的统源Elasticsearch的极简替代品
Sonic:用Rust编写的Elasticsearch的极简替代品
Sonic 是一个开源搜索索引服务器,使用 Rust 编写,统源旨在提供简单、统源高性能且轻量级的统源解决方案。它通过接受用户查询并返回标识符(实际文档在关系数据库中的统源引用)来工作,这些标识符用于从另一个数据库(如 MongoDB、统源通达信无未来函数源码MySQL 等)中提取实际结果数据。统源Sonic 不存储文档本身,统源因此在存储方面非常简单有效。统源
创建 Sonic 的统源初衷是为了在不使用昂贵的开源搜索索引软件(如 Elasticsearch)的情况下,为 Crip 公司提供更经济的统源解决方案。作者 Valerian Saliou 在经营 Crip 时遇到了用户对消息搜索的统源需求,而传统的统源真封神私服源码系统对免费增值商业模型来说成本过高。因此,统源他将 Sonic 打造成“可搜索的统源 Redis”,一种简单功能和简单网络协议的结合。
选择 Rust 作为 Sonic 的编写语言是基于其简单性和速度的优点。Rust 的语言约束,如借用检查器和无 NULL 值的建筑派遣app源码事实,确保了在生产环境中运行项目时不会遇到某些类型的错误。此外,Sonic Channel 作为通过网络与 Sonic 通信的协议,使得数据能够高效地推送到索引或从索引中查询,而不采用基于 HTTP 的协议。
为了支持索引和自动完成,随时上传文件源码Sonic 使用了 LSM(Log-Structured Merge-tree)存储结构,底层使用了 RocksDB。FST(有限状态转换器)用于自动完成和拼写错误校正,其存储在磁盘上并进行内存映射,以确保快速访问。RocksDB 作为存储选择,深圳网络源码因其在保持性能稳定的同时,通过压缩旧数据来最小化磁盘使用而受到青睐。
在构建 Sonic 时,选择使用jemalloc作为内存分配器,因为其专为现代 CPU 架构设计,尤其在管理多核架构上的内存方面表现出色。Sonic 的源码已经开源,允许开发者深入理解其运作方式。此外,Sonic 在实际应用中表现良好,索引速度迅速,用户满意度高,索引了大量对象,并在不同负载条件下展现出高效的内存使用和搜索延迟。
如果有人想要构建类似于 Sonic 的工具,建议先深入研究已有的实现和相关技术,以便了解如何优化设计和实现过程。选择合适的存储解决方案和优化内存管理是关键,同时确保代码的清晰性和可维护性,以支持长期的稳定运行。