MyScale vs. Elasticsearch:高效升级和替代方案

向量数据库是设计为专门用于存储和管理向量数据,在许多人工智能应用中发挥着关键作用,如语义文本搜索和图像搜索。虽然传统的词项匹配和 BM25 算法在文本检索中仍然具有重要意义,但广泛采用的 Elasticsearch 系统最近也增加了向量搜索功能,而开源高性能 SQL 向量数据库 MyScaleDB 最近也引入了全文检索功能。

在本文中,我们展示了 MyScaleDB 在全文搜索性能方面与 Elasticsearch 不相上下,同时实现了更低的延迟和40%的内存利用率。此外,当结合向量搜索时,MyScaleDB 的性能提高了10倍,而成本仅为原来的12%。凭借其高性能、低成本以及基于 ClickHouse 的丰富 SQL 生态系统,MyScaleDB 成为 Elasticsearch 的高效升级和强大的替代方案。

Elasticsearch 介绍

Elasticsearch 是一个分布式 RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建,可以快速地存储、搜索和分析大量数据,广泛应用于日志分析、应用搜索、安全分析、业务分析等领域。
Elasticsearch 具有以下优势:

  1. 强大的搜索能力:Elasticsearch 提供了强大的全文搜索功能,包括对精确值、全文检索和向量搜索,以及复杂的查询、过滤和聚合操作,使用户能够快速准确地检索所需信息。
  2. 丰富的功能:Elasticsearch 提供了丰富的功能和灵活的配置选项,例如文本分析、聚合分析和地理空间搜索等,以满足各种不同的搜索和分析需求。
  3. 丰富的生态系统:Elasticsearch 生态系统庞大,包括各种插件、工具和第三方集成,可以扩展其功能和应用场景,为用户提供更多选择和灵活性。
  4. 分布式架构:作为一个分布式系统,Elasticsearch 可以轻松地扩展到多个节点,实现高可用性和横向扩展,使其适用于大规模的数据处理和分析任务。
  5. 实时数据处理:Elasticsearch 支持实时数据的索引和搜索,可以快速地处理大量的实时数据,并提供即时的查询结果。

然而,Elasticsearch 仍存在一些不足,例如:

  1. 学习曲线陡峭:Elasticsearch 的学习曲线相对陡峭,特别是对于新手来说,需要花费一些时间来理解其复杂的概念和使用方法。
  2. 向量检索算法单一:截止目前 8.13 版本,Elasticsearch 在向量检索领域支持的算法有限,仅包括 brute-force kNN 和基于 HNSW 的 Approximate kNN 两种算法,这限制了其在复杂的向量检索场景下的应用。
  3. 资源占用较高:由于其强大的功能和分布式架构,Elasticsearch 在运行时需要相对较高的资源,包括内存、CPU 和存储空间等。

总的来说,Elasticsearch 在文本检索领域是一个强大的工具,但其在易用性、向量检索和资源利用等方向存在一些不足,在目前复杂的 AI 检索分析场景中存在一定的局限性。

Elasticsearch 首选替代方案:MyScale

MyScale AI 数据库基于开源的 SQL 列式存储数据库 ClickHouse 打造,自研高性能和高数据密度的向量索引算法,并针对 SQL 和向量的联合查询对检索和存储引擎进行了深度的研发和优化,是全球第一个综合性能和性价比大幅超越了专用向量数据库的 SQL 向量数据库产品。

原生兼容 SQL 与向量

MyScale 只需使用 SQL 即可与之交互,使其更易于使用且学习门槛较低,适合广大开发人员快速上手。MyScale 提供了灵活的数据模型和查询语言,支持用户根据具体需求定制数据处理和分析策略,提高了应用的灵活性和执行效率。在实际复杂 AI 应用场景中,SQL 和向量结合可以为开发人员提供了更加直观、高效的开发方式,极大程度增加了开发效率。

相比于 Elasticsearch 基于 JSON 查询 的 DSL (Domain Specific Language), MyScale 只需用户掌握向量检索函数 distance() 的使用方法,便可以凭借已经掌握的 SQL 基础完成向量检索需求。用户还可以在数据库层面完成对数据的进一步复杂分析处理,加快应用系统整体的处理效率。

-- Perform vector search and return top 10 results
SELECT
    id, title, text
    distance(vector, query_vector) as dist
