告别臃肿!Elasticsearch平替Manticore登场

15 阅读8分钟

告别臃肿!Elasticsearch平替Manticore登场

Elasticsearch 的困境

在大数据搜索和分析领域,Elasticsearch 一直是备受青睐的工具,它凭借强大的全文搜索、实时分析能力以及分布式架构,在日志分析、电商搜索、企业信息检索等众多场景中广泛应用。然而,随着业务数据量的不断增长和应用场景的日益复杂,Elasticsearch 的一些问题也逐渐浮出水面。

资源占用过高是 Elasticsearch 较为突出的问题。当数据量达到一定规模,其对内存、CPU 和磁盘的需求急剧上升。例如在一些大型电商平台,随着商品数量突破千万级别,Elasticsearch 集群的内存常常被占满,CPU 使用率长期居高不下,导致服务器响应迟缓,甚至出现服务中断的情况 。在日志分析场景中,大量的日志数据持续写入,会使磁盘 I/O 频繁,不仅影响数据写入速度,还容易导致磁盘空间不足,进而影响整个系统的稳定性。

部署和维护的复杂性也是 Elasticsearch 的一大痛点。搭建一个高可用的 Elasticsearch 集群,需要考虑节点配置、分片设置、副本策略、集群间通信等多个方面。每一个环节出现问题,都可能引发集群故障。而且,随着业务发展需要对集群进行扩展时,又要面临数据迁移、负载均衡等复杂操作。对于一些技术实力有限的中小团队来说,这无疑是巨大的挑战,不仅增加了开发和运维成本,还可能因为配置不当而无法充分发挥 Elasticsearch 的性能优势。

在查询性能方面,虽然 Elasticsearch 在大多数情况下表现出色,但当数据量和查询复杂度达到一定程度时,查询延迟会明显增加。复杂的聚合查询、多条件关联查询,往往需要耗费大量时间来处理,这对于一些对实时性要求极高的业务场景,如金融交易实时监控、在线游戏数据统计等,是难以接受的。

面对 Elasticsearch 这些困境,我们是否有更好的选择呢?有没有一款轻量级的替代品,既能满足我们对搜索和分析的需求,又能避免这些问题呢?答案是肯定的,那就是 Manticore。

Manticore 是什么

Manticore 诞生于 2017 年 ,它的前身是 Sphinx Search。作为一款开源的高性能搜索引擎,Manticore 充分吸收了 Sphinx 的优点,并对其进行了大刀阔斧的改进,修复了数百个错误,几乎完全重写了代码,从而摇身一变成为一个功能全面、性能卓越的轻量级数据库,尤其在全文搜索方面展现出了惊人的实力。

从技术特点来看,Manticore 使用 C++ 开发,这使得它具备了出色的性能和资源利用效率。它拥有现代的多线程架构,能够充分发挥 CPU 多核的优势,实现高效的查询并行化,大大缩短了响应时间。在处理大规模数据时,Manticore 提供了灵活的存储选项,不仅支持传统的逐行存储,还通过 Manticore Columnar Library 为更大的数据集提供列存储支持,使得它能够处理那些无法完全装入内存的数据,极大地扩展了应用场景。

Manticore 对全文搜索的支持非常强大,提供了超过 20 个全文运算符和 20 多个排名因素,能够实现精准的搜索匹配和智能的结果排序。无论是简单的关键词查询,还是复杂的语义搜索,Manticore 都能轻松应对。它还支持查询自动完成、模糊搜索、词形还原、停用词处理、同义词处理等功能,为用户提供了更加便捷和智能的搜索体验。 此外,Manticore 还内置了向量搜索功能,这使得它能够很好地支持基于机器学习模型生成的嵌入数据的相似性搜索,在人工智能驱动的应用场景中如鱼得水,为语义搜索、推荐系统等提供了有力的技术支持。

Manticore 优势大揭秘

Manticore 之所以能够成为 Elasticsearch 的有力替代品,是因为它在性能、资源占用、语法使用以及功能多样性等方面都展现出了显著的优势。

(一)性能卓越

Manticore 的性能优势十分显著。在查询速度上,当处理 100 万条数据时,Elasticsearch 完成一次复杂查询平均需要 500 毫秒,而 Manticore 仅需 100 毫秒,速度提升了 5 倍 。在数据导入吞吐量方面,单服务器环境下,Manticore 每秒可以导入 10 万条数据,而 Elasticsearch 每秒只能导入 5 万条 。这种性能上的巨大差异,使得 Manticore 在处理大数据量时,能够快速响应用户的查询请求,大大提高了系统的运行效率。

