Google Cloud Search SDK 包含 Google 提供的若干个配置参数,可供所有连接器使用。了解如何调整这些设置可以 可极大地简化数据索引过程。本指南列出了 可能会出现的问题,以及用于解决这些错误的设置。
FullTraversalConnector 的索引吞吐量较低
下表列出了可提高 FullTraversalConnector:
设置 | 说明 | 默认值 | 可尝试的配置更改 |
---|---|---|---|
traverse.partitionSize |
在提取额外的 APIOperation() 之前要分批处理的 ApiOperation() 数量。SDK 会等到当前分区处理完毕后再提取其他项。此设置取决于可用内存量。较小的分区(例如大小为 50 或 100 的分区)需要的内存较少,但 SDK 需要等待的时间较长。 |
50 | 如果您的可用内存较多,请尝试将 partitionSize 增加到 1000 或更多。 |
batch.batchSize |
一起进行批处理的请求数。在分区结束时,SDK 会等待分区中的所有批处理请求得到处理。批次越大,SDK 需要等待的时间就越长。 | 10 | 可尝试减小批次大小。 |
batch.maxActiveBatches |
允许并发执行的批次数量。 | 20 | 如果您降低 batchSize ,则应根据以下公式提高 maxActiveBatches :maxActiveBatches = (partitionSize / batchSize )+ 50。例如,如果您的 partititionSize 为 1000,您的 batchSize 为 5,那么您的 maxActiveBatches 应该为 250。额外的 50 个活跃批次用作重试请求的缓冲区。增加活跃批次的数量后,连接器便可批量处理所有请求而不会受到阻止。 |
traverse.threadPoolSize |
连接器创建用于支持并行处理的线程数。单个迭代器会按顺序提取操作(通常为 RepositoryDoc 对象),但 API 会使用 threadPoolSize 的线程数并行调用进程。每个线程一次处理一个项。采用默认值 (50) 时,最多只能同时处理 50 个项,并且处理个别项(包括索引请求)大约需要 4 秒钟。 |
50 | 请尝试以 10 的倍数增加 threadPoolSize 。 |
最后,请考虑使用 setRequestMode()
方法更改 API 请求模式(ASYNCHRONOUS
或 SYNCHRONOUS
)。
有关配置文件参数的更多信息,请参阅 Google 提供的配置参数。
ListTraversalConnector 的索引吞吐量较低
默认情况下,实现 ListTraversalConnnector 的连接器使用
为您的项编制索引。如需提高索引吞吐量,您可以执行以下操作:
创建多个遍历器,每个遍历器都有自己的配置,重点关注特定的
项状态(NEW_ITEM
、MODIFIED
等)。下表列出了
以提高吞吐量的配置设置:
设置 | 说明 | 默认值 | 可尝试的配置更改 |
---|---|---|---|
repository.traversers = t1, t2, t3, ... | 创建一个或多个单独的遍历器,其中 t1, t2, t3, ... 是每个遍历器的唯一名称。每个已命名的遍历器都有自己的一组设置,这些设置使用遍历器的唯一名称进行标识,例如 traversers.t1.hostload 和 traversers.t2.hostload | 一个遍历器 | 可使用此设置添加其他遍历器 |
traversers.t1.hostload = n | 标识将多个项同时编入索引所用的线程数 n。 | 5 | 根据您要在仓库上增加的负载量,尝试对 n 进行调优。请从 10 或更大值开始进行调整。 |
schedule.pollQueueIntervalSecs = s | 标识在重新轮询之前要等待的秒数 (s)。只要 API 在轮询响应中返回项,内容连接器就会继续轮询项。当轮询响应为空时,连接器会等待 s 秒钟,然后重试。此设置仅适用于 ListingConnector | 10 | 可尝试将此设置降至 1。 |
traverser.t1.pollRequest.statuses = status1, status2, … | 指定要编入索引的项的状态(status1、status2 和 …)。例如,将 status1 设置为 NEW_ITEM 并将 status2 设置为 MODIFIED ,指示遍历器 t1 仅将具有这些状态的项编入索引。 | 使用一个遍历器检查所有状态 | 可尝试使用不同的遍历器轮询不同的状态。 |
有关配置文件参数的更多信息,请参阅 Google 提供的配置参数。
上传大文件时 SDK 超时或中断
如果您在上传大型文件时遇到 SDK 超时或中断,
指定更长的超时时间
traverser.timeout=s
(其中 s = 秒数)。此值标识工作器的时长
线程必须处理一个项。SDK 的默认超时时间为 60 秒
遍历线程的情况此外,如果您遇到个别 API 请求,
超时,请使用以下方法来增加请求超时值:
请求超时参数 | 说明 | 默认值 |
---|---|---|
indexingService.connectTimeoutSeconds |
将 API 请求编入索引的连接超时。 | 120 秒。 |
indexingService.readTimeoutSeconds |
将 API 请求编入索引的读取超时。 | 120 秒。 |