关于我们

质量为本、客户为根、勇于拼搏、务实创新

< 返回新闻公共列表

2026 站内搜索服务器租用内存规划实测:Typesense 索引常驻与副本避雷全解

发布时间:2026-10-15

2026 站内搜索服务器租用内存规划实测:Typesense 索引常驻与副本避雷全解

给电商站做商品搜索、给文档站做全文检索、给内容社区做帖子搜索的团队,在选服务器时最常问的一句是「要多大内存」。这个问题放到 Typesense 上有一个与其他搜索组件很不一样的答案:内存不是用来做缓存的,内存就是索引本身存放的地方。本文面向的是正在给站内搜索选机型、或者已经上线但内存告警反复出现的团队,讲清楚索引常驻内存这件事到底怎么换算成内存档位、副本该怎么算成本、以及哪些情况下加内存是无效的。文中所有内存数字都是工程估算口径,最终以你自己的真实数据实测为准。

索引常驻内存意味着内存就是索引的账单

Typesense 在运行时把整个倒排索引、facet 结构、排序结构都放在内存里,磁盘上的数据目录保留一份,用于进程重启后的恢复。这与 Elasticsearch、Solr 那类依赖操作系统页缓存、可以拿较小堆内存去配较大索引的做法是两条路。页缓存模式下内存不够的结果是命中率下降、查询变慢;Typesense 内存不够的结果是进程起不来,或者写入到一半被系统杀掉。两者的故障形态完全不同。

所以做容量规划时,第一件事不是看 QPS,而是算索引有多大。CPU 在这一步反而是次要的:分词和打分确实要吃 CPU,但只要内存装得下,CPU 一般不会先成为瓶颈。反过来,内存装不下,CPU 核数再多也没有意义。这个优先级在选机型时会直接影响预算分配。

磁盘的角色经常被搞反。在 Typesense 里磁盘主要是持久化与恢复介质,容量需求大致等于索引大小加上 raft 日志与索引整理过程中的临时空间,通常不需要像内存那样留很大的倍数。但磁盘的类型很关键,这一点后面讲重启恢复时会展开。

还有一种情况别急着单独租机器。如果算下来索引不到 1GB、查询并发也不高,为了 Typesense 单独开一台机器往往是浪费,把搜索进程跟应用一起放在一台中等内存的机器上就行。真正需要单独规划,是从索引进入几 GB 量级、或者查询并发开始影响主业务响应的时候。这个判断线不精确,但能挡掉大部分过度设计。

字段数乘字段长度乘文档数再乘膨胀系数

索引大小的估算可以顺着这条式子走:文档数 × 字段数 × 平均字段字节长度 × 索引膨胀系数,得到的结果再乘 1.3 到 1.5,给写入缓冲和查询并发留余量。这里每一个乘数都要单独测,拍脑袋填进去的数字没有价值。

最容易算错的是「平均字段长度」。中文在 UTF-8 下是三字节一个字,按字数算会低估整整三倍。正确做法是抽一批真实文档,对每个字段取 UTF-8 编码后的字节长度再求平均。中英混排的标题、带 HTML 标签的摘要,都要按清洗后真正入库的文本算,不能按数据库里存的原始长度算,更不能按产品同学印象里的「大概几十个字」算。

索引膨胀系数指的是原始文本变成倒排结构之后的放大倍数:词项字典、倒排链表、位置信息、facet 映射、排序列,每一份都是额外开销。工程上常取 1.5 到 3 倍(预估),facet 字段多、高基数字段多的 schema 取上限,纯标题加少量低基数字段的 schema 可以取下限。这个区间是拿来估档位的,不是厂商保证值。

举个完整的例子。一个商品搜索 collection,50 万条文档,schema 里 10 个字段,剔除正文之后平均字段长度按 40 字节算,裸数据量是 50 万 × 10 × 40,约 200MB。取膨胀系数 2,得到 400MB。再乘 1.4 的余量,是 560MB。也就是说 Typesense 进程本身的常驻内存应该在 600MB 上下,加上操作系统、应用进程、日志采集之类的开销,1GB 内存的机器会很紧张,2GB 才谈得上有余裕。

