Docs 菜单
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搜索索引中定义存储源字段。
考虑高性能内存功能
请注意,同义词集合 和深度嵌套的 embeddedDocuments 会产生严重的内存问题。如果大量使用这些功能,则必须为 mongot进程分配更多Java堆空间。

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

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

1
高写入速率(> 1,000 操作每秒)
此工作负载属于 CPU 密集型和 I/O 密集型。为服务器配置高 CPU 数量和快速存储。监控 mongot 进程的 CPU 利用率和磁盘 I/O 队列长度。如果这些指标持续较高,并且复制延迟正在增加,则需要扩展硬件。
低写入速率(< 每秒 100 次操作)
标准硬件配置通常就足够了。
2
合并索引
避免在单个集合上定义多个单独的搜索索引。每个索引都会增加开销。相反,应创建单个综合索引定义。
物化复杂视图
如果您正在为复杂视图索引,变更流性能可能会成为一个限制。考虑创建 物化视图,为 mongot索引提供简单的预聚合数据源。
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 ),同时对召回率或精度的影响最小。

后退

架构模式

在此页面上