调整连接器设置

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 请求模式(ASYNCHRONOUSSYNCHRONOUS)。

如需详细了解配置文件参数,请参阅 Google 提供的配置参数

ListTraversalConnector 的索引吞吐量较低

默认情况下,实现 ListTraversalConnnector 的连接器使用单个遍历器来将您的项编入索引。如需提高索引吞吐量,您可以创建多个遍历器,让每个遍历器都有自己的配置,重点关注特定项状态(NEW_ITEMMODIFIED 等)。下表列出了可提高吞吐量的配置设置:

.
设置说明默认可尝试的配置更改
repository.traversers = t1, t2, t3, ...创建一个或多个独立遍历器,其中 t1, t2, t3, ... 是每个遍历器的唯一名称。每个命名的遍历器都有自己的一组设置,这些设置使用遍历器的唯一名称(例如 traversers.t1.hostloadtraversers.t2.hostload)标识一个遍历器可使用此设置添加其他遍历器
traversers.t1.hostload = n标识将多个项同时编入索引所用的线程数 (n)。5根据您要为仓库加载的负载量来调整 n。请从 10 或更大值开始进行调整。
schedule.pollQueueIntervalSecs = s标识在重新轮询之前要等待的秒数 (s)。只要 API 在轮询响应中返回项,内容连接器就会继续轮询项。如果轮询响应为空,连接器将等待 s 秒钟后再重试。此设置仅适用于 ListingConnector10可尝试将此设置降至 1。
traverser.t1.pollRequest.statuses = status1, status2, …指定要编入索引的项的状态(status1status2)。例如,如果将 status1 设置为 NEW_ITEM 并将 status2 设置为 MODIFIED,会指示遍历器 t1 仅将具有这些状态的项编入索引。使用一个遍历器检查所有状态可尝试使用不同的遍历器轮询不同的状态。

如需详细了解配置文件参数,请参阅 Google 提供的配置参数

上传大文件时 SDK 超时或中断

如果您在上传大型文件时遇到 SDK 超时或中断,请使用 traverser.timeout=s(其中 s = 秒数)指定更大的超时值。此值标识工作器线程必须在多长时间内处理某个项。SDK 中的遍历器线程的默认超时时间为 60 秒。此外,如果您遇到个别 API 请求超时的情况,请使用以下方法来增加请求超时值:

请求超时参数 说明 默认
indexingService.connectTimeoutSeconds 将 API 请求编入索引的连接超时。 120 秒。
indexingService.readTimeoutSeconds 将 API 请求编入索引的读取超时。 120 秒。