那 30% 到 50% 的余量不是随手加的。写入时新文档先在内存里建索引再落盘,批量导入期间内存占用会明显高于稳态;查询并发高的时候,每个并发查询的中间结果集——过滤之后的文档 ID 集合、排序用的临时数组——也都要占内存。只按稳态算、一点余量不留,压测时不会出问题,线上大促时才出。

只看面板上的 num_documents 是规划失败的开端。两个 collection 文档数完全一样,一个只有 4 个字段、2 个 facet,另一个有 20 个字段、12 个 facet 还带正文,内存占用可以差一个数量级。文档数决定的是下限,schema 决定的是上限在哪。这也是为什么本文把 schema 放在机器选型之前讲。

facet 字段是索引体积的放大器

字段被标成 facet 之后,Typesense 要为它额外维护一份值到文档 ID 的映射结构,用于 facet_by 的分组统计和 filter_by 的快速过滤。这份结构独立于主倒排索引存在,字段值越分散,这份结构越大。

关键变量是基数,也就是这个字段有多少个不同的值。品牌、分类、上下架状态这类字段,不同值可能只有几十到几百个,做 facet 很划算,换来的是前端筛选栏的秒级响应。价格、库存数、精确到秒的更新时间、SKU 编码这类字段,不同值的数量接近文档数,做成 facet 等于为每条文档都建一条映射,膨胀最厉害。同样是「加了一个 facet」,这两种字段的成本差得很远。

最常见的内存事故就是「把每个字段都设成 facet」,理由是「以后可能会用」。一份全量 facet 的 schema,相比只 facet 三个低基数字段的 schema,索引体积翻倍甚至更多是很常见的(预估)。把这类字段从 schema 里摘掉,比把内存从 16G 加到 32G 便宜得多,见效也更快。

判断标准其实很简单:这个字段会不会出现在 filter_by 或 facet_by 里。不会的话就别标 facet。只用于返回展示的字段,可以设 index 为 false,让 Typesense 原样存着但不建索引,这样它不进倒排、不进 facet,内存占用大幅下降,查询时还是能随文档一起返回。

下面这几类字段标 facet 基本没有意义:主键 ID(直接按 ID 取文档即可,不需要走过滤结构)、长文本正文(没有用户会按正文做分面统计)、使用率极低的内部字段(宁可将来需要时重建一次索引)。反过来,如果业务核心就是多条件筛选——电商的筛选栏、招聘站的职位筛选、文档站的版本过滤——facet 是必须付的成本,那就把这笔成本付在低基数、高使用率的字段上。

排序字段与多字段加权对常驻内存的贡献

参与排序的字段需要一份能按文档 ID 随机访问的结构。数值型字段(int32、int64、float)每个文档占固定宽度,成本相对可控;字符串排序字段要存完整字符串或者它的字典编码,长字符串排序字段的成本会明显高于数值字段。

多字段加权排序本身——用文本匹配分配上若干业务字段的综合打分——并不额外占多少内存,那是查询时计算的一套权重。真正占内存的是参与计算的每个字段都得有可排序结构。所以「排序字段越多越贵」这句话成立,但贵在结构,不贵在权重公式。优化方向也因此是减少参与排序的字段数,而不是简化权重表达式。

一个实用做法是引入短的排序键字段。比如把「热度」这种由多个信号合成的值,在写入之前算好存成一个 float 字段,而不是让 Typesense 在查询时用三四个字段拼表达式。参与排序结构的字段数从四个降到一个,内存省下来,查询也更快。代价是热度算法变了要重刷一遍这个字段,属于可控范围。

