# 系统要求
Typesense 是一个为快速、低延迟检索优化的内存数据库。为了实现这一目标,它将整个搜索索引存储在内存中,并在磁盘上保留原始数据的副本。
为了获得 Typesense 预期的性能特性,选择合适的系统配置至关重要。
# 内存选择
Typesense 进程本身非常轻量,在没有索引数据时仅占用约 20MB
内存。所需内存量完全取决于您索引的数据大小。
# 关键词搜索场景
如果您的数据集(仅包含需要搜索的字段)大小为 X MB
,通常需要 2X-3X MB
的内存来在 Typesense 中索引这些数据。
例如:如果您的数据集总大小为 5GB
,但您只需要搜索其中部分字段,且这些字段的子集大小为 1GB
,那么您将需要 2GB - 3GB
的内存来保存内存中的搜索索引。
您仍然可以在 Typesense 中存储未索引的字段(例如仅用于展示的字段)——这些未索引的字段将存储在磁盘上,不会计入内存使用量。
如果您的数据集中有许多文档包含重复词汇(或标记),内存使用量会接近下限;如果多个文档包含独特的词汇(或标记),内存使用量会接近上限。
计算记录大小
假设您有如下 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
字段。
计算内存使用时,您只需要将这些字段的 值 作为一条记录的大小。
因此,即使您的文档包含其他字段如 track_id
、urls
、release_decade
等,由于您不会在这些字段上搜索(可能仅用于展示目的),它们不会计入内存使用量。
假设平均每个专辑名称有 100 个字符(即 100 字节),主要艺术家名称有 50 个字符(50 字节),流派有 50 个字符(50 字节),发行日期是整数(4 字节)。
那么我们的平均记录大小为 100 + 50 + 50 + 4 = 204 Bytes = 0.204 KB
。
字段 名称 的长度不会影响内存使用,因为字段名称不会在索引中重复存储。
如果有 100 万条记录,我们的总数据集大小为 0.204KB * 100万条记录 = 204MB
。
因此我们的内存消耗在低端为 204MB * 2 = 408MB
,在高端为 204MB * 3 = 612MB
。
# 向量搜索内存需求
当为向量搜索建立索引时,每个向量需要占用7字节内存。
因此,如果你的嵌入模型返回N维向量,且有X条记录,内存消耗将为7字节 * N维度 * X记录
字节。
例如:若使用S-BERT模型(384维度)且有10万条记录,内存消耗为7字节 * 384维度 * 100,000记录 = 268.8 MB
。
# 语义搜索与混合搜索内存需求
当使用内置ML模型(如S-BERT、E-5等)进行语义/混合搜索时,Typesense需要将这些模型加载到内存中,这需要额外占用2GB-6GB的RAM(不包括上述向量搜索部分描述的内存需求)。
当使用远程嵌入服务(如OpenAI、PaLM API、Vertex AI等)进行语义/混合搜索时,Typesense除了存储这些模型生成的向量所需内存(如上述向量搜索部分所述)外,不需要额外的RAM。
# 选择 CPU 容量
CPU 容量对于处理并发搜索流量和索引操作至关重要。
重要提示
Typesense 至少需要 2 个 vCPU
的计算容量才能运行。
Typesense 设计为开箱即用高度可扩展,无需额外配置。 它会自动利用所有可用的计算资源。 因此特定 CPU 配置每秒能处理的最大请求数完全取决于您的搜索查询模式和索引数据的形态与大小。
虽然很难给出理想的 CPU 容量的确切建议(因为这取决于您的数据),但以下是一些参考数据点,可以帮助您了解 CPU 需求:
- 一个 4 vCPU 的 Typesense 节点能够处理 每秒 104 次并发搜索查询,数据量为 220 万条记录。
- 一个 4 vCPU 的 Typesense 节点能够处理 每秒 46 次并发搜索查询,数据量为 2800 万条记录。
- 一个 8 vCPU 3 节点 的 Typesense 集群能够处理 每秒 250 次并发搜索查询,数据量为 300 万条记录。
提示
在 Typesense Cloud 中,您可以选择使用具有"突发" vCPU 容量的节点。 如果您在一天大部分时间里流量相对较低,仅在索引期间偶尔出现中等峰值,可以选择我们的"突发" vCPU 选项来节省成本。 请注意,如果您有较高的基础流量或大量索引需求,此选项并不适合。 如果在这种配置的节点上持续发送大量流量,您会开始看到响应时间变慢。
# 使用 GPU(可选)
当使用内置嵌入模型进行语义搜索/混合搜索时,您可以通过使用 GPU 来加速嵌入生成过程。
内置模型也可以仅使用 CPU 运行,但由于它们的计算强度较高,在 GPU 上运行 Typesense 时性能会有显著提升。
当使用远程嵌入模型(如 OpenAI、PaLM API 或 Vertex AI API)时则不需要 GPU,因为这些模型的嵌入生成是在远程服务的服务器上完成的,而不是在 Typesense 内部。
Typesense 目前仅支持 Nvidia GPU。
TIP
在 Typesense Cloud 中,您可以在特定 RAM/CPU 配置 (opens new window)下找到"GPU 加速"选项, 该选项在新建集群时或集群配置 > 修改(适用于 Typesense 0.25.0 及以上版本)中可用。
# 磁盘选择
Typesense 会在磁盘上存储原始数据的副本,然后使用这些数据构建内存索引。 在搜索时,确定 API 响应中要返回的最终文档集后,Typesense 会从磁盘中获取这些文档(仅限这些文档)并将其放入 API 响应中。
您需要足够的磁盘空间(至少与原始数据集大小相当)来运行 Typesense。SSD 固态硬盘比机械硬盘快得多,是推荐的选择。
TIP
在 Typesense Cloud 中,我们提供 5 倍于内存容量的磁盘空间(X 为您为集群选择的内存大小)。 当您启用"高性能磁盘"选项时(仅适用于高可用非突发 CPU 配置), 我们将使用 NVMe SSD 磁盘,为您提供最快的数据传输速率。
# 选择节点数量
Typesense 可以运行在单节点配置中,也可以运行在高可用的多节点集群配置中。
我们强烈建议您在生产环境中运行高可用的 3 节点或 5 节点配置,以确保您的搜索服务能够抵御不可避免的基础设施问题。
Typesense 使用 Raft 作为其共识算法,由于 Raft 需要节点多数达成共识,您至少需要运行 3 个节点才能容忍 1 个节点故障。运行 5 节点集群可以容忍最多 2 个节点故障,但会以更高的写入延迟为代价。
# 选择搜索分发网络 (SDN)
在 Typesense Cloud (opens new window) 中,您可以选择创建一个跨越全球多个地理区域的 Typesense 集群,称为搜索分发网络 (Search Delivery Network, SDN)。 您将获得一个 SDN 端点,发送到此端点的查询将自动路由到距离搜索请求发起位置最近的节点。
如果您的用户在地理上分布在不同国家(或者在美国的情况下分布在不同的州,我们在不同城市有多个数据中心可选), 并且您直接从网站/应用程序向 Typesense 发起调用,那么选择 SDN 配置将确保您的用户无论身处何地都能获得一致的超低延迟搜索体验, 因为 SDN 端点会自动将每个搜索查询路由到距离用户最近的数据中心。
了解更多关于搜索分发网络的信息,请参阅此处。