(二)资源友好

资源占用方面,Manticore 表现得非常友好。在一个包含 1000 万条数据的索引场景中,Elasticsearch 占用内存高达 5GB,而 Manticore 仅占用 1GB,内存占用减少了 80% 。这使得 Manticore 在资源有限的环境中,如容器化部署和边缘计算场景中,能够轻松运行。在容器化部署时,Manticore 的低内存占用可以让更多的容器在同一服务器上运行,提高了资源利用率;在边缘计算场景中,由于边缘设备的资源相对匮乏,Manticore 能够以较小的资源消耗稳定运行,为边缘设备上的应用提供高效的搜索服务。

(三)语法亲民

Manticore 原生支持 SQL 语法,并且兼容 MySQL 协议,这对于有 SQL 基础的开发者来说,学习成本几乎为零。以查询操作举例,在 Elasticsearch 中,进行一个简单的全文搜索,需要使用特定的 DSL(Domain Specific Language)语法,如:

{
  "query": {
    "match": {
      "content": "搜索关键词"
    }
  }
}

而在 Manticore 中,只需要使用熟悉的 SQL 语句即可:

SELECT * FROM table_name WHERE MATCH('搜索关键词');

这种语法上的便利性,使得开发者可以快速上手 Manticore,减少了学习新语法的时间和精力成本,能够更加高效地进行开发和维护工作。

(四)功能强大

Manticore 的功能也非常强大,能够满足多样化的搜索需求。它支持实时索引,数据插入后可以立即被搜索到,这对于实时性要求较高的应用场景,如实时新闻搜索、即时通讯消息搜索等,非常适用。Manticore 还具备向量搜索功能,能够进行基于向量相似度的搜索,在图像搜索、推荐系统等领域有着广泛的应用。例如,在图像搜索中,通过将图像特征转化为向量,Manticore 可以快速找到与目标图像向量最相似的其他图像。Manticore 还支持多语言,无论是中文、英文还是其他语言的文本,都能进行高效的搜索和处理,为全球化应用提供了有力支持。

如何上手 Manticore

对于渴望尝试 Manticore 的小伙伴们,上手过程其实非常简单。下面就为大家介绍在不同操作系统下的安装方法。

如果你使用的是 Docker,那么安装 Manticore 只需一键操作。在命令行中输入以下命令:

docker run -e EXTRA=1 --name manticore --rm -d manticoresearch/manticore

这条命令会在后台启动一个名为 manticore 的容器,运行 Manticore 服务。其中,\-e EXTRA=1用于设置额外的环境变量,\-\-name manticore为容器命名,\-\-rm表示容器停止后自动删除,manticoresearch/manticore是 Manticore 的 Docker 镜像名称。

如果你使用的是 Linux 系统,以 Ubuntu 为例,可以通过包管理器进行安装。首先更新软件源:

sudo apt-get update

然后安装 Manticore:

sudo apt-get install manticore-search

对于 CentOS 系统,安装步骤稍有不同。首先添加 Manticore 官方 YUM 仓库:

sudo yum install https://repo.manticoresearch.com/manticore-repo.noarch.rpm

接着安装 Manticore Search 核心组件:

sudo yum install manticore manticore-extra

Windows 用户可以下载官方提供的安装程序进行安装。在下载完成后,双击安装程序,按照提示一步步进行操作即可完成安装。

安装完成后,我们还需要进行一些基本的配置。Manticore 的配置文件通常是manticored\.conf,主要配置内容包括定义索引、设置监听端口、指定数据来源等。例如,我们可以在配置文件中定义一个简单的索引:

index my_index {
  source = my_source
  path = /var/lib/manticore/my_index
  docinfo = extern
  charset_type = sbcs
}

这里my\_index是索引名称,my\_source指定数据来源,path表示索引文件存储路径,docinfo = extern表示将文档信息存储在外部文件中,charset\_type = sbcs指定字符集类型为单字节字符集。在设置监听端口时,你可以这样配置:

searchd {
  listen = 9306:mysql41
}

这表示 Manticore 监听 9306 端口,使用 MySQL 协议进行通信。 完成配置后,启动 Manticore 服务,在命令行中输入:

sudo systemctl start manticore

至此,Manticore 就安装并配置完成啦,你可以开始体验它强大的搜索功能了!