还有一个容易忽略的点:有些字段明明不会参与排序,但因为 schema 里没有显式关掉,也被建了可排序结构。建 schema 的时候逐字段过一遍,明确它到底是检索用、过滤用、排序用,还是只用于展示。这一步花的时间会在内存账单上还回来,而且是长期还。

整条文档替换带来的写入放大

Typesense 的更新是整条文档替换。你提交一个只含 id 和 stock 字段的对象,服务端按 id 找到原文档,用新内容整体替换,而不是只改 stock 那一个字段。这个语义在接口上很省事,在资源账本上很花钱。

后果是:改一个字段的代价等于重建这条文档的所有索引。如果文档里有一个几千字的正文字段,那么每次改库存、改价格,都要把这几千字重新分词、重新写倒排。写入放大就是这样来的。CPU 花在与本次变更无关的字段上,内存里在索引整理完成之前会同时存在新旧两份结构。

所以稳态内存不是内存规划的唯一目标,峰值才是。批量导入期间、大量更新期间,内存占用会高于稳态。规划时留的那 30% 到 50% 余量,很大程度上就是给这个峰值准备的。只盯稳态数字选机型,是最常见的一种踩坑方式。

应对办法分两层。第一层在 schema:把大字段剥离出去,让单条文档变小,写入放大的基数就降下来了。第二层在写入侧:能合并的更新就合并,不要每个字段变动都单独发一次写请求;同一个文档在一小段时间内的多次变更,在应用层攒一攒再提交,效果立竿见影。

什么时候值得为这件事花精力,取决于读写比。如果数据是写少读多——商品目录每天全量刷一次、文档站每周更新一批——写入放大不是主要矛盾,可以按稳态规划。如果是分钟级甚至秒级更新库存和价格,写入放大就是主要矛盾,schema 必须先瘦下来,否则加多少内存都会被峰值吃掉。

import 批次大小与单批内存峰值的平衡

批量导入要用 import 接口按批提交,不要一条一条发 POST。单条提交时,每条文档都要过一遍 HTTP 请求开销、JSON 解析、raft 日志复制的固定成本,CPU 大量消耗在请求本身而不是索引构建上,吞吐上不去。

批次太小的问题就在这里:请求开销的占比过高。你会看到 CPU 跑满但导入速度很慢,监控图上像 CPU 瓶颈,实际上是请求次数太多。这时候的正确动作是把批次调大,而不是加 CPU。

批次太大的问题在内存。一个批次里的文档会先在内存里建索引,批越大,瞬时占用越高。几万条带大字段的文档一次性提交,单批内存峰值冲到几个 GB 是可能的(预估)。而且 import 是逐条返回结果数组的,某一批失败要整批重试,批次越大,失败的代价越高。

实操上建议从一个中等批次开始试,比如几千条一批,或者按单批请求体几十 MB 的量级控制,然后盯着内存峰值和 CPU 利用率往上调。目标状态是 CPU 接近打满、内存峰值还在安全线以内。到了这个状态再往上加批次,就是在拿稳定性换速度了,不值得。

并发导入的线程数也要控制,一般不超过 CPU 核数(预估)。开太多并发线程,内存峰值会叠加,而且 raft 日志复制要排队,端到端延迟反而变差。导入吞吐与并发数不是线性关系,到某个点之后会掉头向下。

导入结束后别急着读数。索引在写入完成之后还会做一次整理,这期间内存可能短暂高于稳态、磁盘 IO 也会有一波。要在这个阶段结束、内存回落到稳定值之后再读一次实际占用,那个数字才是真正应该拿去规划机器的值。

副本是完整索引而不是增量

这是本篇最想说清楚的一条:Typesense 集群里的每个节点都持有完整的一份索引,副本不是「再存一份增量」,也不是分片。它是同一份索引的另一个完整拷贝。

