对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

mongot部署的资源分配注意事项

本部分回答有关 mongot部署的关键规划问题,并提供设计搜索架构的可行步骤。要获得全面的概述,请线性阅读本节。或者,您可以使用本部分作为参考,根据需要跳到相关部分。本节的目标是帮助准确估计资源需求并构建稳健的部署。

数据结构和索引定义是 磁盘使用RAM 要求 的主节点 (primary node in the replica set) 驱动因素。使用此部分来估计最终索引大小以及有效管理索引所需的内存。

1

使用以下公式作为磁盘空间估算的点:

Estimated Index Size = (Number of Documents) x (Avg. Size of Indexed Text per Doc) x (Expansion Factor)

扩展因子至关重要,在很大程度上取决于您的分词策略。使用这些乘数作为指南:

用例(Use Case)
乘数

标准/语言分词

1.5x - 3x

关键字/简单标记化

1.1x - 1.5x

edgeGram(自动完成)

5x - 8x

nGram(部分匹配)

8x - 15x+ (该值可能非常大,尤其是在 minGram 值较低的情况下。)

注意

前面的扩展因子乘数代表一般化示例,可能不适应用所有基于文本的内容。请务必使用自己的数据进行测试,以确定适合您部署的索引计算方式。

2

对于向量搜索,单独计算索引大小并将其添加到总数中。原始向量数据大小是该值的合理基线。

Vector Index Size = (Total Number of Vectors) x (Vector Dimensions) x 4 bytes / dimension

注意

此公式适用于 float32 向量。磁盘上的最终HNSW索引将产生额外的开销。

3
使用静态映射
如果文档结构不可预测,请禁用动态映射。动态映射可能会导致“映射爆炸”,从而创建数千个意外字段,消耗过多RAM并导致不稳定。使用 dynamic: false 显式定义索引。要学习;了解更多信息,请参阅动态和静态映射。
限制存储的源字段
仅在 mongot索引本身中存储搜索结果所需的最少字段设立。从主节点 (primary node in the replica set)MongoDB集合中获取字段通常效率更高,并且可以减少索引使用的磁盘空间。要学习;了解更多信息,请参阅在MongoDB搜索索引中定义存储源字段。
考虑高性能内存功能
Be aware that synonym collections and deeply nested embeddedDocuments create significant memory artifacts. If you use these features heavily, you must allocate more Java heap space to the mongot process.

写入(插入、更新、删除)的速率和类型决定了保持搜索索引与数据库同步所需的 CPU磁盘 IOPS

要预配写入吞吐量和维护:

1
高写入速率(> 1,000 操作每秒)
此工作负载属于 CPU 密集型和 I/O 密集型。为服务器配置高 CPU 数量和快速存储。监控 mongot 进程的 CPU 利用率和磁盘 I/O 队列长度。如果这些指标持续较高,并且复制延迟正在增加,则需要扩展硬件。
低写入速率(< 每秒 100 次操作)
标准硬件配置通常就足够了。
2
合并索引
避免在单个集合上定义多个单独的搜索索引。每个索引都会增加开销。相反,应创建单个综合索引定义。
物化复杂视图
If you are indexing a complex view, the change stream performance can be a constraint. Consider creating a materialized view to provide a simple, pre-aggregated data source for mongot to index.
3

更改索引定义会触发占用大量资源的全面重建。

重建操作会在旧索引之外创建一个新索引,然后再将查询请求切换到新索引。始终确保至少有当前索引大小的 125% 可用作可用磁盘空间,以适应此进程而不会运行存储。

4

对于要求极高的写入工作负载,垂直扩展单个 mongot节点可能不够。

如果您预计持续写入负载会超过每秒 10,000 次操作,分片是最有效的扩展策略。每个分片至少需要 1 mongotmongot 仅对其所连接的分片内的集合进行索引,这有助于水平分配索引负载。

查询性能主要取决于用于处理的 CPU 和用于缓存的RAM 。查询的复杂性和数量决定了实现延迟目标所需的资源。

要估计查询性能所需的部署大小,请执行以下操作:

1

要建立 CPU 基线,请使用每秒查询数 (QPS) 目标。一般的起始点是 每个 10 QPS 有 1 个 CPU 内核

此基线假设有简单查询。对于存在大量复杂聚合、模糊匹配或正则表达式查询的工作负载,每个内核可能只能实现 2-5 QPS。相反,简单的术语匹配可能会使每个核心的 QPS + 20。始终使用实际的查询组合来测试性能。

2

RAM是快速查询的最重要因素。

全文搜索
目标是将尽可能多的索引放入操作系统的文件系统缓存中。为获得最佳性能,请在 mongot节点上预配足够的RAM ,以与磁盘上索引的总大小相匹配。这样可以最大限度地减少磁盘读取速度慢的情况。
Vector Search
对于低延迟向量搜索,HNSW图表索引必须存在于内存中。要计算所需的最小RAM,请使用索引大小估算过程中的步骤,并添加 20-25% 的缓冲区以开销。如果RAM不适合向量索引,查询延迟会增加。

注意

要降低RAM要求,请考虑使用矢量量化。矢量量化可以压缩矢量嵌入,从而降低内存占用(以及保存它们所需的RAM ),同时对召回率或精度的影响最小。