FROM doc_table
ORDER BY
    dist ASC
LIMIT 10;

全文检索可替代 Elasticsearch

MyScale 在最新的版本中推出了强大的全文检索和混合检索等功能,为处理复杂的 AI 需求和未来的数据挑战提供了高效的解决方案。MyScale 嵌入了 Tantivy 全文搜索引擎库,具有快速索引构建、高效搜索、多线程支持、易于使用等特点,允许用户对存储在数据库中的文本数据进行快速且灵活的搜索,并按照 BM25 分数返回最匹配的结果集,更适合用于快速检索大规模文本数据。

下面是对同一个数据集 wiki (560w) 文本搜索能力测试结果。两者在吞吐量相近的情况下,MyScale 的 P95 查询延迟显著降低,并且内存的使用量方面也有明显下降。因此,MyScale 在全文检索的场景下可以实现对 Elasticsearch 的功能替代。

EngineFunctionQPSp95 LatencyPeak Memory
MyScaleTextSearch4099.164.563ms2.35GB
ElasticSearchmatch39078.863ms3.7GB
wildcard4679.165.583ms3.7GB

向量搜索领先 Elasticsearch

MyScale 利用向量检索技术,支持了多种向量索引算法,包括 MSTG、SCANN、FLAT、HNSW family、IVF family,更加符合各种 AI 场景的检索需求,并且在处理大规模高维数据具有绝对的优势。使用大规模数据集(LAION 5M向量,768维) 测试 MyScale 和 Elasticsearch 在不同的并发查询线程下向量搜索性能表现, 精度和吞吐量的测试结果如下图所示。关于更多的性能测试结果,可以查看 MyScale Vector Database Benchmark


在该测试中,分别测试了两种常见的过滤比例 0.1 和 0.01。根据测试结果分析可知,在达到相近准确度的情况下,MyScale MSTG 索引可以表现出更加出色的 QPS 性能,并且在索引资源占用、创建时间、查询时延、查询成本等方面相比 Elasticsearch 都存在显著优势。而且,MyScale 支持多种向量索引类型,并且结合强大的检索性能和性价比颇高的使用成本,比 Elasticsearch 更适合向量检索和分析查询场景。

资源利用效率高

MyScale 基于高性能的列式数据库 ClickHouse 构建,它通过高效的索引机制、数据压缩技术、列式存储结构、向量化查询执行和分布式处理能力,是目前实时应用和分析的最快、资源效率最高的开源数据库。MyScale 查询引擎针对现代 CPU 和内存进行了优化,利用向量化查询处理和数据并行处理技术,能够充分发挥多核处理器的性能,加速数据计算。同时继承了 ClickHouse 的列式存储模型,MyScale 能够实现高效的数据压缩和快速的列级操作,能够只读取查询中需要的列,减少数据读取量,同时提高了数据压缩率,降低了存储成本,特别适合分析和处理大量数据。

综上所述,MyScale 通过结合向量检索技术、全文检索引擎 Tantivy 和 ClickHouse 的高性能特性,以及其分布式架构和优化的查询引擎,实现了对大规模数据集的高效处理和分析,特别适合用于复杂的数据分析、混合搜索、全文检索、向量检索等场景。

如何实现 MyScale 对 Elasticsearch 的替换

将 Elasticsearch 替换为 MyScale 需要进行数据模型设计、数据迁移、 查询逻辑转换等工作。用户可以根据 Quickstart 指南快速启动 MyScale 集群、导入数据和执行SQL查询等操作。

设计数据模型

数据模型设计阶段是确定如何将 Elasticsearch 中的文档模型映射到 MyScale 中的表结构的过程,主要涉及到在 MyScale 中定义迁移数据表的列、数据类型、索引类型等。

  • 数据类型转换:MyScale 兼容 ClickHouse 所有的数据类型,因此 Elasticsearch 的 Field data types 都能在 MyScale 中找到与之对应的数据类型。但是值得注意的是,Elasticsearch 中用于向量搜索的类型 dense_vector 应该根据 element_type 的 float 和 byte 映射为 MyScale 中对应的的 Array(Float32) 或 FixedString,并在相应的列上添加对应的长度约束。
  • 向量索引定义:MyScale 支持更多的向量索引类型,我们强烈推荐用户使用 MSTG 索引来获得最优的性能,您可以参考向量查询的教程来创建和操作 vector indexes 来加速向量搜索。