所以两副本意味着集群总内存需求是索引大小的两倍,不是磁盘多一份。很多人以为加副本是加磁盘,实际加的是内存。三节点两副本的集群,你要为同一份索引付三次内存的钱。这一点在预算会上经常算错,最后发现机器费是预估的两倍。

加副本能解决的是读吞吐:查询可以打到副本节点上,并发能力随副本数上升。加副本还能解决可用性:一个节点挂掉,其他节点继续提供服务。这两项收益是真实的,也是很多人上集群的正当理由。

加副本不能解决的是单节点内存不够。因为每个节点都装完整索引,单节点内存装不下,加多少副本都装不下。碰到这种情况加机器是无效的,只有两条路:改 schema 让索引变小,或者把数据按业务维度拆成多个 collection,分散到不同集群上。后者要应用层自己做路由,复杂度不低,但这是唯一能突破单节点内存上限的办法。

写入方面也要有清醒预期。写请求必须走 leader,再由 raft 复制到副本,所以加副本不会让写入吞吐线性上升,反而因为要多复制几份,写入延迟会略微上升。指望靠加节点提升导入速度,方向是反的。导入慢要从批次大小、schema 瘦身上想办法。

raft 多数派与三节点的容错边界

Typesense 集群用 raft 做共识,决策需要多数派投票。n 个节点的集群,多数派是半数加一。这个规则决定了节点数怎么选,而且结论相当反直觉。

3 节点的多数派是 2,容忍 1 节点故障。5 节点的多数派是 3,容忍 2 节点故障。2 节点的多数派是 2,坏掉一个就凑不够多数派,等于零容错——花两台的钱买不到任何可用性提升,这是最亏的一种配置。4 节点的多数派是 3,同样只容忍 1 节点故障,比 3 节点多花一台、多一份完整索引的内存,容错能力一点没变,也不划算。

结论很干脆:要么单节点,接受单点风险,把预算花在快照和快速重建流程上;要么 3 节点,这是性价比最高的高可用起点;要么 5 节点,用于需要容忍两个节点同时故障的场景。2 和 4 这两个数字基本不用考虑。

raft 对节点间网络延迟敏感。写请求要等多数派确认,节点间往返延迟高,写入延迟就跟着高;延迟抖动还会触发频繁的 leader 选举,服务会一阵一阵地不可用。所以集群节点尽量放在同一个机房、同一个二层网络内。跨地域部署 Typesense 集群,除非你能接受写入延迟的显著上升,否则不建议这么做。

地域怎么定,看用户分布和合规要求。业务用户主要在中国大陆,节点就选中国大陆机房,延迟优势明显,但要走备案流程。需要免备案部署时,中国香港节点是常见折中,到中国大陆大部分地区的延迟在可接受范围,具体数值要按你的实际用户分布实测。中国台湾、中国澳门节点同理。定地域时把备案要求和延迟实测一起看,只看一个容易返工。

重启加载时间与磁盘随机读的关系

Typesense 的数据目录在磁盘上,进程启动时要把索引从磁盘读回内存。这一步的耗时由两件事决定:索引有多大,以及磁盘的随机读能力有多强。

在机械盘上加载一个几十 GB 的索引,耗时可以到十几分钟甚至更长(预估,取决于索引结构与盘的实际随机读 IOPS)。换成 NVMe SSD,同样的索引加载时间通常能大幅缩短(预估)。这两个数字差别很大,大到足以改变应急预案的写法。

这个数字平时没人看,出事的时候才要命。节点异常重启、机器迁移、版本升级,都要走一次加载。慢盘把恢复窗口从几分钟拉到几十分钟,这几十分钟里搜索服务是残缺状态——副本还能顶住,但如果正好副本也在恢复,业务就直接受影响。

所以磁盘选型的重点不是容量,是类型和随机读能力。数据目录放在 NVMe SSD 上,容量按索引大小的两倍以上预留,给 raft 日志和索引整理留空间(预估)。同样是 1TB,NVMe SSD 和机械盘在这个场景下的表现不是一个量级,价格差异也不是一个量级,但恢复窗口这个收益是实打实的。

