系统要求
kumosearch 是一种内存数据存储,针对快速、低延迟的检索而优化。它将整个搜索索引存储在内存中,并在磁盘上保留原始数据的副本。
为了使用 kumosearch 获得理想的性能,选择合适的系统配置至关重要。
内存选择
kumosearch 进程本身相当轻量,在没有数据索引时仅占用约 20MB 的 RAM。所需的 RAM 量完全取决于您要索引的数据大小。
关键字搜索
如果数据集的大小(仅包括要搜索的字段)为 X MB,则通常需要 2X-3X MB 的 RAM 来索引 kumosearch 中的数据。
例如:如果数据集大小为 5GB,而您要搜索字段的子集大小为 1GB,那么您需要 2GB - 3GB 的 RAM 来存储内存中的搜索索引。
您仍然可以在 kumosearch 中存储未索引的字段(例如用于显示目的的字段),这些未索引的字段只会存储在磁盘上,不会占用 RAM。
如果数据集中有许多文档包含相似的词语(或标记),则 RAM 使用量会较低;如果多个文档包含独特的词语(或标记),则 RAM 使用量会较高。
假设您有一个 JSON 文档:
{
"album_name": "John Denver Rare and Unreleased",
"country": "US",
"genres": ["country"],
"id": "31401733",
"primary_artist_name": "John Denver",
"release_date": 1104537600,
"release_decade": "2010s",
"release_group_types": [
"Album"
],
"title": "Annie's Song",
"track_id": "58ac90d0-d6fe-4395-9e65-f714ae4c23c0",
"urls": []
}
如果您只想搜索 album_name 和 primary_artist_name,并过滤 genres 和 release_date。计算 RAM 使用情况时,只需将这些字段的值作为一条记录的大小。
因此,即使您的文档有其他字段,如 track_id、urls、release_decade 等,因为您没有搜索它们并且可能仅将它们用于显示目的,它们不会计入 RAM 使用量。
例如,如果专辑名称平均有 100 个字符(即 100 个字节),主要艺术家姓名有 50 个字符(即 50 个字节),流派有 50 个字符(即 50 个字节),发行日期是一个整数(即 4 个字节),则平均记录大小为 100 + 50 + 50 + 4 = 204 字节 = 0.204 KB。
如果有 1M 条记录,那么数据集总大小为 0.204KB * 1M 条记录 = 204MB。因此,RAM 消耗在低端为 204MB * 2 = 408MB,在高端为 204MB * 3 = 612MB。
向量搜索
为 向量搜索 索引文档时,每个向量需要 7 字节内存。
因此,如果您的嵌入模型返回 N 维向量,并且您有 X 条记录,则内存消耗将为 7 字节 * N 维度 * X 记录字节。
例如,如果使用具有 384 个维度的 S-BERT 模型并且您有 100K 条记录,则内存消耗将为 7 字节 * 384 维度 * 100,000 条记录 = 268.8 MB。
语义和混合搜索
当使用带有内置 ML 模型(如 S-BERT、E-5 等)的语义/混合搜索时,kumosearch 需要将这些模型加载到内存中,除了所需的内存之外,这还需要 2GB - 6GB 的 RAM用于存储向量(如上面向量搜索部分所述)。
当使用语义/混合搜索与远程嵌入服务(如 OpenAI、PaLM API、Vertex AI 等)时,除了存储这些模型生成的向量所需的内存(如上面向量搜索部分所述)之外,kumosearch 不需要任何额外的 RAM 。
CPU容量选择
CPU 容量对处理并发搜索流量和索引操作至关重要。
::: warning 重要提示
kumosearch 需要至少 2 vCPU 的计算能力才能运行。
:::
kumosearch 设计为高度可扩展,开箱即用