Golang|分布式索引架构

  • 当文档数量巨大时,如一亿个文档,倒排索引难以全部放入单机内存。
  • 正排索引将热数据和冷数据分别存储在内存和磁盘中。
  • 分布式搜索引擎将数据分布在不同服务器上以应对大量数据。

  • 倒排索引的水平切分
  • 水平切分按关键词划分数据,如JAVA和算法在A服务器,专家和北京在B服务器。
  • 水平切分的优点是搜索关键词快速,缺点是多关键词搜索需要从多台服务器获取数据并归并。
  • 水平切分存在正排索引冗余存储的问题,浪费存储空间,比如上面文档1在多个倒排链上都存在,就意味着在A和B服务器上都有对应的冗余文件。

  • 倒排索引的垂直切分
  • 垂直切分每台服务器存储所有关键词,但链条减少。
  • 垂直切分的优点是搜索功能在某台服务器宕机时仍可使用,缺点是搜索速度取决于最慢的服务器。
  • 垂直切分的代码编写简单,搜索请求在每台服务器上独立处理后合并结果。

  • 分布式索引架构
  • 分布式架构包括多个worker,每个worker上存储正排索引和倒排索引。
  • 数据被平分为三份,每份分配给一个group,group内部有两台worker进行备份和负载分担。
  • 服务注册中心(etcd)负责决定请求走向哪个group,负载均衡策略选择具体的worker。
  • worker通过etcd进行服务注册和发现,知道其他worker的IP和端口号。
  • 可选的proxy层可以缓存连接和进行限流保护。

  • etcd 作为服务注册中心。
  • etcd 是一个 开源、分布式、高可用 的 键值对(key-value)存储系统。
  • 主要用于存储和管理集群配置、服务发现信息等关键数据。
  • 常用于 Kubernetes 的核心组件中(比如 k8s 的存储后端就是 etcd)。
相关推荐
好大哥呀2 分钟前
C++ IDE
开发语言·c++·ide
小杨同学496 分钟前
C 语言实战:动态规划求解最长公共子串(连续),附完整实现与优化
后端
Cache技术分享8 分钟前
290. Java Stream API - 从文本文件的行创建 Stream
前端·后端
用户948357016518 分钟前
拒绝 try-catch:如何设计全局通用的异常拦截体系?
后端
golang学习记11 分钟前
Go 1.22 隐藏彩蛋:cmp.Or —— 让“默认值”写起来像呼吸一样自然!
后端
阿里巴巴P8高级架构师12 分钟前
从0到1:用 Spring Boot 4 + Java 21 打造一个智能AI面试官平台
java·后端
桦说编程14 分钟前
并发编程踩坑实录:这些原则,帮你少走80%的弯路
java·后端·性能优化
BHXDML15 分钟前
JVM 深度理解 —— 程序的底层运行逻辑
java·开发语言·jvm
小杨同学4916 分钟前
C 语言实战:枚举类型实现数字转星期(输入 1~7 对应星期几)
前端·后端
用户83071968408216 分钟前
Shiro登录验证与鉴权核心流程详解
spring boot·后端