具体要花多久,别靠估。找一个非高峰时段,真实重启一次,记录从进程启动到服务可用的耗时,把这个数字写进应急预案。这一步做完,你才知道自己的恢复窗口到底是几分钟还是几十分钟,才能判断这个窗口业务能不能接受。

文档规模与字段复杂度对应的内存关注点对照

下面这张表把前面讲的口径落到具体的档位上,横轴是文档量级与 schema 复杂度,纵轴是对应的内存关注点、副本与节点建议。表里所有内存区间都是预估量级,只用来选起始档位,不能当承诺值用。

文档量级 字段与 facet 复杂度 内存关注点 副本与节点 备注
10 万条以内 3 到 6 个字段,facet 2 到 3 个且都是低基数 索引常在几百 MB 内,主要看系统与其他进程的余量 单节点即可,副本按需 这个量级用数据库全文索引往往也够,先别上独立搜索服务
10 万到 100 万条 6 到 12 个字段,facet 3 到 5 个 索引 1 到 5GB 量级,内存按索引乘 1.4 起算 3 节点 2 副本开始有价值 每加一个高基数 facet 都要重算一遍内存
100 万到 1000 万条 字段多,含摘要或短正文 索引 5 到 30GB 量级,正文进索引会让估算明显失准 3 节点起步,读压力大再加副本 正文全文字段建议剥离,只留标题加摘要加 ID
1000 万条以上 字段复杂,facet 数量多 单节点内存基本装不下完整索引 必须横向扩,或按业务维度拆 collection 加内存无效,只能改 schema 或者拆数据
与量级无关:分钟级高频更新 字段不一定多,但写入密集 关注写入缓冲与单批内存峰值,而不是索引稳态 3 节点,注意 raft 复制延迟 整条文档替换,剥离大字段的收益在这一档最大

数据库 LIKE 与全文索引硬扛的适用边界

先说 LIKE。形如「标题中包含某个关键词」这种写法,前置通配符让普通 B-tree 索引完全用不上,数据库只能逐行扫描。表小的时候无所谓,几十万行、几百万行之后,一次全表扫就是几百毫秒到几秒,并发一上来主库先倒。这不是索引没建好,是这种查询形态本身就不适合 B-tree。

再说数据库自带的全文索引。MySQL 的 FULLTEXT、PostgreSQL 的 tsvector 配 GIN 索引,都能做检索,中文需要配合合适的分词配置。它的优势是零额外组件:不用多维护一套服务,不用做数据同步,不用处理两边数据不一致。这套优势在小团队里分量很重。

几十万条以内、查询条件简单(就是关键词匹配加一两个固定过滤条件)、更新频率不高,直接上数据库全文往往更省事。这时候引入独立搜索服务,带来的运维成本和一致性问题,可能超过它带来的检索质量提升。为了架构好看而上组件,是这类项目最常见的浪费。

到了下面这几种需求,数据库方案会明显吃力。一是拼写容错:用户输错一个字也要能搜到,这需要编辑距离候选与前缀树结构,数据库全文索引不做这件事。二是分面统计:要在一次查询里同时返回每个筛选值的命中数量,数据库要跑很多次聚合。三是多字段加权排序:标题命中比正文命中权重大、新文档比老文档权重大,这类打分逻辑在 SQL 里表达起来又长又慢。四是任意组合过滤加排序再加分页,条件一多,SQL 的执行计划就开始不稳定。

还有一个折中点值得单独说。如果数据量不大但检索体验是核心卖点,比如一个小而精的文档站,也可以上独立搜索服务——这时候你买的不是容量,是检索质量。反过来,数据量大但检索需求极简,比如内部系统按编号精确查,那数据库就够了,别上。判断的依据是需求形态,不是数据量本身。

什么时候该减 facet 字段而不是加内存