下面是一个 Elasticsearch 中 image-index 转换为 MyScale 中 es_data_migration 数据表的例子:

{
  "image-index": {
    "mappings": {
      "properties": {
        "file-type": {
          "type": "keyword"
        },
        "image-vector": {
          "type": "dense_vector",
          "dims": 3,
          "index": true,
          "similarity": "l2_norm"
        },
        "title": {
          "type": "text"
        },
        "title-vector": {
          "type": "dense_vector",
          "dims": 5,
          "index": true,
          "similarity": "l2_norm"
        }
      }
    }
  }
}
CREATE TABLE default.es_data_migration
(
    `id` UInt32,
    `file_type` String,
    `image_vector` Array(Float32),
    `title` String,
    `title_vector` Array(Float32),
    VECTOR INDEX vec_ind_image image_vector TYPE MSTG('metric_type=L2'),
    VECTOR INDEX vec_ind_title title_vector TYPE MSTG('metric_type=L2'),
    CONSTRAINT check_length_image CHECK length(image_vector) = 3,
    CONSTRAINT check_length_title CHECK length(title_vector) = 5
)
ENGINE = MergeTree
PRIMARY KEY id;

数据迁移

数据迁移阶段主要涉及到 Elasticsearch 数据导出和 MyScale 数据导入过程。

  1. Elasticsearch 数据导出: 用户可以使用 Elasticsearch API、Logstash、 Kibana 的 CSV Reports 功能、Python es2csv 工具等多种方式将 Elasticsearch 中的数据导出为 JSON 或 CSV 等常用格式文件。
  2. 导入数据到 MyScale:MyScale 支持多种数据导入方式,包括 Python client ,HTTPS interface 等。下面以 Python client 为例将 Elasticsearch 导出的数据文件迁移到 MyScale 中。
import clickhouse_connect
import pandas as pd

# initialize client
# For SaaS users, navigate to the MyScale Clusters page, click the Action drop-down link, and select Connection details.
client = clickhouse_connect.get_client(
    host='127.0.0.1',
    port=8123,
    username='default',
    password=''
)

def convert_vector(vector_str):
    return list(map(float, vector_str.split(', ')))

# read migration data file
data = pd.read_csv('test.csv', usecols=['_id', 'image-vector', 'title', 'title-vector'], converters={'image-vector': convert_vector, 'title-vector': convert_vector})

# insert data into the migration table
client.insert('default.es_data_migration', data.values.tolist(), ['id', 'image_vector', 'title', 'title_vector'])

查询逻辑转换

将原应用处理中查询检索部分的逻辑由 Elasticsearch search 改为 MyScale search,并更新逻辑相应数据处理逻辑。

{
  "knn": {
    "field": "image-vector",
    "query_vector": [-5, 9, -12],
    "k": 10,
    "num_candidates": 100
  },
  "fields": [ "title", "file-type" ]
}
SELECT
    id,
    title,
    file_type,
    distance(image_vector, [-5.0, 9.0, -12.0]) AS l2_dist
FROM default.es_data_migration
ORDER BY l2_dist ASC
LIMIT 10;

写在结尾

通过 MyScale 与 Elasticsearch 的功能和性能对比分析可知,MyScale 不仅是一款 ElasticSearch 的高效升级替代品,更是一个适应未来数据需求和技术发展趋势的先进数据解决方案,尤其是在向量搜索和资源成本等方向存在明显优势。此外,基于 ClickHouse 强大的分布式存储和处理的架构,MyScale 在扩展性方面具有很高的灵活性,可以轻松地扩展到大型集群,满足不断增长的数据需求。

MyScale 一方面兼容 ClickHouse 的生态组件,拥有丰富的文档资源和广泛的社区支持;另一方面,与全球流行的开发者工具如 Python ClientNode.js 和 LLM 框架进行了集成,包括 OpenAILangChainLangChain JS/TS 和 LlamaIndex,为用户提供了更好的使用体验和支持。最后,MyScale 还支持丰富的数据类型和查询语法,使其能够适应不同的数据需求和查询场景。

未来,借助完善的 SQL 数据管理能力,强大高效的数据存储和查询能力,MyScale 会在数据存储和处理领域发挥越来越重要的作用,为用户提供更加丰富和高效的服务。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值