内存告警的处理顺序应该是:先看 schema,再看机器。具体说是先数 facet 字段个数,再数其中有多少是高基数字段,然后才谈加内存。这个顺序反过来的话,钱会花得很冤。

原因是收益结构不同。减掉一个没人用的 facet 字段,成本是零,收益是索引体积立即下降;加内存是要花钱的,而且有上限——单台机器能插的内存有物理上限,租用机型也有档位上限,加到头就加不动了。一个是免费的即时收益,一个是有天花板的持续成本,先做哪个不用犹豫。

判断线可以这么定:facet 字段超过 5 个,或者有任何基数量级接近文档数的字段被标了 facet,先减。减完之后按前面的口径重算一次内存需求,还是不够再谈扩容。

有些情况加内存是明确无效的:单节点内存已经到了机型档位上限;索引大小已经超过单机能给的最大内存;内存加上去了但重启加载时间跟着变长,故障恢复窗口反而恶化。这三种情况都只能改 schema 或者拆数据,继续加内存是把问题往后推。

减 facet 不是没有代价。减掉之后,相关字段就不能用于 filter_by 和 facet_by,前端筛选栏要跟着改。所以动刀之前先确认使用记录:把查询日志里 filter_by 和 facet_by 出现过的字段频次统计出来,用数据决定砍谁,别靠印象。印象里「应该会用到」的字段,日志里经常一次都没出现。

把正文全文字段剥离出索引的拆字段做法

典型的 schema 事故是把商品详情、文章正文整段塞进 Typesense。理由也很自然,用户要搜正文里的内容。但这一塞,内存账单、写入放大、恢复时间三项一起恶化。

拆法是这样:索引里保留 ID、标题、摘要(正文截断到几百字)、分类、品牌、价格、状态、更新时间这些字段;完整正文留在数据库或者对象存储里。查询命中之后,拿返回的 ID 批量回查正文,再拼装结果返回给前端。

收益有三层。索引体积大幅下降,因为最长的那部分文本不进索引了。写入放大下降,因为整条文档替换时不再需要重新分词几千字。恢复时间下降,因为要加载的东西变少了。这三项收益是叠加的,不是三选一。

代价是一次回查。按 ID 批量查主键在数据库里是很便宜的操作,几十毫秒量级(预估),对端到端延迟的影响通常可以接受,而且可以缓存。另一个代价是摘要截断点的选择:截得太短,正文里的关键信息搜不到;截得太长,省不了多少内存。折中做法是截到几百字,并且优先保留开头段落和含关键实体的句子。

有几种场景不能剥。需要在搜索结果里高亮正文片段的,正文必须在索引里,否则拿不到高亮位置。搜索的核心价值就是全文检索的,比如法律法规库、技术文档库,剥了就没意义。这两种情况只能接受内存成本,但可以按字节重新算一遍预算,把这笔钱花明白,而不是稀里糊涂地被账单吓一跳。

一万网络面向 Typesense 索引常驻场景的服务器租用配置口径

一万网络深耕 19 年(成立于 2007 年),在服务器租用与机房托管这一块积累下来的经验可以概括成一句话:搜索类负载的机器,先把内存定下来,再倒推其他配置项。

具体到 Typesense 场景,选型的优先级是内存容量、磁盘类型、CPU 核数、磁盘容量,按这个顺序看。内存容量要按前面那套估算口径算出来的峰值再加一档,不要卡着算出来的数字选。估算本身有误差,业务量还会涨,卡着选等于一开始就没有缓冲。

磁盘优先选 NVMe SSD,原因前面说过:重启加载时间对随机读能力敏感,这一项直接决定故障恢复窗口。容量按索引大小的两倍以上留,不要只看当前索引大小就定死。

CPU 的要求相对宽松。分词和打分吃 CPU,一般 4 到 8 核能覆盖写入与中等查询并发(预估)。如果查询里的过滤条件特别多、排序字段特别多,再往上加核。绝大多数 Typesense 场景不会先撞到 CPU 天花板。

云主机与裸金属怎么选,看阶段。索引在几 GB 到十几 GB、业务还在成长期,云主机灵活,随时能升降配,适合先跑起来再调;索引稳定在几十 GB 以上、需要长时间独占内存、不希望受其他租户影响,裸金属更合适。内存需求超过云主机能给的档位时,也只能上裸金属。

地域选择上,中国大陆机房的延迟优势明显,但要走备案流程;中国香港节点是免备案场景下的常见折中,到中国大陆大部分地区的延迟在可接受范围,具体要看你的用户分布实测;中国台湾、中国澳门节点同理,按用户分布和合规要求一起判断。

价格方面,不同内存档位之间的差价公开渠道差异较大,以实时报价为准;具体到机型配置、带宽与防御能力的组合,需询价。这里不给具体金额,因为配置组合差异太大,给一个数反而容易误导决策。

租用前建议逐项核对:内存容量与是否独占、磁盘类型与随机读 IOPS、是否支持自助重装系统、快照与备份的方式和保留周期、机房地域与备案要求、带宽与流量的计费口径。这几项问清楚了,后面踩坑的概率会小很多,尤其是「内存是否独占」这一条,共享内存的实例在搜索场景下会让你的估算全部失效。

最后一条建议:先用最低档跑一遍真实数据。导入全量数据的十分之一,实测索引体积和内存峰值,按这个数字外推到全量,再往上选一档。这个流程比一上来买最大档省钱,也比拍脑袋选档位靠谱得多,唯一的成本是多花一次导入的时间。

数据来源与核对方式:Typesense 内存估算的字段与口径清单

本篇所有内存数字都是工程估算口径,不来自厂商官方的性能保证,也不构成任何服务承诺。不同 schema、不同数据分布下的实际值会有明显差异,最终以你自己的真实数据实测为准。下面列出的是估算时需要取到的字段与核对顺序,照着走一遍,得到的数字会比拍脑袋可靠得多。

要取的字段共八项。一、文档数:从 collection 信息接口读 num_documents。二、字段数:数 schema 里 fields 的个数。三、每个字段的平均字节长度:抽样一万条真实文档,对字段值做 UTF-8 编码后取长度求平均。四、每个字段的 facet、sort、index 开关状态,逐字段记录。五、索引膨胀系数:按 1.5 到 3 倍取(预估),facet 多的取上限。六、写入缓冲与查询并发余量:按 30% 到 50% 取。七、磁盘上数据目录的实际大小:可以作为索引规模的近似参照,但不等于内存占用,混用会导致低估。八、操作系统与应用进程自身的预留,这一项按实际部署内容估,别漏掉日志采集与监控代理。

有了这八项,核对流程是:先按口径算一遍理论值;再导入十分之一真实数据实测一次;把实测值外推到全量;外推结果再上一次余量;然后做一轮压测,记录导入峰值与查询并发下的内存峰值;最后按峰值选机器档位。六步走完,选出来的档位基本不会离谱。

重算的触发条件也要写进文档:schema 里 facet 或 sort 字段有增减、文档数增长超过一半、正文或摘要字段的截断长度改变、写入批次大小调整、节点数与副本数变化。任何一项变了,原来的估算就作废,要重新走一遍流程。很多线上事故都出在「schema 改了但机器没跟着调」。

价格与配置方面,公开渠道差异较大,以实时报价为准,具体需询价。本文不引用任何厂商未公开的性能数据,也不对可用性、恢复时长做任何承诺性表述。如果你的场景涉及合规要求,按所在地区的实际规定与机房要求执行,本文不构成合规意见。


上一篇:多伦多和华盛顿的第二条产品线为什么不是一回事:一条在卖端口,一条在卖内存

下一篇:硅谷这条线的硬盘为什么每档翻倍:数据要不要跟计算放在同一台机器上